• Unity中容易被忽略的小技巧


    今天在游戏蛮牛上看到慕容小匹夫的一篇文章,感觉对自己现在的水平很实用,就给转载了过来,以便日后好温习一下。

    这里还是要支持原创作者,原文地址在这里

    一、编辑器染色

    一个常见的工作情景是我们在调整场景内的某些组件参数时,没有注意到自己是在Play Mode的模式下进行的,从而导致修改没有被保存下来。

    这个问题的关键在于是我们没有意识到自己已经处在Play Mode,如果我们能够在修改参数的时候,清楚的意识到自己处于Play Mode,那么我们自然可以通过Copy Component来保存数据或者是选择在Editor Mode进行修改。因此,我们可以通过对编辑器染色来醒目的提醒自己,自己是否已经处于Play Mode了。

    一个简单的方法就是在Play Mode给编辑器染上不同的颜色:

    设置路径:Edit->Preference->Color->Playmode tint

    在这里,我们就可以修改Play Mode的编辑器颜色了,当然还有很多别的染色可以修改。

     

    修改完之后,在Play Mode的编辑器大概效果是下面这样的:

    这样,我们就能时刻意识到自己是否已经在Play Mode了。

    二、锁定对象的Inspector视窗

    还是一个实际的工作情景,场景中有很多对象,我们想创建一个管理器来容纳这些对象,最简单的方法就是在Hierarchy视窗中选择那些对象,将它们拖入管理器的容器中。

    但是,我们立马就会发现一个问题,那就是我先选中管理器之后,再去多选所有需要被拖入管理器的对象时,Inspector视窗会变为此时所选中的被管理对象,而非管理器。这时,我们就用到了这条小技巧,我们可以锁定管理器的Inspector视窗,选中多个被管理对象之后将它们拖入管理器的数组中。我们要做的只是勾选这个小锁子图标,之后就可以同时将多个对象通过锁定的Inspector视窗拖入管理器的数组中了:

    三、Inspector视窗的Debug Mode模式

    同样是一个和Inspector视窗相关的技巧。我相信有一些朋友已经经常会用到了,但是我觉得这条也很实用,因此也在此和各位朋友分享。

    这个常见的工作场景是这样的:我有一些字段不想通过外部修改,因此声明为private,但是又有在运行时观察这些字段实时值的需求。

    默认状况下,它处于Normal模式,现在在Inspector视窗中显示的只有一个公共的成员。

    这时我们就可以点击Inspector视窗右上角的下拉菜单,可以看到它和一般视窗的下拉菜单相比多了几个选项。

     

    我们这里就可以选择Debug模式了。更换模式之后,之前的Inspector视窗就变成了下面这样子:

    这样,我们就可以既限制字段的访问权限又观察这些私有成员的变化了。

    四、利用Scene视窗设置相机数据

    我觉得这条技巧很受用。这次我们的工作情景变成了这样:对很多人来说,在场景视图中调整观察的角度、位置等等是一件十分简单的事情,但是如果真的要游戏中达到同样的效果,则必须去调整场景中的相机。

    左边Scene视图,右边Game视图

    (左边Scene视图,右边Game视图)

    相对来说,调整相机的过程更复杂,那么有没有什么方法能够直接让摄像机应用和Scene视图一样的设置呢?这条技巧就是关于这个的。

    Shift + Ctrl + f

     上面的快捷键就可以把Scene视图中的数据复制给选中的摄像机。

    当然,除了使用快捷键,我们还可以在菜单中选择相应的操作。

    GameObject->Align With View

    也可以达到相同的效果。

    左边Scene视图,右边Game视图

    (左边Scene视图,右边Game视图)

    五、拓展编辑器

    这一部分并非来自某一个技巧,而是和拓展编辑器相关的小技巧的集合。

    在Unity中拓展编辑器,往往需要用到C#的各种特性(attribute)。

    例如,我们可以使用[RangeAttribute]在Inspector视窗上显示一个滑动条。

     [Range(0,10)]
     public int publicInt;

    如果,我们嫌Inspector视窗上显示的各个字段太混乱没有章法,那么我们可以使用另外两个特性来帮助我们对显示在Inspector上的字段进行整理:[SpaceAttribute]和[HeaderAttribute]。

        #region 字段
    
        [Header("测试数据1")]
        [Range(0,10)]
        public int publicInt;
        public float publicFloat;
        public bool publicBool;
        public GameObject publicObj;
        [Header("测试数据2")]
        //[Space(10)]
        public List<GameObject> objsArray;
    
        #endregion

    这样,我们就可以为一堆字段分类显示。

    如果,我们既想保证类的某个字段不被其他的类访问修改,又想在Inspector视窗中修改这个字段的值的话,就可以采用private +[SerializeField]属性的方案。

     

        [SerializeField]
        private int privateInt;

    六、更好的预览模型

    这条技巧,我相信它能够提供给我们在Editor中观察模型的更好的体验。一个可能的工作情景是这样的,我们导入了一个模型,并希望在模型的Inspector视窗上预览该模型时,常常只能拘泥于这个角落。

    想要看的更清楚、更大似乎只能拖动整个Inspector视窗。
    其实,我们可以轻松的将模型预览的小窗口单独拖出来。只需要鼠标右键单击预览窗口的上沿。

    结果如下:

    以上就是今天学习到的内容,以后还会继续和大家分享学习到的内容。

    游戏场景资源:Japanese Matsuri City (https://www.assetstore.unity3d.com/cn/#%21/content/35619)(Unity资源商店中的免费资源)

    原视频链接:

    TOP 10 UNITY TIPS
    https://www.youtube.com/watch?v=JDVuTBHnGWw

    TOP 10 UNITY TIPS #2
    https://www.youtube.com/watch?v=IHeMmFxvmkY

     

  • 相关阅读:
    进程之锁机制, 信号机制, 事件机制
    进程相关内容01
    计算机相关知识
    网络编程------socketserver模块以及socket模块的更多用法.
    网络编程------粘包问题以及切换目录
    简单工厂模式
    SQL LinqToSql Lambda
    检测到有潜在危险的 Request.Form 值
    轻量级ORM 利用T4模板 批量生成多文件 实体和业务逻辑 代码
    最全前端资源汇集
  • 原文地址:https://www.cnblogs.com/Mr-Miracle/p/9272565.html
Copyright © 2020-2023  润新知