【发布时间】:2019-11-18 09:47:49
【问题描述】:
我在一个类中使用一个静态变量,但问题是它需要另一个类的另一个值作为它的初始值(参见代码 sn-p)。我想在 Start 函数中初始化它。但是(如果我错了,请纠正我)这意味着它将为对象的每个实例重新初始化,这是多余的,因为我希望在创建具有 UnitManager 的第一个 Unit 时只初始化一次该变量。
所以我的问题是在什么地方初始化这个变量被认为是一个好习惯?
谢谢!
代码:
public class UnitManager : MonoBehaviour
{
// Distance in terms of Unity Unity from the target position to stop for units
static float distanceToStop;
private void Start()
{
if (WorldCoordController.OneUnityMeterToRealWorld < 10)
{
distanceToStop = 1 / WorldCoordController.OneUnityMeterToRealWorld;
}
else
{
distanceToStop = 0.1f;
}
}
}
【问题讨论】:
-
Initialize
WorldCoordController.OneUnityMeterToRealWorldinAwake(), awake 在启动前被调用,如果这不符合您的需要您可以设置脚本执行顺序:docs.unity3d.com/Manual/class-MonoManager.html -
感谢您的回复!但我也想只初始化一次 distanceToStop 值。
-
然后把它放在一个静态构造函数中,你仍然可以覆盖之后的值,所以你应该把它标记为只读
-
这个类是从 MonoBehaviour 派生的,如果我没记错的话,不建议在 MonoBehaviour 派生类中包含构造函数。
-
确实不推荐,但有一些情况下还不错,但是为什么脚本执行顺序一开始就不满足你呢?
标签: c# unity3d variables static