using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 敌人AI类
/// </summary>
public class enemyAI : MonoBehaviour {
float accumulateTime = 0;//累积时间
bool _isMove;//字段
public bool IsMove//属性
{
get
{
checkNextState(5,2);//调用检测下一个状态函数
return _isMove;
}
set
{
_isMove = value;
}
}
/// <summary>
/// 检测下一个状态函数
/// </summary>
void checkNextState(float freezeTimeTrue, float freezeTimeFalse)
{
accumulateTime += Time.deltaTime;
if (_isMove == true)
{
if (accumulateTime >= freezeTimeTrue)
{
_isMove = false;
accumulateTime = 0;
}
}
else
{
if (accumulateTime >= freezeTimeFalse)
{
_isMove = true;
accumulateTime = 0;
}
}
}
float moveSpeed = 5;//移动速度
float rotateSpeed = 500;//旋转速度
public GameObject player;//玩家
float distance;//玩家和敌人之间的距离
float directionAngle= 0;//随机到的方向角度值
// Use this for initialization
void Start() {
// moveState.IsMove = true;
}
// Update is called once per frame
void Update() {
CheckIsMove();
}
/// <summary>
/// 检测IsMove函数
/// </summary>
void CheckIsMove()
{
distance = Vector3.Distance(transform.position, player.transform.position);//玩家和敌人之间距离
if (distance > 25)//玩家和敌人之间距离大于25
{
if (IsMove == true)//如果可以移动
{
Rotate(directionAngle);//调用旋转函数
}
if (IsMove == false)//如果不能移动
{
directionAngle = Random.Range(0, 360);//随机一个方向
}
}
if (distance <= 25)//玩家和敌人之间小于25
{
transform.LookAt(player.transform);//朝向玩家
//transform.Translate(Vector3.forward * Time.deltaTime * moveSpeed);//追击玩家
}
}
/// <summary>
/// 旋转函数
/// </summary>
void Rotate(float angle)
{
if (angle >= 0 && angle <= 180)//判断想要转到的方向,如果angle在0到180度之间
{
if (transform.transform.eulerAngles.y > angle && transform.eulerAngles.y < angle + 180)//如果坦克自身欧拉角在angle和angle+180度之间(在angle右侧)
{
transform.Rotate(0, -Time.deltaTime * rotateSpeed, 0);//绕着自身z轴沿逆时针方向以rotateSpeed的速度旋转
}
if (transform.transform.eulerAngles.y < angle || transform.eulerAngles.y > angle + 180)//如果坦克自身欧拉角在0到angle或angle+180到360(0)度之间(在angle左侧)
{
transform.Rotate(0, Time.deltaTime * rotateSpeed, 0);//绕着自身z轴沿顺时针方向以rotateSpeed的速度旋转
}
}
if (angle > 180 && angle < 360)//如果angle在180到360(0)度之间
{
if ((transform.eulerAngles.y > angle || transform.eulerAngles.y < angle - 180))//如果坦克自身欧拉角在angle到360(0)度或0到angle-180度之间(在angle右侧)
{
transform.Rotate(0, -Time.deltaTime * rotateSpeed, 0);//绕着自身z轴沿逆时针方向以rotateSpeed的速度旋转
}
if (transform.eulerAngles.y < angle && transform.eulerAngles.y > angle - 180)//如果坦克自身欧拉角在angle-180度到angle之间(在angle左侧)
{
transform.Rotate(0, Time.deltaTime * rotateSpeed, 0);//绕着自身z轴沿顺时针方向以rotateSpeed的速度旋转
}
}
transform.Translate(Vector3.forward * Time.deltaTime * moveSpeed);//移动
}
}
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 敌人AI类
/// </summary>
public class enemyAI : MonoBehaviour {
float accumulateTime = 0;//累积时间
bool _isMove;//字段
public bool IsMove//属性
{
get
{
checkNextState(5,2);//调用检测下一个状态函数
return _isMove;
}
set
{
_isMove = value;
}
}
/// <summary>
/// 检测下一个状态函数
/// </summary>
void checkNextState(float freezeTimeTrue, float freezeTimeFalse)
{
accumulateTime += Time.deltaTime;
if (_isMove == true)
{
if (accumulateTime >= freezeTimeTrue)
{
_isMove = false;
accumulateTime = 0;
}
}
else
{
if (accumulateTime >= freezeTimeFalse)
{
_isMove = true;
accumulateTime = 0;
}
}
}
float moveSpeed = 5;//移动速度
float rotateSpeed = 500;//旋转速度
public GameObject player;//玩家
float distance;//玩家和敌人之间的距离
float directionAngle= 0;//随机到的方向角度值
// Use this for initialization
void Start() {
// moveState.IsMove = true;
}
// Update is called once per frame
void Update() {
CheckIsMove();
}
/// <summary>
/// 检测IsMove函数
/// </summary>
void CheckIsMove()
{
distance = Vector3.Distance(transform.position, player.transform.position);//玩家和敌人之间距离
if (distance > 25)//玩家和敌人之间距离大于25
{
if (IsMove == true)//如果可以移动
{
Rotate(directionAngle);//调用旋转函数
}
if (IsMove == false)//如果不能移动
{
directionAngle = Random.Range(0, 360);//随机一个方向
}
}
if (distance <= 25)//玩家和敌人之间小于25
{
transform.LookAt(player.transform);//朝向玩家
//transform.Translate(Vector3.forward * Time.deltaTime * moveSpeed);//追击玩家
}
}
/// <summary>
/// 旋转函数
/// </summary>
void Rotate(float angle)
{
if (angle >= 0 && angle <= 180)//判断想要转到的方向,如果angle在0到180度之间
{
if (transform.transform.eulerAngles.y > angle && transform.eulerAngles.y < angle + 180)//如果坦克自身欧拉角在angle和angle+180度之间(在angle右侧)
{
transform.Rotate(0, -Time.deltaTime * rotateSpeed, 0);//绕着自身z轴沿逆时针方向以rotateSpeed的速度旋转
}
if (transform.transform.eulerAngles.y < angle || transform.eulerAngles.y > angle + 180)//如果坦克自身欧拉角在0到angle或angle+180到360(0)度之间(在angle左侧)
{
transform.Rotate(0, Time.deltaTime * rotateSpeed, 0);//绕着自身z轴沿顺时针方向以rotateSpeed的速度旋转
}
}
if (angle > 180 && angle < 360)//如果angle在180到360(0)度之间
{
if ((transform.eulerAngles.y > angle || transform.eulerAngles.y < angle - 180))//如果坦克自身欧拉角在angle到360(0)度或0到angle-180度之间(在angle右侧)
{
transform.Rotate(0, -Time.deltaTime * rotateSpeed, 0);//绕着自身z轴沿逆时针方向以rotateSpeed的速度旋转
}
if (transform.eulerAngles.y < angle && transform.eulerAngles.y > angle - 180)//如果坦克自身欧拉角在angle-180度到angle之间(在angle左侧)
{
transform.Rotate(0, Time.deltaTime * rotateSpeed, 0);//绕着自身z轴沿顺时针方向以rotateSpeed的速度旋转
}
}
transform.Translate(Vector3.forward * Time.deltaTime * moveSpeed);//移动
}
}