質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1568閲覧

InstantiateのGameObject作成タイミングは?

coryell

総合スコア11

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/06/03 13:07

Instantiateを使ってGameObjectを作成した後にGameObjectのメソッド呼び出しを行いたい.

閲覧していただきありがとうございます.

Unityを使った開発を行っております.その中でInstantiateを使ってGameObjectをスクリプトから作成し,そのGameObjectが持つメソッドを呼び出そうとしております.その際のGameObjectの作成が終了するタイミングがよくわからず質問いたしました.

Objectが持っているスクリプトからUIのCanvasが持っているTextの中身を書き換えようとしています.しかし下記のソースコードのような書き方だとDialogHandlerにおいてStart()よりもSetText()のほうが先に呼ばれてしまい,Debug.Logではtest2, test1の順で表示されてしまいます.これですとTextを書き換えようとしてもそもそもGameObjectが作成されていないのでエラーとなってしまいます.

InstantiateでGameObjectを作成した後の呼び出しにはどのような方法を用いればよろしいのでしょうか?
何かアドバイスをいただけると助かります.

該当のソースコード

C#

1public class Exploder : MonoBehaviour 2{ 3 public void GeneratePanel() 4 { 5 GameObject listPanel = Instantiate(samplePanel) as GameObject; 6 listPanel.transform.SetParent(canvas.transform, false); 7 listPanel.GetComponent<DialogHandler>().SetText("test"); 8 } 9 10}
public class DialogHandler : MonoBehaviour { private Text targetText; public bool isActive { get; private set; } // Start is called before the first frame update void Start() { Debug.Log("test1"); this.targetText = this.GetComponentInChildren<Text>(); } // Update is called once per frame void Update() { } public void SetText(string _text) { Debug.Log("test2"); // this.targetText.text = "test"; } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

すごい単純にやるならStart()のかわりにAwake()を使ってください。
Awake()ならInstantiate()直後に実行されるのでお望みの動作をすると思います。

参考になりそうなのはこちらです
イベント関数の実行順

投稿2019/06/04 00:29

hogefugapiyo

総合スコア3302

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coryell

2019/06/04 07:43

回答ありがとうございます. Awake()を使うことで無事に動作させることができました. boolを使ってStartしたのかを判断していたので添付していただいたリンクが大変参考になりました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問