快捷键
- Scene窗口近距离查看对象:F
- Scene窗口锁定游戏对象:Shift+F
- Scene窗口展现窗口内容合适位置:Ctrl+Shift+F 移动相机观察物体
- 最大化鼠标所在窗口(Maximize):Shift+Space
- 飞行模式:鼠标右键+WSAD 可以前后左右 QE上下
- 顶点吸附:V 按住V键 鼠标移动到顶点处按下鼠标左键 移动到吸附物体处
Editor
-
在Inspector面板中显示私有变量
[SerializeField] private int myNumber = 20;
-
在Inspector面板中隐藏公有变量
[HideInInspector] public int myNumber = 20;
-
编辑器菜单栏
//MenuItem属性 菜单栏可选择执行函数 [MenuItem("MyMenu/Do Something")] static void DoSomething() { }
-
自定义窗口
自定义窗口.jpg//将类继承自EditorWindow,可以添加自定义窗口,在此基础上编写一些命令和工具,window菜单下多了Example窗口选项 public class ExampleWindow : EditorWindow { [MenuItem("Window/Example")] public static void ShowWindow() { GetWindow<ExampleWindow>("Example"); } }
-
Inspector某属性右侧齿轮下拉
ContextMenu.jpg//对应脚本右侧点击齿轮出现DoSomething选项 [ContextMenu("Do Something")] void DoSomething() { }
-
自定义Inspector属性
自定义Inspector.jpg 自定义Inspector.jpg 自定义Inspector.jpg[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;
-
Layer层设置子层级
当创建层时,使用斜杠符进行路径式命名可以为层添加子菜单,可以更好地组织项目
例如:Effect/Model,Effect/UI
C#
-
获取一个随机布尔值
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将持续执行,即使将方法所在的脚本关闭
网友评论