作者: 叫我颜先生 | 来源:发表于2019-02-02 10:53 被阅读0次

    快捷键

    • 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.csdn.net/meegomeego/article/details/38439593

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

    相关文章

      网友评论

          本文标题:

          本文链接:https://www.haomeiwen.com/subject/izhssqtx.html