using UnityEngine;
using System.Collections;
public class DjNPC : MonoBehaviour
{
//敌人站立状态
public const int STATE_STAND = 0;
//行走状态
public const int STATE_WALK = 1;
//奔跑状态
public const int STATE_RUN = 2;
//记录当前敌人状态
private int enemyState;
//获取主角对象
private GameObject hero ;
//备份上一次敌人思考时间
private float backUpTime;
//敌人思考的时间
public const int AI_THINK_TIME = 2;
//敌人的感知范围
public const int AI_ATTACK_DISTANCE = 10;
void Start()
{
//得到主角对象
hero = GameObject.Find("/Hero");
//设置默认敌人状态为站立状态
enemyState = STATE_STAND;
}
void Update()
{
//判断敌人与主角的距离
if(Vector3.Distance(transform.position,hero.transform.position) < AI_ATTACK_DISTANCE)
{
//敌人进入奔跑状态
gameObject.animation.Play("run");
enemyState =STATE_RUN;
//设置敌人面朝主角方向
transform.LookAt(hero.transform);
}
//敌人巡逻状态
else
{
//计算敌人思考时间
if(Time.time - backUpTime >= AI_THINK_TIME)
{
//敌人开始思考
backUpTime = Time.time;
//取得0 -2之间随机数
int rand = Random.Range(0,2);
if (rand == 0)
{
//敌人进入站立状态
gameObject.animation.Play("idle");
enemyState = STATE_STAND;
}
else if(rand == 1)
{
//敌人进入行走状态
//敌人随机旋转角度
Quaternion rotate = Quaternion.Euler(0,Random.Range(1,5) * 90, 0);
//1秒内完成敌人旋转
transform.rotation = Quaternion.Slerp(transform.rotation,rotate,Time.deltaTime * 1000);
gameObject.animation.Play("walk");
enemyState = STATE_WALK;
}
}
}
switch(enemyState)
{
case STATE_STAND:
break;
case STATE_RUN:
//敌人朝向主角奔跑
if(Vector3.Distance(transform.position,hero.transform.position) > 3)
{
transform.Translate(Vector3.forward * Time.deltaTime * 3);
}
break;
case STATE_WALK:
//敌人行走
transform.Translate(Vector3.forward * Time.deltaTime);
break;
}
}
}