Ctrl+K+C组合键可快速注释选中代码块或光标所在处代码行,Ctrl+K+U取消注释
按下Ctrl+K+F组合键可快速将选中代码块或光标所在处代码与上下文对齐
将两点直接的距离与一个固定距离进行比较时,可使两点相减后取平方(即sqrMagnitude),然后用该值与某个距离值的平方进行比较。不建议使用Vector3.Distance方法获取两点之间的距离,然后与给定的距离值进行比较。因为Vector3.Distance(a,b)相当于(a-b).magnitude,即求平方根,而sqrMagnitude方法省去了求平方根的操作,所以比magnitude执行快,代码如下:
- //建议使用:
- Vector3 a = new Vector3(1, 1, 0);
- Vector3 b = new Vector3(0, 0, 0);
- float value=1.0f;
- if((a-b).sqrMagnitude<value*value)
- {
-
- }
-
- //不建议:
- if(Vector3.Distance(a,b)<value)
- {
- }
按下Alt+键盘上/下键,即可使鼠标光标所在代码行上移/下移
在你Unity版本安装目录下依次打开:Editor/Data/Resources/ScriptTemplates即可看到一堆脚本模板,选择你常用的脚本模板进行修改
Unity里面的随机类Random中使用Random.value可以返回0~1之间的随机数,所以可以让其返回值与0.5f进行比较,就可以获取一个随机布尔值True或false,有点类似于JAVA中的随机类
某些字符串在整个项目中不会改变且被频繁使用,可将其存储在静态只读变量中,从而节省内存分配
- static readonly string Fire1="Fire1";
-
- void Update(){
- Input.GetAxis(Fire1);
-
- //不建议直接使用字符串
- Input.GetAxis("Fire1");
- }
某个组件需要被频繁的访问时,可以在程序初始化时获取到该组件的引用,而不是在需要时才去获取,也就是减少使用GetComponent< T>(),从而避免由于重复获取引起的性能开销
- private MeshRenderer mesh;
- private void Awake()
- {
- mesh = GetComponent
();//初始化时提前缓存组件引用 - }
- void Update()
- {
- mesh.material.color = Color.red;
- }
按下Ctr+F组合键可快速打开查找模式:(可选择当前文档或整个项目等查找匹配字符串)
鼠标光标放置在变量或函数方法处,按下F12可快速定位到其定义的代码行
使用VS写脚本时,输入 if、for、switch、foreach、try、while等语句后可双击Tab键完成语句补全
使用debug.log输出字符串信息时,可以用富文本标记来强调内容
Debug.Log("程序初始化加载资源 "+"bundle is loading");
鼠标光标放置在变量或函数处,按下Shift+F12组合键可快速查看其所有引用,单击某一引用即可定位到其代码行
一般来说,脚本都是要挂载到游戏对象上才能执行,但Unity提供了一个方法可以不用挂载脚本到游戏对象上也可以在程序运行时执行某个方法的语句。只需要在脚本的方法声明[RuntimeInitializeOnLoad(RuntimeInitializeLoadType.BeforeSceneLoad)] 即可,常用于程序初始化前做一些额外的初始化工作,代码如下:
(注意:必须是静态方法上声明才会生效)
- [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
- private static void AfterSceneInit()
- {
- Debug.Log("场景加载之后执行");
- }
- [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
- private static void BeforeSceneInit()
- {
- Debug.Log("场景加载之前执行");
- }
-
当使用到游戏对象的标签Tag进行比较时,从性能上考虑,建议使用CompareTag方法,而不用=去进行判断
- if(gameObject.CompareTag("Player")){}
- //等效于
- if(gameObject.tag=="Player"){}
需要给数据类型struct和Class在面板上赋值,可以在struct和Class声明前添加[System.Serializable]
- [System.Serializable]
- public class UIData
- {
- public Text txt;
- public Image IMG;
- }
- [System.Serializable]
- public struct ObjData
- {
- public Transform pos;
- public string name;
- }
- public class NewBehaviourScript : MonoBehaviour
- {
-
- public UIData mgUIData;
- public ObjData myObjData;
-
- }
使用Debug.Log方法输出信息时,可将gameObject作为此方法的第二个参数,当程序运行时,单击Console面板中对应的输出信息,可在Hierarchy面板中高亮显示挂载了此脚本的游戏物体
- private void Awake()
- {
- Debug.Log("程序初始化", gameObject);
- }
检查空的MonoBehavior Start和Update方法,无论你有无写逻辑,它Start函数都会执行一次,Update函数也是会每帧执行一次。如果没有逻辑实现就将其删掉,因为跑空函数多少会损耗效率
写代码除了养成写注释的好习惯外,也要养成写#region和#endregion 的好习惯,当你的代码有成百上千,甚至更多行时,使用该语句可将两者之间包含的代码块折叠,方便阅读
以上就是我总结的Unity开发必备脚本技巧,如果还想了解Unity的编译技巧的话可以看我之前的文章,要是还有其他问题的话欢迎大家私聊我