自动寻径
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,实现点击目标,自动寻路功能
脚本:
using UnityEngine;
using System.Collections;
public class Move : MonoBehaviour {
private NavMeshAgent agent;
void Start () {
agent = GetComponent<NavMeshAgent>();
}
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);
}
}
using System.Collections;
public class Move : MonoBehaviour {
private NavMeshAgent agent;
void Start () {
agent = GetComponent<NavMeshAgent>();
}
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);
}
}
这样一个简单的自动寻径就完成了
动画效果
运行时我们发现角色是平移移动的,看着很不舒服。我们需要为角色添加动画让角色动起来
脚本:
using UnityEngine;
using System.Collections;
public class Move : MonoBehaviour {
private Animator anim;
void Start () {
anim=GetComponent <Animator>();
}
void Update () {
if (agent.remainingDistance == 0)
{
Trollidle();
}
else
{
Trollwalk();
}
}
void Trollidle()
{
anim.SetFloat("idle", 1F);
anim.SetFloat("walk", 0.0F);
anim.SetFloat("run", 0F);
}
void Trollwalk()
{
anim.SetFloat("idle",0F);
anim.SetFloat("walk", 1.0F);
anim.SetFloat("run", 0F);
}
}
宠物跟随
public Transform target;private NavMeshAgent agent;void Start () {agent = GetComponent<NavMeshAgent>();}void Update () {if (target!= null) {agent.destination=target.position;}}
把脚本给宠物并为宠物添加NavMeshAgent, target为主角。这样宠物就可以跟随主角运动。
从高空跳下
1、设置Navigation里面Bake的Drop Height的值
2、勾选Navigation里面Object的OffMeshLink Generatic
3、Bake
这样巨魔就可以从高出跳下来![]()
选择性的行走
1、把Navigation里面Bake的Drop Height的值设为0
2、取消勾选Navigation里面Object的OffMeshLink Generatic
3、Bake4、在Navigation里面Layers创建两个Layers(LayersUpLayersDown)-->Bake
5、选中主角,设置属性(NavMesh Walkable :Default )这样主角行走时就会不走红色区域