Unity 3D 第七课 简单的AI 漫游模式
今天给大家讲讲AI漫游模式,模型还是用之前几个课里用到的引擎自带的模型。在一些大型游戏里,我们看到的敌人都有6种模式,站立、行走、奔跑、暂停、检测、攻击;今天我在这里给大家讲下前4种模式:站立、行走、奔跑、暂停
先定义下敌人的4种模式:
[*]//敌人站立状态
[*]public const int ENEMY_STAND = 0;
[*]//敌人行走状态
[*]public const int ENEMY_WALK = 1;
[*]//敌人奔跑状态
[*]public const int ENEMY_RUN = 2;
[*]//敌人暂停状态
[*]public const int ENEMY_PAUSE = 3;
复制代码
也要记录下敌人的状态:
[*]private int enemyState;
复制代码
备份敌人暂停思考的时间:
[*]private float backUptime;
复制代码
敌人思考下一次行为的世间,我们设置为1,很活跃的敌人…呵呵…
[*]public const int AI_THINK_TIME = 1;
复制代码
初始化敌人状态为站立状态:
[*]enemyState = ENEMY_STAND;
复制代码
开始执行AI,敌人进行漫游,思考状态:
[*]//计算敌人思考时间
[*]if(Time.time - backUptime >= AI_THINK_TIME)
[*]{
[*]//敌人开始思考
[*] backUptime = Time.time;
[*]//取得0---2之间的随机数
[*] int rand = Random.Range(0,2);
[*] if(rand == 0)
[*] {
[*]//敌人进入站立状态
[*] enemyState = ENEMY_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 = ENEMY_WALK;
[*] }
[*] }
复制代码
下面贴出全部代码:
[*]using UnityEngine;
[*]using System.Collections;public class Enemy : MonoBehaviour {
[*]
[*] public const int ENEMY_STAND = 0;
[*] public const int ENEMY_WALK = 1;
[*] public const int ENEMY_RUN = 2;
[*] public const int ENEMY_PAUSE = 3;
[*] private int enemyState;
[*] private float backUptime;
[*] public const int AI_THINK_TIME = 1;
[*] void Start ()
[*] {
[*] enemyState = ENEMY_STAND;
[*] }
[*]
[*] void Update ()
[*] {
[*] if(Time.time - backUptime >= AI_THINK_TIME)
[*] {
[*] backUptime = Time.time;
[*] int rand = Random.Range(0,2);
[*] if(rand == 0)
[*] {
[*] enemyState = ENEMY_STAND;
[*] }
[*] else if(rand == 1)
[*] {
[*] Quaternion rotate = Quaternion.Euler(0,Random.Range(1,5) * 90,0);
[*] transform.rotation = Quaternion.Slerp(transform.rotation,rotate,Time.deltaTime * 1000);
[*] enemyState = ENEMY_WALK;
[*] }
[*] }
[*] switch(enemyState)
[*] {
[*] case ENEMY_STAND:
[*] gameObject.animation.Play("idle");
[*] break;
[*] case ENEMY_WALK:
[*] gameObject.animation.Play("walk");
[*] transform.Translate(Vector3.forward * Time.deltaTime);
[*] break;
[*] }
[*] }
[*]}
[*]
复制代码
现在把这个代码拖到你的人物模型上,在运行游戏,人物就能进行漫游模式了…
Good!!I am loveit!! {:5_427:}{:5_427:}{:5_427:}{:5_427:}{:5_427:}{:5_427:}{:5_427:}{:5_427:} 无私lz我必回帖
感谢楼主的无私分享!{:soso__11402694654016840197_7:} 很不錯~謝謝樓主分享~學習了{:soso_e183:} 謝謝樓主分享
學習中 gx感谢楼主无私奉献 好帖就是要顶