Unity 学习中碰到的一些用法 C#

  • Input.GetAxis() , “Mouse X”  "Mouse Y" ,"Horizontal" ,"vertical" ,得到鼠标/键盘造成的一个偏移量,是float类型
  • Ray ray  = ... toray(point)   中 ray是一种代码对象,往往和Gameobject混谈
  • 可以利用携程进行暂停,更重要的是可以分帧加载某种资源
    • 暂停代码——被射线集中的某个东西在1S后留下一个球(子弹印)
      void Update () {
              if (Input.GetMouseButtonDown(0))
              {
                  //Vector3 point = new Vector3(_camera.pixelWidth / 2, _camera.pixelHeight / 2, 0);
                  Vector3 point= Input.mousePosition;
                  Ray ray = _camera.ScreenPointToRay(point);
                  RaycastHit hit;
                  if (Physics.Raycast(ray, out hit))
                  {
                      StartCoroutine(CreateBall(hit.collider.transform.position));
                  }
              }
      	}
      
          private IEnumerator CreateBall(Vector3 point)
          {
              GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
              sphere.transform.position = point;
              yield return new WaitForSeconds(1);
              Destroy(sphere);
          }
    • 分步加载资源,可以让玩家不用加载太多东西
      private int num = 0;
      private const  int total=30;
      
      	void Start()
          {
              StartCoroutine(coRoutine());
          }
      
         IEnumerator coRoutine()
          {
              while (num<total)
              {
                  num++;
                  Debug.Log(num);
                  yield return null;
              }   
          }
      	
      	void Update () {
              Debug.Log("update!");
      	}
          void LateUpdate()
          {
              Debug.Log("lateUpdate!");
          }

       

    • 可视化准心
      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      
      public class show : MonoBehaviour {
      
          private Camera _camera;
      	// Use this for initialization
      	void Start () {
              _camera = GetComponent<Camera>();
              Cursor.lockState = CursorLockMode.Locked; // 隐藏鼠标光标
              Cursor.visible = false;
      	}
      
          // Update is called once per frame
          private void OnGUI()
          {
              int sz = 100;
              float posX = _camera.pixelWidth / 2 ;
              float posY = _camera.pixelHeight / 2 ;
              GUI.Label(new Rect(posX, posY, sz, sz), "*");
          }
      }
      

       

  • Destory(this.gameobject) 不能写成Destory(this),this只是指向这个脚本组件,而this.gameobject指向脚本所指向的对象
  • [SerializeField] 建议所有的私有变量可以加这个,这样使得外界不能使用,但可以实现软编码
  • CharacterController.move的问题
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class doSth : MonoBehaviour
    {
    
        private CharacterController _c;
        // Use this for initialization
        void Start()
        {
            _c = GetComponent<CharacterController>();
        }
    
        // Update is called once per frame
        void Update()
        {
            float X = Input.GetAxis("Horizontal");
            float Z = Input.GetAxis("Vertical");
            Vector3 move = new Vector3(X, 0, Z);
            move = move * Time.deltaTime;
            //到上面为止的move,自己理想中的方向,比如W,肯定是朝着自己的Z轴走。但实际输入的世界坐标,如果没把
            //这种实际输入的坐标经过transform.TransformDirection(move);这句话的转化:将move变成相对于this.transform走的世界坐标,再去移动就对了
    
            move = transform.TransformDirection(move);
            _c.Move(move); //而对于transfrom.Translate是不需要TransformDirection的,因为Transfrom默认使用Space.Self
        }
    }
    

     

  • 一般开发会使用白盒开发:方便,不用花过多的时间实现一些基础的操作,总是从见到到复杂的改变
  • 每种Material是着色器的一个实例,它概要描述了用于绘制表面的指令
  • 新建材质球->shader改变成skybox后可以自定义一个天空盒
  • 实现小怪的简单来回AI
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class BackAndForth : MonoBehaviour {
    
        private int _dir = 1;
        private float Speed = 2.0f;
        private float Zup=10.0f;
        private float Zlow = -10.0f;
        //private bool change_dir = false;
        private Transform m_transform;
        // Use this for initialization
        void Start () {
            m_transform = transform;
    	}
    	
    	// Update is called once per frame
    	void Update () {
            m_transform.Translate(0, 0, _dir * Speed * Time.deltaTime);
            if(m_transform.position.z  >= Zup || m_transform.position.z <= Zlow)
            {
                //change_dir = true;
                _dir = -_dir;
            }
    	}
    }
    

     

  • 粒子系统可以创建火焰/烟雾等效果
  • 对于img,2D叫精灵,3D叫贴图
  • 通常会将UI和Scene分离处理
  • 监听InputFields的内容改变和最终编辑结果(回车)
    using UnityEngine;
    using UnityEngine.UI;
    
    public class inputfielddemo : MonoBehaviour
    {
        private InputField m_inputField;
    
        void Start()
        {
            m_inputField = gameObject.GetComponent<InputField>();
            m_inputField.onValueChanged.AddListener(InputFieldV);//不知道为什么直接在编辑界面加监听不行
            m_inputField.onEndEdit.AddListener(inputFieldEnd);
        }
    
    
        void InputFieldV(string t)
        {
            print("当值发生改变ing" + t);
        }
        void inputFieldEnd(string e)
        {
            print("当编辑结束时:" + e);
        }
    }

     

  • 通过PlayerPrefs.SetFloat保存一个想一直在游戏中保存的数据
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class record : MonoBehaviour {
    
        private float delta = 0.5f;
    	// Use this for initialization
    	void Start () {
            PlayerPrefs.SetFloat("go",1.0f);
    	}
    	
    	// Update is called once per frame
    	void Update () {
            PlayerPrefs.SetFloat("go", PlayerPrefs.GetFloat("go")+1.0f);
            Debug.Log(PlayerPrefs.GetFloat("go"));
    	}
    }
    
  •  

全部评论

相关推荐

与火:这不接? 留子的钱不挣白不挣
点赞 评论 收藏
分享
可可可可可_:nb啊,看样子是专科玩了几年随便专升本了个民办,又玩了两年。你这能找到我吃
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-26 18:54
说等下个版本吧的发呆爱好者很贪睡:佬最后去了哪家呀
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务