检查器中的设置值是否与Unity中的默认值相同?

时间:2018-07-27 12:35:51

标签: c# unity3d

我对Unity非常陌生,所以这可能是一个愚蠢的问题,但是在inspector中设置值与在代码中设置默认值一样吗?

示例:

public string name; //then go to inspector and set it as "Bob".

public string name = "Bob";

那么,换句话说,以上这些动作会达到相同的效果吗?

2 个答案:

答案 0 :(得分:4)

  

以上这些动作会达到相同的效果吗?

,他们都会完成相同的任务。单击“播放”按钮后,它们都会使用“鲍勃”值初始化name变量。

如果将字段变量设置为public,强烈建议您不要设置代码的默认值。这样做的原因是因为您将遇到一个错误,该错误会花费您一些时间来发现和修复。

例如,假设您有以下内容:

public string name = "Bob";

然后转到编辑器进行编译。稍后,您返回到代码,并将其更改为“ Jake”

public string name = "Jake";

在编程时,您仍然会认为该值现在是“ Jake”,并且期望您的代码基于“ Jake”值来执行某些操作。由于name仍为“鲍勃”,因此将失败。名称变量的最新值将显示在编辑器中,直到重命名name变量或重置包含name变量的脚本/组件为止:

enter image description here

这是一个浪费时间的问题,是的,有些人还在经历。如果要创建变量public,但又不想从编辑器中分配变量,请使用[HideInInspector]属性将其隐藏。

[HideInInspector]
public string name = "Bob";

这将确保您不会在编辑器中错误地更改它,并在允许从其他脚本访问变量的同时引起问题。


这仅适用于声明变量的地方。您可以稍后在函数或属性中更改变量,并且更改应会生效,而不会出现任何问题。

答案 1 :(得分:1)

不完全是:第一次将脚本附加到对象上,并且将全局变量初始化为对象的代码后,Unity会使用这些变量设置相应的Inspector值。

但是,一旦在检查器中设置了变量,您就只能通过检查器本身进行更改,而不能通过代码进行更改。

很明显,这仅适用于不取决于资产的类型(基元,Vector2,Vector3等)。当然,对于预制件,材料等,唯一的方法是始终从检查员那里经过。

结论:永远不要依赖代码初始化!始终确保由Inspector正确设置它们。