by caitsithware » 2020/03/07 13:51
生成されたGameObject(ArborFSM付き)にそれぞれ値を設定したい、ということですね。
以下のようにすれば可能です。
- 生成される側のプレハブにParameterContainerかグラフ内パラメータのどちらかを追加(もしすでにあるならそれを使用)
ParameterContainer
パラメータタブ
- 生成する側のFSMに演算ノードのGameObject.GetComponentを追加。
GameObject.GetComponent
- 取得するタイプをArbor/ParameterContainerに設定。
- 他のステートを作成し、CalcParameterを追加。
CalcParameter
- GameObject.GetComponentのComponentフィールドからCalcParameterのContainerフィールドに接続。
- CalcParameterのReferenceTypeや値などを設定。
- InstantiateGameObjectのOutputをGameObject.GetComponentのGameObjectフィールドに接続。
InstantiateGameObject
- InstantiateGameObject直後にCalcParameterのステートへ遷移するようにGoToTransitionなどを設定。
- 生成される側の処理が行われる前にCalcParameterステートを動作させるために、TransitionTimingをImmediateに設定。
TransitionTiming
- Prefab側のFSM
- PrefabGraph.png (51.47 KiB) Viewed 6670 times
- 生成する側のFSM
- InstantiateGraph.png (103.61 KiB) Viewed 6670 times
また、他にも設定したいパラメータが多かったり、同じような生成処理が多かったりした場合に、何度も似たFSMを組むのが大変でしたらスクリプトの自作をお勧めいたします。
- 生成される側は上記1と同様に、ParameterContainerを準備。
- ProjectウィンドウのAssets以下(スクリプト置き場)にMyInstantiateGameObject(仮名)のStateBehaviourを作成。
- スクリプトにInstantiate処理を記述し、生成直後にGameObjectからGetComponent<ParameterContainer>を行う。
- 取得したParameterContainerのSet○○メソッドで値を設定。
ParameterContainerInternal
- 生成する側のFSMでMyInstantiateGameObjectをステートに追加して使用。
(ただしUnityやC#の仕様に関するサポートまでは行っておりません。スクリプト作成に不慣れでしたらUnityチュートリアルや書籍なども見てみてください)
生成されたGameObject(ArborFSM付き)にそれぞれ値を設定したい、ということですね。
以下のようにすれば可能です。
[list=1]
[*]生成される側のプレハブにParameterContainerかグラフ内パラメータのどちらかを追加(もしすでにあるならそれを使用)
[url=https://caitsithware.com/assets/arbor/docs/ja/manual/parametercontainer.html]ParameterContainer[/url]
[url=https://caitsithware.com/assets/arbor/docs/ja/manual/arboreditor.html#%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%82%BF%E3%83%96]パラメータタブ[/url]
[*]生成する側のFSMに演算ノードのGameObject.GetComponentを追加。
[url=https://arbor-docs.caitsithware.com/ja/calculators/gameobjectgetcomponentcalculator.html]GameObject.GetComponent[/url]
[*]取得するタイプをArbor/ParameterContainerに設定。
[*]他のステートを作成し、CalcParameterを追加。
[url=https://arbor-docs.caitsithware.com/ja/behaviours/calcparameter.html]CalcParameter[/url]
[*]GameObject.GetComponentのComponentフィールドからCalcParameterのContainerフィールドに接続。
[*]CalcParameterのReferenceTypeや値などを設定。
[*]InstantiateGameObjectのOutputをGameObject.GetComponentのGameObjectフィールドに接続。
[url=https://arbor-docs.caitsithware.com/ja/behaviours/instantiategameobject.html]InstantiateGameObject[/url]
[*]InstantiateGameObject直後にCalcParameterのステートへ遷移するようにGoToTransitionなどを設定。
[*]生成される側の処理が行われる前にCalcParameterステートを動作させるために、TransitionTimingをImmediateに設定。
[url=https://caitsithware.com/assets/arbor/docs/ja/manual/statemachine.html#transitiontiming]TransitionTiming[/url]
[/list]
[attachment=1]PrefabGraph.png[/attachment]
[attachment=0]InstantiateGraph.png[/attachment]
また、他にも設定したいパラメータが多かったり、同じような生成処理が多かったりした場合に、何度も似たFSMを組むのが大変でしたらスクリプトの自作をお勧めいたします。
[list=1]
[*]生成される側は上記1と同様に、ParameterContainerを準備。
[*]ProjectウィンドウのAssets以下(スクリプト置き場)にMyInstantiateGameObject(仮名)のStateBehaviourを作成。
[*]スクリプトにInstantiate処理を記述し、生成直後にGameObjectからGetComponent<ParameterContainer>を行う。
[*]取得したParameterContainerのSet○○メソッドで値を設定。
[url=https://caitsithware.com/assets/arbor/scriptreference/ja/class_arbor_1_1_parameter_container_internal.html]ParameterContainerInternal[/url]
[*]生成する側のFSMでMyInstantiateGameObjectをステートに追加して使用。
[/list]
(ただしUnityやC#の仕様に関するサポートまでは行っておりません。スクリプト作成に不慣れでしたらUnityチュートリアルや書籍なども見てみてください)