Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

【Unity】AwakeとStart

More than 1 year has passed since last update.

AwakeとStart

Unityのイベント関数でよく使うものの中に、AwakeとStartがあります。
どちらも初期化関数なのですが、次のような違いがあったりします。

Awake

  • 最初のシーンのロード
    • この関数は常に Start 関数の前およびプレハブのインスタンス化直後に呼び出されます。(もしゲームオブジェクトがスタートアップ時に無効である場合、有効になるまで Awake は呼び出されません。)

(Unity公式ページより引用)

Start

  • 最初のフレームのアップデート前
    • スクリプトのインスタンスが有効な場合にのみ、最初のフレームのアップデート前に Start が呼び出されます。

(Unity公式ページより引用)

ことの発端

初期化っぽいイベント関数が二つあるのは知ってた。
StartよりもAwakeの方が先に呼ばれるであろうことも知ってた。
てことで、なんとなくAwakeばっかり使っていたのですが
プログラムをちょっと変更したら、UnityEditor上では動いていたプログラムが
実機(Android)では動かなくなってしまいました。

プログラムの作り(変更前)

  • GameDirectorオブジェクト

    • Scene上にインスタンスとして配置
    • Playerの走行ルートや、Enemyの発生を管理する
    • UIの管理
    • Awake内でPlayerの走行ルートをセット。Startなし。
  • Playerオブジェクト

    • Scene上にインスタンスとして配置
    • 設定された走行ルート上を自走する
    • Awake内で初期化を行う。Startなし。

プログラムの作り(変更後)

  • GameDirectorオブジェクト

    • 変更なし
  • Playerオブジェクト

    • Prefab化した後、Scene上にインスタンスとして配置
    • そのほか、変更なし

UnityEditor上と実機上での動きの違い

PlayerのAwakeでは、各種初期化を行っています。
GameDirectorのAwakeで行う走行ルートセットは、
Playerの初期化後に呼ばれる前提でした。

修正前のプログラムでは、UnityEditorとAndroid共に
GameDirectorのAwakeより先にPlayerのAwakeが呼ばれていたようです。

それが、PlayerオブジェクトをPrefabしたことで
Awakeの呼ばれる順番(=インスタンス化の順番?)が変わってしまったようです。
しかも、UnityEditorとAndroidとで異なる。
※処理速度の問題??

結論

  • Awakeは、自分の初期化のみ
  • Startは、他者も関係する初期化を行って良い

こんな感じのルールを作っておけば、問題ないのではないかと思います。

いや~、実機でしかエラーが起きないから
テストのたびにビルドしなきゃいけなくて、時間がかかりました(^^;

s44511173
SE暦20年です。 2019年5月より、フリーランスエンジニアとなりました。 Unityは始めたばかりですが、がんばります!! よろしくお願いします。
https://atelier-hinata.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away