我需要将所有常量分组到一个文件中并在检查器上显示它们。这是我尝试过的:
#define
常数#define speed 10.0f #define hp 3
这不起作用,无论我把它们放在哪里,错误:
在文件中的第一个标记之后无法定义或取消定义预处理器符号
使用静态
public static readonly float speed = 10.0f; public static readonly int hp = 3;
它可以工作,但是当我将它附加到主摄像机时,常量不会显示在检查器窗口中。现在我知道检查员不支持静态字段。
按照建议使用单例
using UnityEngine; using System.Collections; public class GameConfig : MonoBehaviour { private static GameConfig instance; public GameConfig() { if (instance != null) { Debug.LogError("GameConfig Warning: unable to create multiple instances"); } instance = this; } public static GameConfig Instance { get { if (instance == null) { Debug.Log("GameConfig: Creating an instance"); new GameConfig(); } return instance; } }
现在,如果我添加:
public float speed = 10.0f;
GameConfig.Instance.speed 可以访问,但单声道编辑器不会弹出自动完成。它得到这个消息:
CompareBaseObjects 只能从主线程调用。
加载场景时,构造函数和字段初始化程序将从加载线程中执行。
不要在构造函数或字段初始化程序中使用此函数,而是将初始化代码移至 Awake 或 Start 函数。如果我尝试:
public float speed = 10.0f; public float Speed {get {return speed;}}
我得到同样的信息。
但是游戏仍然可以运行,并且变量正确显示在检查器上。注意:即使我修复了它,还有其他方法可以吗?因为编写具有 2 个名称(属性 + 字段)的常量和繁琐的工作似乎是多余的。