我对Unity非常陌生,所以这可能是一个愚蠢的问题,但是在inspector中设置值与在代码中设置默认值一样吗?
示例:
public string name; //then go to inspector and set it as "Bob".
或
public string name = "Bob";
那么,换句话说,以上这些动作会达到相同的效果吗?
答案 0 :(得分:4)
以上这些动作会达到相同的效果吗?
是,他们都会完成相同的任务。单击“播放”按钮后,它们都会使用“鲍勃”值初始化name
变量。
如果将字段变量设置为public
,强烈建议您不要设置代码的默认值。这样做的原因是因为您将遇到一个错误,该错误会花费您一些时间来发现和修复。
例如,假设您有以下内容:
public string name = "Bob";
然后转到编辑器进行编译。稍后,您返回到代码,并将其更改为“ Jake” :
public string name = "Jake";
在编程时,您仍然会认为该值现在是“ Jake”,并且期望您的代码基于“ Jake”值来执行某些操作。由于name
仍为“鲍勃”,因此将失败。名称变量的最新值将显示在编辑器中,直到重命名name
变量或重置包含name
变量的脚本/组件为止:
这是一个浪费时间的问题,是的,有些人还在经历。如果要创建变量public
,但又不想从编辑器中分配变量,请使用[HideInInspector]
属性将其隐藏。
[HideInInspector]
public string name = "Bob";
这将确保您不会在编辑器中错误地更改它,并在允许从其他脚本访问变量的同时引起问题。
这仅适用于声明变量的地方。您可以稍后在函数或属性中更改变量,并且更改应会生效,而不会出现任何问题。
答案 1 :(得分:1)
不完全是:第一次将脚本附加到对象上,并且将全局变量初始化为对象的代码后,Unity会使用这些变量设置相应的Inspector值。
但是,一旦在检查器中设置了变量,您就只能通过检查器本身进行更改,而不能通过代码进行更改。
很明显,这仅适用于不取决于资产的类型(基元,Vector2,Vector3等)。当然,对于预制件,材料等,唯一的方法是始终从检查员那里经过。
结论:永远不要依赖代码初始化!始终确保由Inspector正确设置它们。