AI范围检测(指定范围内攻击)
2016-11-01 08:55
323 查看
在游戏里,我们所控制角色靠近怪物的时候,当到达怪物的一定范围内,怪物就会来追击你,并攻击你,那么这是怎么实现的呢?
大家看下图一个简单的演示:
上图简单的演示了怪物检测的原理
那么我们怎么通过代码来实现的呢?
由于之前在第七课已经介绍了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;
}
}
}
复制代码
大家看下图一个简单的演示:
上图简单的演示了怪物检测的原理
那么我们怎么通过代码来实现的呢?
由于之前在第七课已经介绍了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;
}
}
}
复制代码
相关文章推荐
- Unity检测目标点是否在扇形攻击范围内
- 简单的AI范围检测
- Unity3D 攻击范围检测
- Unity检测目标点是否在扇形攻击范围内
- 百度地图显示指定范围的地图
- php检测字符串中是否包含指定字符串
- python和shell脚本实现查看大文件指定区域范围内的文件内容
- C#判断给定IP地址是否在指定范围内的方法
- UE4 范围伤害RadiusDamage及碰撞检测通道ECollisionChanel
- 评价入侵检测系统漏洞攻击检测覆盖面的指标
- JAVA检测指定的进程是否在运行
- 关于google地图api3的离线和在线开发(画带箭头的直线,指定范围,搜索,计算距离)
- Delphi 中生成指定范围不重复的随机数
- SQL server指定随机数范围
- 随机产生指定范围内的单个字符
- java生成指定范围的随机数
- 【python100案例 - 20】指定范围内高度落下反弹着地次数
- jQuery下实现检测指定元素加载完毕
- SQL Injection攻击检测工具
- arcgis 导出指定范围的地形图