InstantiateGameObjectで生成したGameObjectへの値の引き渡し

ここは、Arbor開発者へ使い方に関する質問を行うフォーラムです。
注意点:
  • ユーザー様のプロジェクトの仕様上の問題や設計に対する質問には答えられません。
  • Unityの仕様上の問題に対する質問には答えられません。

Here is the forum to do the questions about how to use to Arbor developer.
Attention point:
  • We can not answer your questions about your project specific issues.
  • We can not answer your questions on Unity's specification issues.

Forum rules
注意点:
  • ユーザー様のプロジェクトの仕様上の問題や設計に対する質問には答えられません。
  • Unityの仕様上の問題に対する質問には答えられません。

Attention point:
  • We can not answer your questions about your project specific issues.
  • We can not answer your questions on Unity's specification issues.
matchy
Posts: 2
Joined: 2020/02/24 08:04

InstantiateGameObjectで生成したGameObjectへの値の引き渡し

Post by matchy » 2020/03/07 11:38

FSMのInstantiateGameObjectでprefabから生成した各GameObjectに対してそれぞれ値を設定し、生成した各GameObjectのFSMでその値を参照できるようにするにはどうしたらよろしいでしょうか?
例えば親GameObjectのFSMのInstantiateGameObjectで子GameObject1を生成して”A”という値を設定、子GameObject2を生成して”B”という値を設定して、子GameObject1のFSMでは”A”という値を、子GameObject2のFSMでは”B”という値を参照できるようにしたいです。

User avatar
caitsithware
管理人
Posts: 327
Joined: 2015/08/17 12:41

Re: InstantiateGameObjectで生成したGameObjectへの値の引き渡し

Post by caitsithware » 2020/03/07 13:51

生成されたGameObject(ArborFSM付き)にそれぞれ値を設定したい、ということですね。

以下のようにすれば可能です。
  1. 生成される側のプレハブにParameterContainerかグラフ内パラメータのどちらかを追加(もしすでにあるならそれを使用)
    ParameterContainer
    パラメータタブ
  2. 生成する側のFSMに演算ノードのGameObject.GetComponentを追加。
    GameObject.GetComponent
  3. 取得するタイプをArbor/ParameterContainerに設定。
  4. 他のステートを作成し、CalcParameterを追加。
    CalcParameter
  5. GameObject.GetComponentのComponentフィールドからCalcParameterのContainerフィールドに接続。
  6. CalcParameterのReferenceTypeや値などを設定。
  7. InstantiateGameObjectのOutputをGameObject.GetComponentのGameObjectフィールドに接続。
    InstantiateGameObject
  8. InstantiateGameObject直後にCalcParameterのステートへ遷移するようにGoToTransitionなどを設定。
  9. 生成される側の処理が行われる前にCalcParameterステートを動作させるために、TransitionTimingをImmediateに設定。
    TransitionTiming
Prefab側のFSM
Prefab側のFSM
PrefabGraph.png (51.47 KiB) Viewed 186 times
生成する側のFSM
生成する側のFSM
InstantiateGraph.png (103.61 KiB) Viewed 186 times

また、他にも設定したいパラメータが多かったり、同じような生成処理が多かったりした場合に、何度も似たFSMを組むのが大変でしたらスクリプトの自作をお勧めいたします。
  1. 生成される側は上記1と同様に、ParameterContainerを準備。
  2. ProjectウィンドウのAssets以下(スクリプト置き場)にMyInstantiateGameObject(仮名)のStateBehaviourを作成。
  3. スクリプトにInstantiate処理を記述し、生成直後にGameObjectからGetComponent<ParameterContainer>を行う。
  4. 取得したParameterContainerのSet○○メソッドで値を設定。
    ParameterContainerInternal
  5. 生成する側のFSMでMyInstantiateGameObjectをステートに追加して使用。
(ただしUnityやC#の仕様に関するサポートまでは行っておりません。スクリプト作成に不慣れでしたらUnityチュートリアルや書籍なども見てみてください)

matchy
Posts: 2
Joined: 2020/02/24 08:04

Re: InstantiateGameObjectで生成したGameObjectへの値の引き渡し

Post by matchy » 2020/03/08 23:58

ご回答いただいた方法で値を引き継ぐことができました!
ご対応、ありがとうございました。

User avatar
caitsithware
管理人
Posts: 327
Joined: 2015/08/17 12:41

Re: InstantiateGameObjectで生成したGameObjectへの値の引き渡し

Post by caitsithware » 2020/03/09 01:46

matchy wrote:
2020/03/08 23:58
ご回答いただいた方法で値を引き継ぐことができました!
ご対応、ありがとうございました。
できたということで良かったです。
もしよろしければ、評価やレビューもお願いいたします。
Arbor 3: FSM & BT Graph Editor

Post Reply