实现的功能
在游戏过程中,有敌人和主角两种形态的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版权协议,转载请附上原文出处链接和本声明。