您的位置:首页 > 大数据 > 人工智能

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;

}

}

}

复制代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: