アフィリエイト広告を利用しています

広告

posted by fanblog

2020年06月29日

[Unity]AI Plannerインストール〜

・Unity2020.1.0b13

Youtubeの内容まとめ

■AI Plannerインストール


・edit->Project Setting->Pakege Manager->Enable Preview Packagesのチェックを入れる。

スクリーンショット 2020-06-29 14.07.18.png

・Window->Packege Manager->AI Plannerをインストール。

■Assets下にフォルダ作成


AI
┣ Actions
┣ Plan
┣ Scripts
┗Trait


■Trait作成


・Traitフォルダで右クリック->Create->AI->Trait->Trait Definition
4つ作成。

スクリーンショット 2020-06-29 14.18.34.png
敵HPを設定。

スクリーンショット 2020-06-29 14.19.47.png
敵の数を設定。

スクリーンショット 2020-06-29 14.19.54.png
ドアのbool値設定。



■コードを生成

AI -> Planner => Generate Assembles

■ゲームオブジェクトにTrait Componentをアタッチ



・プレイヤー
Trait Componentをアタッチ -> select trait -> プレイヤー、Location,Moveableにチェック
スクリーンショット 2020-06-29 14.26.30.png
プレイヤーにはNavmeshAgentも必要。
移動範囲の地面もBakeしておく。

・ゲート
select trait -> ゲート、Location

・Enemy
select trait -> Enemy、Location

・Game State
select trait -> GameSettings



■アクションを作成

・Actionフォルダで右クリック->Create->AI->Planner -> Action Definition

スクリーンショット 2020-06-29 14.34.47.png

Preconditions(前提条件)
・プレイヤーと敵の位置が一致

Effects -> Objects Modified (変更)
・敵の数を−1する

Cost -> base value -> -0.1

スクリーンショット 2020-06-29 14.35.38.png

Preconditions(前提条件)
・プレイヤーと敵の位置が不一致

Effects -> Objects Modified (変更)
・プレイヤーと敵の位置に移動させる

Cost -> Reward modifiers
プレイヤーがターゲットに近づけば値が減る。離れれば値が増える。

スクリーンショット 2020-06-29 14.36.06.png

Preconditions(前提条件)
・プレイヤーとゲートの位置が一致
・敵の数が0
・ゲートが開かれていない(ゲートのbool値がfalse)

Effects -> Objects Modified (変更)
・ゲートのbool値をtrueにする

Cost -> base value -> 100


■プランを作成

Planフォルダで右クリック -> Create -> AI -> Planner -> Plan Definition
プレイヤーのプランを作成。

スクリーンショット 2020-06-29 14.51.06.png
プレイヤーができるアクションを登録。


■コードを生成

AI -> Planner => Generate Assembles



■プレイヤーを動かすAgentを作成

ヒエラルキーで空のオブジェクト作成して、Decision Controllerをアタッチ。

Plan Definitionにドラッグ&ドロップ。

スクリーンショット 2020-06-29 14.54.35.png


■C#スクリプトを作成


■AgentオブジェクトのAction CallbackにAgentオブジェクトをドラッグ&ドロップ


■C#スクリプトを書く

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.Playables;
using Unity.AI.Planner.DomainLanguage.TraitBased;
using Generated.AI.Planner.StateRepresentation;

public class YamatoAgent : MonoBehaviour
{
public IEnumerator Move(GameObject yamato, Location target)
{
Debug.Log("Move");

var agent = yamato.GetComponent();
agent.SetDestination(target.Position);

//パス計算完了まで待機
yield return new WaitUntil(() => agent.pathStatus == NavMeshPathStatus.PathComplete);

//目的地到着まで待機
yield return new WaitUntil(() => !float.IsInfinity(agent.remainingDistance) && (agent.remainingDistance < 1));

//Done
}

public IEnumerator Attack(GameObject yamato,GameObject enemy,ITraitBasedObjectData gameState)
{
Debug.Log("Attack");

GameObject.Destroy(enemy);
//anime
yield return new WaitForSeconds(1);

//ワールドクエリに反映させる
var settings = gameState.GetTraitData();
var enemyCount = GameObject.FindGameObjectsWithTag("Enemy").Length;
settings.SetValue(GameSettings.FieldEmenyCount, enemyCount);
}

public IEnumerator OpenGate(GameObject gate)
{
Debug.Log("Open");
//var timeline = gate.GetComponent();

//timeline.Play();

//タイムライン終了まで待機
//yield return new WaitUntil(() => timeline.state != PlayState.Playing);
yield return new WaitForSeconds(1);
}
}



■Agentオブジェクトにメソッドを関連づけ

・Avaliable actions from the plan -> methodでC#スクリプトで作成したメソッドを関連づける。

・AttackのNext State UpdateはUse World Stateに変更。

■Decision Controller -> Settingsの歯車をクリック

・Execution Settings -> Execute Modeを"Wait For Minimum Plan Size"に変更
・Minimum Plan Sizeを50に変更

(Act immediatelyだと一番近いところに移動したり予期せぬ動きをしてしまう。)


■コードを生成

AI -> Planner => Generate Assembles


■ゲームを実行して確認


敵を三体倒してゲートに向かうことを確認。


■プランを確認したい


Window -> AI -> Plan Visualizerでプランを確認できる。
posted by unitymemo at 14:07| Comment(0) | TrackBack(0) | Unity
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/9983016
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
プロフィール
ファン
検索
<< 2024年02月 >>
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29    
最新記事
カテゴリーアーカイブ
AdMob(14)
Android(4)
Unity(16)
Google Play(2)
Playmaker(4)
xcode(1)
C#(1)
写真ギャラリー
最新コメント
タグクラウド
×

この広告は30日以上新しい記事の更新がないブログに表示されております。