在Inspector面板中显示私有变量
[SerializeField] private int myNumber = 20;在Inspector面板中隐藏公有变量
[HideInInspector] public int myNumber = 20;编辑器菜单栏
//MenuItem属性 菜单栏可选择执行函数 [MenuItem("MyMenu/Do Something")] static void DoSomething() { }自定义窗口
//将类继承自EditorWindow,可以添加自定义窗口,在此基础上编写一些命令和工具,window菜单下多了Example窗口选项 public class ExampleWindow : EditorWindow { [MenuItem("Window/Example")] public static void ShowWindow() { GetWindow<ExampleWindow>("Example"); } } 自定义窗口.jpgInspector某属性右侧齿轮下拉
//对应脚本右侧点击齿轮出现DoSomething选项 [ContextMenu("Do Something")] void DoSomething() { } ContextMenu.jpg自定义Inspector属性
[CustomEditor(typeof(Sphere))] public class SphereEditor : Editor { public override void OnInspectorGUI() { GUILayout.Label("自定义Inspector"); GUILayout.Button("确定"); } } //两个变量声明之间加入[Space]可在Inspector中添加一个空行 //添加Header可在Inspector面板中加入一段文字 [Header("Player Settings")][/color][/size][/font] [font=微软雅黑][size=3][color=rgb(26, 26, 26)] public float speed = 1f; public int size = 10; //在变量前加入Tooltip,当鼠标悬停在Inspector面板中的变量上时,可显示关于此变量的说明 [Tooltip("移动速度")] public float speed = 1f; 自定义Inspector.jpg 自定义Inspector.jpg 自定义Inspector.jpgLayer层设置子层级
当创建层时,使用斜杠符进行路径式命名可以为层添加子菜单,可以更好地组织项目
例如:Effect/Model,Effect/UI
获取一个随机布尔值
bool trueOrFalse = (Random.value > 0.5f);使用Struct代替Class
如果数据结构仅保存了有限的几个数值变量,可以考虑使用struct代替Class,因为Class实例由垃圾回收机制来保证内存的回收处理;而struct变量使用完后立即自动解除内存分配
协程嵌套
void Start() { StartCoroutine(FirstCo()); } IEnumerator FirstCo() { yield return StartCoroutine(SecondCo()); } IEnumerator SecondCo() { yield return 0; }比较物体是否接近
//物体距离差平方相比,前者相对于后者开方稍微快点 if ((pointA - pointB).sqrMagnitude < dist * dist) { } if (Vector3.Distance(pointA, pointB) < dist) { }CompareTag方法
//当对游戏对象的Tag进行比对时,从性能考虑,可使用CompareTag方法,不建议使用双等号进行判断 if (gameObject.CompareTag("Enemy")) { } if (gameObject.tag == "Enemy") { }字符串拼接
//可使用StringBuilder进行字符串的拼接,不要使用字符串相加的形式,因为这样会带来额外的内存垃圾,使用StringBuilder需要引用命名空间System.Text StringBuilder myStr = new StringBuilder(); myStr.Append("Hello").Append("The").Append("World"); string myStr = "Hello" + "the" + "world";字符串性能优化
//如果某字符串在整个应用过程中不会改变且被频繁使用,可将其存储在静态只读变量中,从而节省内存分配 static readonly string Fire1 = "Fire1"; void Update() { Input.GetAxis(Fire1); } void Update() { Input.GetAxis("Fire1"); }InvokeRepeating方法
InvokeRepeating能够按照一定的时间间隔反复执行某个函数,若不使用CancelInvoke方法,InvokeRepeating将持续执行,即使将方法所在的脚本关闭
https://blog.csdn.net/meegomeego/article/details/38439593
http://www.manew.com/thread-143268-1-1.html