# 【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}");