Unity 编程技巧

当涉及到 Unity 中的编程时,有大量有用的 programming 关键字和命令来改进编辑器内工作流程并加快开发过程。

一些关键字专用于调试,而另一些关键字则旨在将编辑器逻辑与脚本逻辑分开。

1. '[SerializeField]' 属性

默认情况下,Unity 对检查器隐藏私有变量,但通过在它们之前添加 '[SerializeField]' 属性,它们将在检查器中变得可配置,同时保持它们无法从其他脚本中访问。

[SerializeField]
private int myPrivateVariable;

2. '[HideInInspector]' 和 '[System.NonSerialized]' 属性

'[HideInInspector]' 和 '[System.NonSerialized]' 属性都有类似的功能,向检查器隐藏公共变量,但是,它们在序列化方面略有不同。

'[HideInInspector]' 和 '[System.NonSerialized]' 之间的区别在于 '[HideInInspector]' 只会对检查器隐藏变量,但是,Unity 将继续序列化它(意味着默认值可能与代码中提供的不同),另一方面,'[System.NonSerialized]' 不仅会向检查器隐藏变量,还会发出信号 Unity 不要序列化它(这意味着默认值将在会话之间重置为代码中提供的值)。

[HideInInspector]
public int myInternalVariable = 0; //Will always be 0 after the first initialization, so if you decide to change the value in the script, it may not always reflect in the Editor. Often used to remove clutter from the inspector.

[System.NonSerialized]
public int myNonSerializedVariable = 1; //The initial value will always be 1, or whatever value is set. Often used to mimic a private variable, while keeping it accessible from within other scripts.

3. '[ExecuteAlways]' 属性

'[ExecuteAlways]' 强制脚本在编辑模式和 Prefab 编辑模式下执行,即使游戏没有玩。这对于测试和调试目的非常有用。

该属性添加在类声明之前:

[ExecuteAlways]
public class MyScript : MonoBehaviour {
    // ...
}

4. 'Debug.Break()'

'Debug.Break()' 编辑器暂停。

当您想要检查检查器中的某些值并且无法手动暂停时,此功能非常有用。

void Update() {
    if (someCondition) {
        Debug.Break();
    }
}

5. '[Range]' 属性

'[Range]' 属性允许您在编辑器中为公共 float 或 int 变量创建滑块,这对于以更用户友好的方式动态调整值非常有用。只需提供最小值和最大值,如下所示:

[Range(0f, 1f)]
public float myFloatVariable;

Unity 中评论您最喜欢的编程技巧和技巧。

推荐文章
Unity C# 中有用关键字列表
Unity C# 脚本语言简介
了解 Unity 基于组件的架构
受 Poppy Playtime 启发,在 Unity 中创建 GrabPack
在 Unity 中创建子弹时间效果
在 Unity 中创建交互式对象
在 Unity 中实现动力学交互