Page 1 of 1

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

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

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

Posted: 2020/03/07 13:51
by caitsithware
生成された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 5334 times
生成する側のFSM
生成する側のFSM
InstantiateGraph.png (103.61 KiB) Viewed 5334 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チュートリアルや書籍なども見てみてください)

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

Posted: 2020/03/08 23:58
by matchy
ご回答いただいた方法で値を引き継ぐことができました!
ご対応、ありがとうございました。

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

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