首页 > 其他分享 >噩梦系列篇之敌人自动追击Player功能(NavMeshAgent)

噩梦系列篇之敌人自动追击Player功能(NavMeshAgent)

时间:2023-01-05 13:06:53浏览次数:41  
标签:Player void 追击 player private agent NavMeshAgent 噩梦


敌人自动追击功能用到NavMeshAgent

制作NavMeshAgent:

首先选择地图,保持地图为static状态;

噩梦系列篇之敌人自动追击Player功能(NavMeshAgent)_unity3d


之后就是选择window里面的Navigation如下图:

噩梦系列篇之敌人自动追击Player功能(NavMeshAgent)_恶魔猎手_02


然后点击Bake后得到如下图;蓝色地图区域就是表示可以自动寻路的区域

噩梦系列篇之敌人自动追击Player功能(NavMeshAgent)_恶魔猎手_03


之后就是给敌人加入NavMeshAgent。。。

噩梦系列篇之敌人自动追击Player功能(NavMeshAgent)_自动寻路_04


然后给敌人加入一个脚本enemymove();这样就实现了最简单的自动寻路去追击主角的功能。

using UnityEngine;
using System.Collections;

public class enemymove : MonoBehaviour {

private NavMeshAgent agent;

private Transform player;

void Awake()
{
agent = this.GetComponent<NavMeshAgent>();


}

void Start () {


player = GameObject.FindGameObjectWithTag(Tag.player).transform;
}


void Update () {

agent.SetDestination(player.position);//追击到主角的位置
}
}


最简单的追击功能就此实现了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

设定一下enemy的动画状态机;如同player一样设定不介绍了直接看图:

噩梦系列篇之敌人自动追击Player功能(NavMeshAgent)_unity3d_05

之后为了完善追击功能和敌人动画的播放

首先为敌人设置刚体和collider(注意rigidbody的那两个属性把数值设置大。。player也是要设置大)

噩梦系列篇之敌人自动追击Player功能(NavMeshAgent)_System_06

之后完善追踪及动画播放的代码:

using UnityEngine;
using System.Collections;

public class enemymove : MonoBehaviour {

private NavMeshAgent agent;

private Transform player;

private Animator anim;

void Awake()
{
agent = this.GetComponent<NavMeshAgent>();
anim = this.GetComponent<Animator>();

}

void Start () {

player = GameObject.FindGameObjectWithTag(Tag.player).transform;
}


void Update () {

if (Vector3.Distance(transform.position, player.position) < 2.5f)//如果在这个范围内停止追击
{
agent.Stop();//停止追击

anim.SetBool("MOVE", false);
}

else
{
agent.SetDestination(player.position);//追击到player的位置
anim.SetBool("MOVE", true);
}
}
}



标签:Player,void,追击,player,private,agent,NavMeshAgent,噩梦
From: https://blog.51cto.com/u_8378185/5990707

相关文章