敌人AI:行走

实现的功能

在游戏过程中,有敌人和主角两种形态的GameObject。假设主角的行动和攻击已经设置完毕,现在设计敌人的AI,在本节中只开发敌人的行走---总是朝向主角进行行走。

注意:下面的Enemy.cs脚本挂在敌人身上。控制敌人AI行走的方式有很多,本节只是其中一种方法。

具体实现

1. 首先在敌人的Inspector面板中给敌人添加Character Controller,并设置好相关的参数,如下图所示。


2. 给敌人添加Enemy.cs脚本,用该脚本控制敌人的AI行走。

using UnityEngine;
using System.Collections;

public class Enemy : MonoBehaviour {

	public float speed = 2f;// 敌人行走的速度
	private CharacterController cc; // 定义控制敌人行走的CharacterController组件

	void Start(){
		cc = this.GetComponent<CharacterController> ();//  得到CharacterController组件
	}

	void Update(){
		Move ();// 在Update方法中,每一帧调用Move方法
	}

	// *********************** 控制敌人AI行走的方法 *********************************
	void Move(){
		// 需求分析:要实现敌人总是朝着游戏主角行走

		// 1. 首先获取主角相关组件
		// 主角的Transform组件
		Transform player = TranscriptManager._instance.player.transform;// 获取主角由TranscriptManager类管理
		Vector3 targerPos = player.position;
		targerPos.y = transform.position.y;// 敌人的y和主角的y一致

		// 2. 面向主角
		transform.LookAt(targerPos); // this/*敌人*/.transform.LookAt(targetPos)

		// 3. 敌人移动
		cc.SimpleMove (transform.forward * speed);
		
	}
}

获取主角的脚本,该脚本挂在空的GameObject上面,用于Transcript中的代码管理。

using UnityEngine;
using System.Collections;

public class TranscriptManager : MonoBehaviour {
	public static TranscriptManager _instance;
	public GameObject player;

	// Use this for initialization
	void Awake () {
		_instance = this;
		player = GameObject.FindGameObjectWithTag("PlayerBoy");
	} 
}






版权声明:本文为iFuMI原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。