ITエンジニアのブログ

IT企業でエンジニアやってる人間の日常について

Unity:Resources.LoadAllのタイミングで嵌った。

Unityで画像をロードしながら表示させるときに、タイミングの妙によってうまく表示できていませんでした。


1: Instantiate によって生成されるオブジェクトのスクリプト

// class Sub

void Start() {
    this.sprites = Resources.LoadAll<Sprite>("Numbers/");
}

void Method() {
    // ...
    SpriteRenderer renderer = (SpriteRenderer)obj.AddComponent<SpriteRenderer> ();
    renderer.sprite = this.sprites[0];
}


2: インスタンスを作成する側のスクリプト

GameObject instance = Instantiate(obj_x, transform.position, transform.rotation);
instanceGetComponent<Sub>().Method;


2:の方でインスタンスを作ってすぐにメソッドを実行しました。

こうすると1:の方で Start() が終わる前に Method()が実行され、画像がロードできていない不具合が発生します。

Startではなく Awake を使うか、画像を入れる処理を Update() にすべきでした。