sunarit’s blog

Unity開発の備忘録

Dialogue Systemで会話終了時にメソッド実行

敵を倒して取得した経験値を消費して、プレイヤーパラメーターを上げるっていうのをDialogue System&EasySave2で実装。
Dialogue System 1.5.0

[ロジック]
1. NPCに話しかける
2. 経験値が足りているかチェック
3. (経験値が足りていれば)どのパラメーターを上げるかプレイヤーに尋ねる
4. パラメーターを上げる
5. オートセーブ

1、2、3はDialogue System上のLuaスクリプトでコントロール可能。
自分で実装する部分は4と5。

あらかじめplayerManager.csというようなスクリプトを作成しPlayerManagerゲームオブジェクトにアタッチ&以下のようなメソッドを追加。

public void myPlayerUpgrade () {
gunPower = DialogueLua.GetActorField("Player", "gunPower").AsInt;
ES2.Save (gunPower, "gunPower");
}

で、NPCにも適当なスクリプトをアタッチして、

void OnConversationEnd (Transform actor) {
GameObject go = GameObject.Find ("PlayerManager");
go.GetComponent<playerManager>().myPlayerUpgrade();
}

を追加すれば完了。
void Start()でES2.LoadとDialogueLua.SetActorFieldを忘れないように。

Dialogue Systemには同等のコンポーネントも用意されているが、NPCの挙動が分散されてしまうので自分で書いてしまった方がシンプル。