简单的AI范围检测

在游戏里,我们所控制角色靠近怪物的时候,当到达怪物的一定范围内,怪物就会来追击你,并攻击你,那么这是怎么实现的呢?

大家看下图一个简单的演示:

U3D第10课.jpg

2012-8-22 23:32:31 上传
下载附件 (33.81 KB)

上图简单的演示了怪物检测的原理

那么我们怎么通过代码来实现的呢?
由于之前在第七课已经介绍了AI,那么之前就不写了

我们先要让敌人获取要检测的对象

  1. //获取要追踪的对象
  2. private GameObject playe;
复制代码
还有敌人的检测范围
  1. //敌人的检测范围
  2. public const int AI_ATTACK_DISTANCE = 10;
复制代码
如果敌人与主角的距离小于敌人的检测范围10的时候
  1. if(Vector3.Distance(transform.position,playe.transform.position) < AI_ATTACK_DISTANCE || isHatred)
  2. {
  3. //敌人进入奔跑状态
  4. gameObject.animation.Play("run");
  5. enemyState = ENEMY_RUN;
  6. //设置敌人的方向,面朝主角
  7. transform.LookAt(playe.transform);
  8. }
复制代码
这里敌人已经能面向于主角了,我们还要让敌人蹦跑
  1. //敌人朝主角奔跑
  2. if(Vector3.Distance(transform.position,playe.transform.position ) > 3)
  3. {
  4. transform.Translate(Vector3.forward * Time.deltaTime * 3);
  5. }
复制代码
下面大家看源代码
  1. using UnityEngine;
  2. using System.Collections;

  3. public class Enemy : MonoBehaviour {

  4. public const int ENEMY_STAND = 0;
  5. public const int ENEMY_WALK = 1;
  6. public const int ENEMY_RUN = 2;
  7. public const int ENEMY_PAUSE = 3;
  8. private int enemyState;
  9. //获取要追踪的对象
  10. private GameObject playe;
  11. //敌人的巡逻范围
  12. public const int AI_ATTACK_DISTANCE = 10;
  13. public bool isHatred = false;
  14. void Start ()
  15. {
  16. enemyState = ENEMY_STAND;
  17. playe = GameObject.Find("Player");
  18. }

  19. void Update ()
  20. {
  21. if(Vector3.Distance(transform.position,playe.transform.position) < AI_ATTACK_DISTANCE || isHatred)
  22. {
  23. //敌人进入奔跑状态
  24. gameObject.animation.Play("run");
  25. enemyState = ENEMY_RUN;
  26. //设置敌人的方向,面朝主角
  27. transform.LookAt(playe.transform);
  28. }
  29. switch(enemyState)
  30. {
  31. case ENEMY_STAND:
  32. gameObject.animation.Play("idle");
  33. break;
  34. case ENEMY_RUN:
  35. //敌人朝主角奔跑
  36. if(Vector3.Distance(transform.position,playe.transform.position ) > 3)
  37. {
  38. transform.Translate(Vector3.forward * Time.deltaTime * 3);
  39. }
  40. break;
  41. }
  42. }
  43. }
复制代码




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值