第一篇博客它来了!学习unity的过程中,总会遇到一些零碎的知识点和技巧,在此整理记录,方便日后查看,Unity版本:2018.3.2f1。
因为还是个萌新,如果有写的不对或不好的地方,敬请谅解。
1.使用RuntimeInitializeOnLoadMethod特性的静态方法会在场景加载后直接调用(这个脚本不需要挂载到物体上)
- [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
- public static void Test()
- {
- Debug.Log("start game");
- }
2.使用SerializeField将私有变量暴露在检视面板中,使用HideInInspector特性在检视面板中隐藏公有变量
- [SerializeField]
- private int PrivateVar;
- [HideInInspector]
- public int PublicVar;

3.用以下代码获得一个随机的布尔值
- bool x= (Random.value > 0.5f);
4.将动画的speed属性设为-1即可倒放动画

5.如果只是存储一些变量的话,建议使用结构体而不是类,以减少垃圾回收
6.以下代码可以在第一个协程结束时启动第二个协程
- IEnumerator First()
- {
- yield return StartCoroutine(Second());
- }
- IEnumerator Second()
- {
- yield return 0;
- }
7.以下代码可以让编辑器暂停,方便调试
- EditorApplication.isPaused = true;
8.可以将文件夹的快捷方式拖入项目,方便打开

9.使用CompareTag来比较标签而不是obj.Tag=="player",效率更高
- GameObject obj;
- if (obj.CompareTag("player"))
- {
- Debug.Log("Is Player");
- }
10.Debug支持一些简单样式
- Debug.Log("<color=red>Oh!!!</color>");

11.怎么忽略控制台警告

先查看警告中的代号,就是CS之后的数字,这里是0414,再到脚本中最上方加上以下代码
- #pragma warning disable 0414
回到Unity编译,就不会再弹出警告了
12.不要频繁使用Camera.main,它其实就是......
- Camera.main = GameObject.FindGameObjectWithTag("MainCamera").GetComponent<Camera>();
13.比较距离时不要用Vector3.distance
Vector3.sqrMagnitude用于得到向量长度未开方的值,使用(a - b).sqrMagnitude和距离平方作比较,这样不用做开方运算,效率更高
- Vector3 a;
- Vector3 b;
- float distance = 1f;
- void Update()
- {
- if ((a - b).sqrMagnitude < distance * distance)
- {
- //todo
- }
- }
14.给检视面板添加一些效果
- [Header("等级")] //给变量加上标题文字
- public int level;
- [Space] //空行
- [TextArea] //多行输入框
- public string Des;
- [Range(0,10)] //滑动条
- public float Speed=1;
- [Tooltip("生命值")] //鼠标移到变量上出现的提示
- public int Hp = 100;

15.在项目中搜索同类型资源
在Project视图上方的搜素栏可以按类型搜索资源,使用“t:资源类型”,比如t:scene可以搜索到所有场景,t:script可以搜索到所有脚本


还可以在前面加上资源名称的子字符串,比如test t:scene可以搜索所有名字中带“test”的场景

第一篇暂时先写这么多,以后再继续更新其他小技巧。