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

敌人自动追击功能用到NavMeshAgent

制作NavMeshAgent:

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



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



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



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



然后给敌人加入一个脚本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一样设定不介绍了直接看图:


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

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


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

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);
        }
	}
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值