在游戏里,我们所控制角色靠近怪物的时候,当到达怪物的一定范围内,怪物就会来追击你,并攻击你,那么这是怎么实现的呢?
大家看下图一个简单的演示:
![U3D第10课.jpg U3D第10课.jpg](http://bbs.9ria.com/forum.php?mod=attachment&aid=ODI3NzN8OTMxNTUxNTd8MTQ3Nzk2MTU5MnwwfDE0NTcyMg%3D%3D&noupdate=yes)
上图简单的演示了怪物检测的原理
那么我们怎么通过代码来实现的呢?
由于之前在第七课已经介绍了AI,那么之前就不写了
我们先要让敌人获取要检测的对象
- //获取要追踪的对象
- private GameObject playe;
复制代码
还有敌人的检测范围
- //敌人的检测范围
- public const int AI_ATTACK_DISTANCE = 10;
复制代码
如果敌人与主角的距离小于敌人的检测范围10的时候
- if(Vector3.Distance(transform.position,playe.transform.position) < AI_ATTACK_DISTANCE || isHatred)
- {
- //敌人进入奔跑状态
- gameObject.animation.Play("run");
- enemyState = ENEMY_RUN;
- //设置敌人的方向,面朝主角
- transform.LookAt(playe.transform);
- }
复制代码
这里敌人已经能面向于主角了,我们还要让敌人蹦跑
- //敌人朝主角奔跑
- if(Vector3.Distance(transform.position,playe.transform.position ) > 3)
- {
- transform.Translate(Vector3.forward * Time.deltaTime * 3);
- }
复制代码
下面大家看源代码
- 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 GameObject playe;
- //敌人的巡逻范围
- public const int AI_ATTACK_DISTANCE = 10;
- public bool isHatred = false;
- void Start ()
- {
- enemyState = ENEMY_STAND;
- playe = GameObject.Find("Player");
- }
-
- void Update ()
- {
- if(Vector3.Distance(transform.position,playe.transform.position) < AI_ATTACK_DISTANCE || isHatred)
- {
- //敌人进入奔跑状态
- gameObject.animation.Play("run");
- enemyState = ENEMY_RUN;
- //设置敌人的方向,面朝主角
- transform.LookAt(playe.transform);
- }
- switch(enemyState)
- {
- case ENEMY_STAND:
- gameObject.animation.Play("idle");
- break;
- case ENEMY_RUN:
- //敌人朝主角奔跑
- if(Vector3.Distance(transform.position,playe.transform.position ) > 3)
- {
- transform.Translate(Vector3.forward * Time.deltaTime * 3);
- }
- break;
- }
- }
- }
复制代码