Unity

NavMeshAgentによる敵の徘徊、接近AI

投稿日:2019年1月9日 更新日:

今回やること

敵が移動する範囲の設定

徘徊接近攻撃AIスクリプトの記述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;//NavMeshagentを使うために記述する

public class Enemy : MonoBehaviour {
	
	public Vector3[] wayPoints = new Vector3[3];//徘徊するポイントの座標を代入するVector3型の変数を配列で作る
	private int currentRoot;//現在目指すポイントを代入する変数
	private int Mode;//敵の行動パターンを分けるための変数
	public Transform player;//プレイヤーの位置を取得するためのTransform型の変数
	public Transform enemypos;//敵の位置を取得するためのTransform型の変数
	private NavMeshAgent agent;//NavMeshAgentの情報を取得するためのNavmeshagent型の変数

	void Start ()
	{
		agent = GetComponent ();//NavMeshAgentの情報をagentに代入
	}

	void Update ()
	{
		Vector3 pos = wayPoints[currentRoot];//Vector3型のposに現在の目的地の座標を代入
		float distance = Vector3.Distance(enemypos.position, player.transform.position);//敵とプレイヤーの距離を求める

		if (distance > 5) {//もしプレイヤーと敵の距離が5以上なら
			Mode = 0;//Modeを0にする
		}

		if (distance < 5) {//もしプレイヤーと敵の距離が5以下なら
			Mode = 1;//Modeを1にする
		}

		switch (Mode) {//Modeの切り替えは

		case 0://case0の場合

			if (Vector3.Distance (transform.position, pos) < 1f) {//もし敵の位置と現在の目的地との距離が1以下なら
				currentRoot += 1;//currentRootを+1する
				if (currentRoot > wayPoints.Length -1) {//もしcurrentRootがwayPointsの要素数-1より大きいなら
					currentRoot = 0;//currentRootを0にする
				}
			}
			GetComponent ().SetDestination (pos);//NavMeshAgentの情報を取得し目的地をposにする
			break;//switch文の各パターンの最後につける
		
		case 1://case1の場合
			agent.destination = player.transform.position;//プレイヤーに向かって進む		
			break;//switch文の各パターンの最後につける
		}
	}
}

スクリプトの設定

①ここをおすと②③の設定が開く
②徘徊するポイントの数
③徘徊するポイントの座標
④プレイヤーと敵をそれぞれドラッグ&ドロップする

テストプレイをしてみると…

gifなのでカクついてるんですが実際はなめらかに動きます

このサイトについて

ここには、自己紹介やサイトの紹介、あるいはクレジットの類を書くと良いでしょう。

検索

このサイトについて

ここには、自己紹介やサイトの紹介、あるいはクレジットの類を書くと良いでしょう。

検索

-Unity

執筆者:


comment

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

UnityでTilemapを使って2Dステージを作る

Tilemapとは? マップチップを登録してお手軽に2Dマップが作れるツールです Tilemapに使う素材を入れる

Unityでデータを別PCに移す

今回やること Unityで作成したデータを別のPCに移行します Unityパッケージの作成 ProjectのAssetsを選択し、左上のAssetsをおし、ExportPackageをおします 項目に …

Unityで爆発エフェクトを呼び出す

スクリプトを作成する こちらを参考にスクリプトを作成して爆発させたいオブジェクトに貼り付けます スクリプト using System.Collections; using System.Collect …

no image

Unityで3Dシューティングアクションを作ろう①

チュートリアルの内容 3D空間を走り回り、弾を飛ばして敵を倒すゲームを作ります。 今回やること プレイヤーの移動 アニメーションの遷移 カメラの追従 事前に準備するもの プレイヤー(待機アニメーション …

no image

タイトル画面からゲーム画面の呼び出し

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Sce …

ゲタバコ倶楽部へようこそ

  • 318849総閲覧数:
  • 118今日の閲覧数:
  • 246606総訪問者数:
  • 103今日の訪問者数:

住所
Akita,Japan

営業時間
月~日: 10:00 AM – 10:00 PM

このページはゲタバコ先生の日々思うことや活動、プログラミングの習得方法を発信するページです。
仕事のご依頼、メッセージ等、サービス概要をご覧の上で、お気軽にご連絡ください。

getabakosensei@gmail.com