Unityを使って開発をしています。
質問がいくつかあります。マル数字で示したところが質問のすべてです。
GameManager クラスを MoveManager クラスが継承しています。
GameManager クラスは以下のようにGameObjectをメンバ変数として持っています。
C#
1public class GameManager : MonoBehaviour { 2 public static GameObject player; 3 public GameObject mainCamera; 4}
子クラスではmainCameraの値を変化させます。
C#
1public class MoveManager : GameManager { 2 float stageMoveSpeed = 0.01f; 3 Transform trMainCamera; 4 Vector3 posTrMainCamera; 5 6 private void Start() { 7 trMainCamera = mainCamera.GetComponent<Transform>(); 8 posTrMainCamera = trMainCamera.position; 9 } 10 11 void Update() { 12 posTrMainCamera.x = posTrMainCamera.x + stageMoveSpeed; 13 trMainCamera.position = posTrMainCamera; 14 } 15}
この上記2つのスクリプトを一つのGameManagerというオブジェクトにAdd Componentしてみました。
この時、Inspector上はこのような表示となっております。
1つ目の質問です。
①なぜMain CameraはGameManagerとMoveManagerの両方に出現するのでしょうか。継承している場合、子クラスのInspectorにも表示されるのでしょうか
2つ目の質問です。
②オブジェクトをアタッチできるようにInspector上に表示していますが、GameManager のplayer がInspector上に表示されないのはなぜでしょうか。Inspector上にアタッチできるような状態でオブジェクト名を表示させる条件は何なのでしょうか?(publicでstaticではないGameObjectの型ならなんでも表示されるのでしょうか)
この状態で、GameManagerのMainCamera にメインカメラをアタッチしてみましたが、MainCameraを取得できず実行時エラーとなってしまいました。
しかし、以下のようにMoveManagerにアタッチしてみたところ、MainCameraを取得できたため、エラーが起こりませんでした。
③上記のように、MoveManagerにアタッチした時だけメインカメラを取得できた理由は何なのでしょうか?親クラスにオブジェクトをアタッチしているから、子クラスが参照できると思うのですが、なぜ親クラスでアタッチすると利用できず、子クラスでアタッチすると参照できるのでしょうか。そもそも子クラスにはGameObjectの宣言がないので、子クラス側でアタッチできるというのもよくわかりません。
④このように実装しているのも、よく利用するオブジェクトを一か所にまとめた設計にしたいというのが狙いなのですが、ほかに良い方法はありますでしょうか。
上記の①~④が質問です。
よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/01 09:38
2018/12/02 03:16