すべての定数を1つのファイルにグループ化し、インスペクターに表示する必要があります。これが私が試したことです:
#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つの名前(プロパティ+フィールド)と面倒な作業で定数を書くのは冗長に思えるので。