フェレットといっしょの多言語化を行っているのですが、その際に勉強になったので書き留めておきます。
Startに書いた初期化が実行されていない・・・
共通で使用するモジュールを初期化時に生成したかったため、モジュール初期化の処理をStartに書いて実行しましたが、なんか動いていない。
あれ、おかしいなと思って調べてみると・・・モジュールアクセス時にNullReferenceExceptionが!!
初期化失敗してんぞコレ。なぜ?
原因はStartの順番でした
呼び出し側オブジェクトのStart処理で共通使用モジュールを呼び出しているところで例外が発生してました。
共通使用側のStartより先に呼び出し側が走っていたので、初期化されていない共通使用モジュールを呼び出してNullReferenceExceptionとなってしまっていたようです。
結論: Startの順番はDefaultExecutionOrderで指定できる
DefaultExecutionOrderというAttributeがあるそうです。
値が低い方が優先され、標準コンポーネントの実行順は0とのこと。
[DefaultExecutionOrder(-1)]
public class commonProcStarter : MonoBehaviour
{
void Start()
{
// 初期化。
}
}
これで無事ヌルリしなくなりました!
乱用すると怖いことになりそうなので気をつけよう・・・。
参考
テラシュールブログ
【Unity】コンポーネントのイベント実行順についてのTips
お世話になりっぱなしです。
Leave a Reply