Unity5.5.1(C#)で、クイズを出題するゲームアプリを作っています。
クイズは3種類(○×、3択、並べ替え)あり、読み込んだクイズがそのどれかを判別して、各形式のscriptを読み込むという方式をとっています。
詳しく言うと、WholeQuizManagerというScript(これはObjectにアタッチされています)でquizを読み込み、それが○×ならTrueFalseQuizManagerを起動、3択ならThreeChoiceQuizManagerを起動……というようになっています。
コードでいうと、WholeQuizManagerでは
C#
1if(quiz is TrueFalseQuiz){ //TrueFalseQuizは自前のクラス 2 currentManager = new TrueFalseQuizManager(quiz as TrueFalseQuiz) 3} 4……
というようになっており、TrueFalseQuizManagerの中身は
C#
1public class TrueFalseManager : MonoBehaviour, QuizManager { //QuizManagerは自前のクラス 2//…中略… 3 public FourChoiceQuizManager(FourChoiceQuiz quiz) { 4 //起動時の動作が入る 5 } 6 7 public void Update() { 8 //中略 9 } 10}
というふうになっています。WholeQuizManagerのUpdateで、currentManagerのUpdateを呼び、クイズ形式に応じたUpdateが動くようになっています。
しかし、Monobehaviorを継承したクラスがGameObjectにアタッチしないままnewで呼び出されることは良くないようで、警告が出ます。
そこでTrueFalseManagerなどを一旦適当なGameObjectにアタッチしようと試みているのですが、TrueFalseQuizManagerには引数としてquizを渡さなければなりません。
例えば
C#
1 GameObject Object = new GameObject("Object"); 2 TrueFalseQuizManager trueFalseQuizManager = Object.AddComponent<TrueFalseQuizManager>(); 3 currentManager = trueFalseQuizManager;
とすると、一応文法エラーにはなりませんが、quizが渡せておらず、また最初に呼ばれるべきはずのクラス名と同名のメソッド(TrueFalseQuizManager(Quiz quiz))が呼ばれないため、実行エラーが起きます。
長くなってしまいましたが、どのように書けばObjectにアタッチしつつ各形式のManagerを起動できるでしょうか?
ご教授よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/03 00:49 編集
2017/04/03 01:09
2017/04/03 01:26
2017/04/03 03:22
2017/04/03 05:01