马上注册,加入CGJOY,让你轻松玩转CGJOY。
您需要 登录 才可以下载或查看,没有帐号?立即注册
×
本帖最后由 silucgcwy 于 2016-11-10 13:47 编辑
本篇unity3d教程我们来学习下怪物智能AI的设计,AI简单的说就是人工智能,众所周知,在游戏中,当我们的主角在接近怪物时,怪物就要做出相应动作调整,比如怪物在发现主角进入攻击范围时,就会朝主角奔跑,然后攻击人物,而其他时间怪物动作则应该表现为空闲状态,下面我们来学习下!贴上代码!
using UnityEngine;
using System.Collections;
public class BoosAI : 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;
// Use this for initialization
void Start()
{
//得到主角对象
hero = GameObject.Find("Cube");
//设置敌人的默认状态站立
enemyState = STATE_STAND;
}
// Update is called once per frame
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_WALK:
//敌人行走
transform.Translate(Vector3.forward * Time.deltaTime);
break;
case STATE_RUN:
//敌人朝向主角奔跑
if (Vector3.Distance(transform.position, hero.transform.position) > 3)
{
transform.Translate(Vector3.forward * Time.deltaTime * 3);
}
break;
}
}
}
好了,本篇unity教程到此结束,下篇我们再会!
首发地址: Unity3d游戏开发之怪物AI设计代码_游戏开发_丝路教程网
资源地址:http://blog.silucg.com/unity/1247.html(分享请保留)
|