Unity之自动寻径

自动寻径

        现在的大部分mmo游戏都有了自动寻路功能。点击场景上的一个位置,角色就会自动寻路过去。中间可能会有很多的障碍物,角色会自动绕过障碍物,最终达到终点。使用Unity来开发手游,自动寻路可以有很多种实现方式。

        我们要实现一个功能:点击场景中的一个位置,角色可以自动寻路过去。角色会绕过各种复杂的障碍,找到一条理论上”最短路径“。

步骤:

1.创建地形
2.添加角色
3.创建多个障碍物,尽量摆的复杂一点,来检查Navmesh的可用性和效率。
4.选中地形,在Navigation窗口中,设置Navigation Static
5.依次选中障碍物,在Navigation窗口中,设置Navigation Static
6.Navigation窗口中,选择Bake(烘焙)界面,点击Bake按钮,进行场景烘焙,就可以烘焙出寻路网格了
7.为角色添加NavMeshAgent组件。Component->Navigation->Nav Mesh Agent
8.为角色新增一个脚本PlayerController.cs,实现点击目标,自动寻路功能

private NavMeshAgent agent;
private Animator anim;
void Start () {
    agent=GetComponent<NavMeshAgent>(); //获取自动寻路组件
        anim=GetComponent <Animator>(); //获取动画组件
    }
   
    void Update () {
        RaycastHit hit; //定义射线
        if (Input.GetMouseButtonDown(0)) {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if(Physics.Raycast(ray,out hit)){
                agent.SetDestination(hit.point);
            }
        }
        if(agent.remainingDistance ==0){
       
            AdmatorToIdle(); //静止不动方法
        }
        else{
            AdmatorToRun(); //开始跑方法
        }
       
    }
    void AdmatorToIdle() {
        anim.SetFloat("idle", 1F);
        anim.SetFloat("walk", 0.0F);
        anim.SetFloat("run", 0F);
    }
    void AdmatorToRun() {
        anim.SetFloat("idle", 0F);
        anim.SetFloat("walk", 0.0F);
        anim.SetFloat("run", 1.0F);
    }

巨魔从高空跳下

1、设置Navigation里面Bake的Drop Height的值
2、勾选Navigation里面Object的OffMeshLink Generatic
3、Bake

巨魔选择性的行走


1、把Navigation里面Bake的Drop Height的值设为0
2、取消勾选Navigation里面Object的OffMeshLink Generatic
3、Bake
4、在Navigation里面Layers创建两个Layers(LayersUp   LayersDown)-->Bake
5、选中巨魔,设置巨魔属性(NavMesh Walkable :Default  LayersUp或LayersDown)

宠物跟随

    public Transform target;
    public NavMeshAgent agent;
    void Start () {
    agent =GetComponent<NavMeshAgent >();
    }
    void Update () {
        if (target != null)
        {
            agent.SetDestination(target.position-new Vector3(0,0,3) ); //巨魔自身的坐标减去Z轴的距离,与宠物始终保持3米的距离
        }
    }

 

更多精彩关注:http://www.gopedu.com/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值