【Unity】Instantiateで動的生成した物体にSendMessageできない現象の解決方法

2022年10月11日

どうも、だらはです。
今回は、Instantiateで動的生成した物体にSendMessageできない現象の解決方法を紹介します。

スポンサーリンク

現象と解決方法

先ず再現した現象の説明をさせてください。
状況としては、クリックしたGameObjectに対してSendMessageするスクリプトを組んだのですが、Sceneに初期配置したものにはSendMessageできるのに、Instantiateで動的生成したものにはSendMessageできない状況が再現しました。

初期化処理がうまく行ってないのかなー?
そう思って色々と調べていたがやはり、初期化処理が原因でした。
具体的に言うと、動的生成した物体のStart()が働いていませんでした。
以下の対応により、最小の工数で改善できました。

  • 変更前:Start()にて初期化処理
  • 変更後:Awake()にて初期化処理

Start()は、Update()が呼び出される前にのみ実行されるため動的生成された物体で実行されません。
対してAwake()は、コンストラクタのように機能するため初期化処理の実行に最適な訳です。
実行タイミングはUnityの公式リファレンスを参照して頂くと理解しやすいと思います!

まとめ

いかがでしたでしょうか。
パスの設定や初期化はStart()ではなくAwake()に書くことをお勧めします。
本現象のようなエラーが再現する可能性があり、原因特定も割と時間が掛かってしまったので、覚えておくと損はないと思います('ω’)

以上、だらはでした。

 

 

スポンサーリンク

基礎

Posted by daraha_gm