Unity的导航系统是人物方便的移动

导航系统:
1.导航网格的烘焙:Window–>Navigation(导航)–>在确保Hierarchy中的 环境因素(地形及地形上的种种环境)都为Navigation Static ,【 若物体属性的Navigation Static不被勾选,则该物体被认为是 可以进行导航的物体(即人物可以穿过这里)】—>点击Navigation->Bake 中的 Bake 即进行烘焙

烘焙导航网格后,蓝色区域为可导航的区域【 取消部分物体的可导航性—>Ctrl点选多个物体后,在Navigation->Object 中选中的物体的 Navigation Area 设置为 Not Walkable】
【是部分物体可以 导航(通过)—>Ctrl点选多个物体后,将这些物体的 Inspector 的 Static 中的 Navigation Static 取消勾选】
重设物体的导航性后,再次Bake即可。

2.使人物在导航网格上运动:在 人物 的 Inspector 中 Add-> Nav Mesh Agent 组件,通过该组件的Radius 和 Height 属性 确定移动时人物的有效大小。
在Project 中创建 C#脚本,并将脚本拖拽到 人物 的 Inspector 中,打开该C#脚本—>通过射线检测(通过鼠标点击,发出竖直射线与地形进行碰撞产生的点)获取 点的位置–>

    using UnityEngine.AI; //NavMeshAgent 位于这个命名空间,要使用这个命名空间

//获取Nav Mesh Agent 组件,设为public 则 Unity 中人物的C#脚本中会自动更新出Agent属性!
    public NavMeshAgent agent; 

    void Update () {
    if (Input.GetMouseButtonDown(0)) //鼠标左键是否按下,0代表左键
    {
        /*获取到一个射线 ray ,Main Camera 用来把一个屏幕座标转换成一个 ray,
        屏幕座标通过 Input.mousePosition 获取*/
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        //使用 RaycastHit 保存碰撞信息 
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit))       /*进行射线检测--判断是否发生碰撞,
        传递参数 射线 和 out参数 hit,如果发生碰撞,则会将碰撞信息保存到 hit 中*/
        {
            //通过hit.point 获取碰撞发生的位置
            //print(hit.point); 

            /*使用 获取的碰撞发生的座标 在Nav Mesh Agent组件中,设置其中的目的地属性,
            这样可以使Nav Mesh Agent 朝这个座标运动 !!!*/
            agent.SetDestination(hit.point);
        }
    }
}

在Unity 中人物的C#脚本中自动更新出Agent属性后,将Nav Mesh Agent 组件拖拽为Agent的赋值 ---->运行游戏后,点击导航网格,人物即向agent的目的地移动。
人物转向的速度由NavMeshAgent组件中的Angular Speed 控制,其值越大,转向速度越快。

控制摄像机对人物的跟随: 首先 调整相机至跟随的合理的位置(一般为后上方)—>为Main Camera (相机) 创建 C#脚本组件(步骤同前)—>【使人物与相机的偏移量始终 等于 两者初始的偏移量】

//为获取跟随目标的位置,获取跟随的目标的Transform组件
//设置为public,可在Unity中直接显示!!
public Transform hero;
private Vector3 offset;//定义位置的便偏移

void Start () {

    //先获取初始偏移,当前位置 - hero的位置。
    offset = transform.position - hero.position;
}

void Update () {

    //在后期保持相机和主角的偏移-->当前位置 = 初始偏移量 + hero现在的位置
    transform.position = offset + hero.position;
	
}

在Unity中,Main Camera 的C#脚本组件中显示Hero属性,其赋值为 拖拽到其中的Hierarchy 中的人物。—>开始运行,点击场景,相机跟随人物移动。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章