by caitsithware » 2019/01/20 23:36
メンバー変数への参照方法についてですね。
主に以下のような流れで参照することになります。
- ArborFSMで使用できるスクリプト(StateBehaviourかCalculator)を自作しオブジェクトAに追加しているスクリプトのインスタンスを参照。
Code: Select all
public class ObjectBStateBehaviour : StateBehaviour
{
public ObjectABehaviour objectA; // ObjectABehaviour型のメンバー変数を宣言。
}
- インスタンスからメンバー変数の値を取得。
Code: Select all
public override void OnStateUpdate()
{
int testInt = objectA.testInt;
Debug.Log(testInt); // testIntの値をコンソールにデバッグ出力してみるテスト。
}
- 値を使ってステートを遷移するなどなど
Code: Select all
public StateLink nextState; // StateLink型のメンバー変数を宣言
public override void OnStateUpdate()
{
int testInt = objectA.testInt;
if( testInt >= 10 ) // testIntを比較してtrueなら遷移
{
Debug.Log("testIntが10以上なので遷移します : testInt " + testInt);
Transition(nextState);
}
}
- 例コード(ObjectABehaviour.cs)全文
Code: Select all
using UnityEngine;
public class ObjectABehaviour : MonoBehaviour
{
public int testInt = 0;
void Update ()
{
if (Input.GetKeyDown(KeyCode.Space)) // スペースキー押すたびに1増やすテスト
{
testInt++;
}
}
}
- 例コード(ObjectBStateBehaviour.cs)全文
Code: Select all
using UnityEngine;
using Arbor;
[AddComponentMenu("")]
public class ObjectBStateBehaviour : StateBehaviour
{
public ObjectABehaviour objectA; // ObjectABehaviour型のメンバー変数を宣言。
public StateLink nextState; // StateLink型のメンバー変数を宣言
public override void OnStateUpdate()
{
int testInt = objectA.testInt;
if (testInt >= 10) // testIntを比較してtrueなら遷移
{
Debug.Log("testIntが10以上なので遷移します : testInt " + testInt);
Transition(nextState); // 遷移
}
}
}
例として挙げたコードについては参考程度に、適宜、型名や処理内容は変えてください。
- ArborEditorウィンドウでFSMのステートに自作した挙動を追加。
- 追加した挙動のオブジェクトAインスタンスへの参照を設定。
- 遷移先などを設定。
- ObjectBFSM.png (43.47 KiB) Viewed 4864 times
Arbor独自の型やメソッド(今回の例ではStateBehaviourやOnStateUpdate、StateLinkやTransitionなど)以外は
UnityC#の基本的な書き方になりますので、一度UnityC#入門の書籍などで学ばれることをお勧めいたします。
メンバー変数への参照方法についてですね。
主に以下のような流れで参照することになります。
[list]
[*]ArborFSMで使用できるスクリプト(StateBehaviourかCalculator)を自作しオブジェクトAに追加しているスクリプトのインスタンスを参照。
[code]
public class ObjectBStateBehaviour : StateBehaviour
{
public ObjectABehaviour objectA; // ObjectABehaviour型のメンバー変数を宣言。
}
[/code]
[*]インスタンスからメンバー変数の値を取得。
[code]
public override void OnStateUpdate()
{
int testInt = objectA.testInt;
Debug.Log(testInt); // testIntの値をコンソールにデバッグ出力してみるテスト。
}
[/code]
[*]値を使ってステートを遷移するなどなど
[code]
public StateLink nextState; // StateLink型のメンバー変数を宣言
public override void OnStateUpdate()
{
int testInt = objectA.testInt;
if( testInt >= 10 ) // testIntを比較してtrueなら遷移
{
Debug.Log("testIntが10以上なので遷移します : testInt " + testInt);
Transition(nextState);
}
}
[/code]
[*]例コード(ObjectABehaviour.cs)全文
[code]
using UnityEngine;
public class ObjectABehaviour : MonoBehaviour
{
public int testInt = 0;
void Update ()
{
if (Input.GetKeyDown(KeyCode.Space)) // スペースキー押すたびに1増やすテスト
{
testInt++;
}
}
}
[/code]
[*]例コード(ObjectBStateBehaviour.cs)全文
[code]
using UnityEngine;
using Arbor;
[AddComponentMenu("")]
public class ObjectBStateBehaviour : StateBehaviour
{
public ObjectABehaviour objectA; // ObjectABehaviour型のメンバー変数を宣言。
public StateLink nextState; // StateLink型のメンバー変数を宣言
public override void OnStateUpdate()
{
int testInt = objectA.testInt;
if (testInt >= 10) // testIntを比較してtrueなら遷移
{
Debug.Log("testIntが10以上なので遷移します : testInt " + testInt);
Transition(nextState); // 遷移
}
}
}
[/code]
例として挙げたコードについては参考程度に、適宜、型名や処理内容は変えてください。
[*]ArborEditorウィンドウでFSMのステートに自作した挙動を追加。
[*]追加した挙動のオブジェクトAインスタンスへの参照を設定。
[*]遷移先などを設定。
[attachment=0]ObjectBFSM.png[/attachment]
[/list]
Arbor独自の型やメソッド(今回の例ではStateBehaviourやOnStateUpdate、StateLinkやTransitionなど)以外は
UnityC#の基本的な書き方になりますので、一度UnityC#入門の書籍などで学ばれることをお勧めいたします。