fjkrl 发表于 2013-3-4 23:01

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;
[*]                }
[*]      }
[*]}
[*]

复制代码
现在把这个代码拖到你的人物模型上,在运行游戏,人物就能进行漫游模式了…

sleeping 发表于 2013-4-8 03:42

Good!!I am loveit!!

guigu1121 发表于 2013-4-20 20:39

{:5_427:}{:5_427:}{:5_427:}{:5_427:}{:5_427:}{:5_427:}{:5_427:}{:5_427:}

头目 发表于 2013-4-23 09:47

无私lz我必回帖

cxbsr 发表于 2013-6-5 08:46


感谢楼主的无私分享!{:soso__11402694654016840197_7:}

Sherry49 发表于 2013-6-5 10:00

很不錯~謝謝樓主分享~學習了{:soso_e183:}

readma 发表于 2013-6-5 12:32

bird332359 发表于 2013-6-6 12:02

謝謝樓主分享
學習中

hxljs 发表于 2013-8-8 18:45

gx感谢楼主无私奉献

licky 发表于 2017-2-18 10:29

好帖就是要顶
页: [1] 2 3 4
查看完整版本: Unity 3D 第七课 简单的AI 漫游模式