简单AI
来源:互联网 发布:硬盘损坏数据恢复软件 编辑:程序博客网 时间:2024/04/30 05:00
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);//移动
}
}
阅读全文
0 0
- 简单AI
- NPC简单AI处理
- NPC简单AI处理
- 简单Ai贪食蛇
- Unity简单AI编写
- unity3d简单的AI
- unity简单AI
- UE4简单AI
- Unity简单AI编写
- 简单的鱼群AI
- 简单AI算法
- 简单五子棋AI
- 五子棋的简单AI
- 简单AI的五子棋程序
- Unity 一段简单的AI
- unity3d 怪物的简单ai
- 超简单 五子棋Ai算法
- 简单的AI范围检测
- tag()标签的两种用法
- EditText 添加限制Emoji表情
- Linux进阶之 find命令之xargs
- Python2.7刷基础Day1----关于Print
- 序列化Json时遇到的大小写问题及解决方法
- 简单AI
- 震惊!移动VIN码识别原来这么。。。
- AS快速编写NDK例子
- StringBuffer类
- Ubuntu编译Android源码
- .net 实现word、excel、ppt、pdf预览功能
- 微信小程序添加视频video组件
- IDE maven 创建spring boot 用hibernate 实现连接数据库
- 程序员的八重境界