Unity自带NavMesh寻路组件及摄像机跟随主角

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010989951/article/details/62427525

在游戏中,角色的自动寻路功能很常见,当我们点击地图中的某个位置时角色自动走到该位置点,并且还自动绕过障碍物,这个功能看起来很高大上,但是通过Unity自带的寻路组件很容易实现。废话不说,先上效果,觉得效果不是想要的可以不用继续看,毕竟时间是最重要的。
这里写图片描述
这里写图片描述
具体实现分为3步:
1:创建游戏物体,本次物体主要有cube表示主角,pointlight照亮鼠标点击的位置表示选取的位置,Terrain地面。
2:给cube添加NavMeshAgent组件,添加的方式为:Component/navigation/NavMeshAgent,然后点击window/navigation调出Navigation编辑器,如图:
这里写图片描述
选择Terrain,Navigation编辑器变成下图:
这里写图片描述
勾选1,2选择walkable,表示可以走,2这里下拉还可以选择not walkable表示不可走,如果设置路障时则选择这个Notwalkable,最后一个是jump,表示跳跃。然后点击Bake开始烘焙,渲染出寻路路径,注意,bake这一步不能忽略。
3:代码实现:这一步主要实现摄像机跟随主角和鼠标拣选位置,以及角色自动寻路;具体代码如下;

using UnityEngine;
using System.Collections;

public class xunlu : MonoBehaviour {

    // Use this for initialization
    public GameObject cub;//这里表示pointlight来照亮鼠标选取的区域
    NavMeshAgent nav;
    Vector3 vec;
    void Start () {
        nav = GetComponent<NavMeshAgent>();
        vec = transform.position - Camera.main.transform.position;
        //这里表示相机与主角的偏移,相机跟随就是靠这个偏移向量实现的
    }

    // Update is called once per frame
    void Update () {
        nav.SetDestination(cub.transform.position);//寻路的目标点,这里为cub的位置
        Camera.main.transform.position = transform.position - vec;//向量加减来实现相机跟随
        RaycastHit hitInfo;
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (Physics.Raycast(ray, out hitInfo))
        {
            //当射线碰撞到Terrain并且鼠标左键按下时
            if (hitInfo.transform.gameObject.name == "Terrain" && Input.GetMouseButtonDown(0))
            {
                //让cube方向朝向点击位置
                cub.transform.position = hitInfo.point + new Vector3(0,1,0);
            }
        }
    }
}

最后将该脚本挂在主角上,就可以进行测试了,当然,这里我没有介绍如何添加路障,添加路障的方法很简单,在场景里放好路障,选择路障,打开navigation 编辑器,勾选Navigation static,设置navigation area为Not walkable,然后点击bake即可。

展开阅读全文

没有更多推荐了,返回首页