Unity3D研究院之游戏开发中的人工智能AI(三十八)

发布时间:2025-08-31 19:43

AI在游戏开发中增强游戏智能化和交互性 #生活知识# #科技生活# #科技改变生活# #人工智能#

using UnityEngine;

using System.Collections;

//这里是枚举选择敌人类型

public enum EnemyType

{

Enemy0,

Enemy1

}

public class AI : MonoBehaviour {

//敌人类型枚举 有策划人员选择

public EnemyType enemyType = EnemyType.Enemy0;

//主角游戏对象

public GameObject player;

//敌人状态 普通状态 旋转状态 奔跑状态 追击主角状态 攻击主角状态

private const int EMEMY_NORMAL=0;

private const int EMEMY_ROTATION=1;

private const int EMEMY_RUN = 2;

private const int EMEMY_CHASE = 3;

private const int EMEMY_ATTACK = 4;

//记录当前敌人状态 根据不同类型 敌人播放不同动画

private int state;

//旋转状态,敌人自身旋转

private int rotation_state;

//记录敌人上一次思考时间

private float aiThankLastTime;

void Start ()

{

//初始话标志敌人状态 以及动画为循环播放

state = EMEMY_NORMAL;

this.animation.wrapMode = WrapMode.Loop;

}

void Update ()

{

//根据策划选择的敌人类型 这里面会进行不同的敌人AI

switch(enemyType)

{

case EnemyType.Enemy0:

updateEnemyType0();

break;

case EnemyType.Enemy1:

updateEnemyType1();

break;

}

}

//更新第一种敌人的AI

void updateEnemyType0()

{

//这个AI比较简单, 当主角与他的距离小于10米时,他将始终朝向这主角

if(Vector3.Distance(player.transform.position,this.transform.position) <= 10)

{

this.transform.LookAt(player.transform);

}

}

//更新第二种敌人的AI

void updateEnemyType1()

{

//判断敌人是否开始思考

if(isAIthank())

{

//敌人开始思考

AIthankEnemyState(3);

}else

{

//更新敌人状态

UpdateEmenyState();

}

}

int getRandom(int count)

{

return new System.Random().Next(count);

}

bool isAIthank()

{

//这里表示敌人每3秒进行一次思考

if(Time.time - aiThankLastTime >=3.0f)

{

aiThankLastTime = Time.time;

return true;

}

return false;

}

//敌人在这里进行思考

void AIthankEnemyState(int count)

{

//开始随机数字。

int d = getRandom(count);

switch(d)

{

case 0:

//设置敌人为站立状态

setEmemyState(EMEMY_NORMAL);

break;

case 1:

//设置敌人为旋转状态

setEmemyState(EMEMY_ROTATION);

break;

case 2:

//设置敌人为奔跑状态

setEmemyState(EMEMY_RUN);

break;

}

}

void setEmemyState(int newState)

{

if(state == newState)

return;

state = newState;

string animName = "Idle";

switch(state)

{

case EMEMY_NORMAL:

animName  =  "Idle";

break;

case EMEMY_RUN:

animName  =  "Run";

break;

case EMEMY_ROTATION:

animName  =  "Run";

//当敌人为旋转时, 开始随机旋转的角度系数

rotation_state = getRandom(4);

break;

case EMEMY_CHASE:

animName  =  "Run";

//当敌人进入追击状态时,将面朝主角方向奔跑

this.transform.LookAt(player.transform);

break;

case EMEMY_ATTACK:

animName  =  "Attack";

//当敌人进入攻击状态时,继续朝向主角开始攻击砍人动画

this.transform.LookAt(player.transform);

break;

}

//避免重复播放动画,这里进行判断

if(!this.animation.IsPlaying(animName))

{

//播放动画

this.animation.Play(animName);

}

}

//在这里更新敌人状态

void UpdateEmenyState()

{

//判断敌人与主角之间的距离

float distance = Vector3.Distance(player.transform.position,this.transform.position);

//当敌人与主角的距离小于10 敌人将开始面朝主角追击

if(distance <= 10)

{

//当敌人与主角的距离小与3 敌人将开始面朝主角攻击

if(distance <= 3)

{

setEmemyState(EMEMY_ATTACK);

}else

{

    //否则敌人将开始面朝主角追击

setEmemyState(EMEMY_CHASE);

}

}else

{

//敌人攻击主角时 主角迅速奔跑 当它们之间的距离再次大于10的时候 敌人将再次进入正常状态 开始思考

if(state == EMEMY_CHASE || state == EMEMY_ATTACK)

{

setEmemyState(EMEMY_NORMAL);

}

}

switch(state)

{

case EMEMY_ROTATION:

//旋转状态时 敌人开始旋转, 旋转时间为1秒 这样更加具有惯性

transform.rotation = Quaternion.Lerp (transform.rotation, Quaternion.Euler(0,rotation_state * 90,0),  Time.deltaTime * 1);

break;

case EMEMY_RUN:

//奔跑状态,敌人向前奔跑

transform.Translate(Vector3.forward *0.02f);

break;

case EMEMY_CHASE:

//追击状态 敌人向前开始追击

transform.Translate(Vector3.forward *0.02f);

break;

case EMEMY_ATTACK:

break;

}

}

}

网址:Unity3D研究院之游戏开发中的人工智能AI(三十八) https://www.yuejiaxmz.com/news/view/1263067

相关内容

Unity3D研究院transform.parent = parent坐标就乱了
数字员工、超级个体、具身智能,AI Agent未来发展十大研究方向
中国旅游研究院联合马蜂窝发布《中国魅力小城旅游研究报告》
新加坡国立大学发布研究:Claude AI成功掌控日常办公与游戏自动化
新加坡国立大学研究:Claude智能体实现游戏与办公任务自动化,开启GUI智能时代
“让人工智能成为生活的助手” ——对话西南交大人工智能研究院副院长李天瑞
中商产业研究院:《2021年“十四五”中国智能家居行业市场前景及投资研究报告》发布
三部门:鼓励开发“人工智能+”研发设计软件,AI智能眼镜后续放量可期,AI人工智能ETF(512930)、消费电子ETF(561600)双双涨超1%
人工智能(Artificial Intelligence, AI)的发展历程与应用
看看:德国人工智能ai研究落地难

随便看看