Page 1 of 1
					
				他のオブジェクトの変数の参照
				Posted: 2019/01/20 21:25
				by Guest
				初歩的な質問ですみません。
オブジェクトAにアタッチされたC#スクリプトのpublic変数をオブジェクトBのFSMから参照したいのですが、どのような方法がありますか?
例えばオブジェクトAのC#スクリプトにpublic int testInt;があり、Update()毎に内容が変化するとして、
オブジェクトBのFSM内でそのtestIntの内容によって挙動を変化させたいというようなケースです。
よろしくお願いします。
			 
			
					
				Re: 他のオブジェクトの変数の参照
				Posted: 2019/01/20 23:36
				by caitsithware
				メンバー変数への参照方法についてですね。
主に以下のような流れで参照することになります。
- 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 6138 times
 
 
Arbor独自の型やメソッド(今回の例ではStateBehaviourやOnStateUpdate、StateLinkやTransitionなど)以外は
UnityC#の基本的な書き方になりますので、一度UnityC#入門の書籍などで学ばれることをお勧めいたします。
 
			
					
				Re: 他のオブジェクトの変数の参照
				Posted: 2019/01/21 13:04
				by Guest
				とても分かりやすい解説で、なんとか理解できました。
狙い通りの挙動ができて感動しております。
ありがとうございました。