# 【Unity使用C#技巧集锦】

# 私有变量的写法

  • 默认可以不写“private”。
  • 命名规范“m_Xxxx”。
  • 如果需要在编辑器查看私有属性的数值,可以添加 [SerializeField] 。

# 编辑器专属代码

#if UNITY_EDITOR
    // 相关非游戏本体逻辑....
#endif

# 脚本依赖组件

需要在 class 上方添加 [RequireComponent(typeof(Rigidbody))] 。

# 获取组件

GetComponentInChildren<SomeComp>()

这个方法返回的是包含检测自己的组件。

# 绘制调试线段

在场景里绘制调试线段,例如汽车自动驾驶的路径。 使用 Gizmos 类可以绘制线段、立方体、矩形等等辅助显示的对象。

脚本有两个方法可以继承:

  • OnDrawGizmos 编辑器未选择该对象时,调用的渲染函数。
  • OnDrawGizmosSelected 在编辑器选择游戏对象时调用的渲染函数。

Gizmos.color 可以设定当前绘制线段的颜色。

# 参数里的this关键字

作用:可以扩展某类,比如在 Vector3 上增加一个Round 方法,必须在静态类上新增静态方法。

// 扩展Vector3 类的示例
public static class ExtensionMethods {
    public static Vector3 Round(this Vector3 v)
    {
        v.x = Mathf.Round(v.x);
        v.y = Mathf.Round(v.y);
        v.z = Mathf.Round(v.z);
    }
    public static Vector3 Round(this Vector3 v,float size)
    {
        return (v/size).Round() * size; // 这里就使用了扩展Vector3 的Round方法
    }
}

# 单例

public XXX xxx
{
    get {
        if(xxx == null){
            xxx = new XXX();
        }
        return xxx;
    }
}

# GetSet

[SerializeField] protected float m_PitchDampingTime = 0.1f;
public float PitchDampingTime { get { return m_PitchDampingTime;} set { m_PitchDampingTime = value; } }

# 判断按键Alt是否按下

bool holdingAlt = (Event.current.modifiers & EventModifiers.Alt) != 0;

# 字符串拼接

// 在字符串签名添加 $符号,字符串内就可以 {属性} 进行自动拼接
Log.Print($"a:{result.a}");