快捷键

  • 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()
    {
    }
  • 自定义窗口

    //将类继承自EditorWindow,可以添加自定义窗口,在此基础上编写一些命令和工具,window菜单下多了Example窗口选项
    public class ExampleWindow : EditorWindow
    {
        [MenuItem("Window/Example")]
        public static void ShowWindow()
        {
            GetWindow<ExampleWindow>("Example");
        }
    }
    自定义窗口.jpg
  • Inspector某属性右侧齿轮下拉

    //对应脚本右侧点击齿轮出现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.jpg
  • 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将持续执行,即使将方法所在的脚本关闭


参考

https://blog.youkuaiyun.com/meegomeego/article/details/38439593

http://www.manew.com/thread-143268-1-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值