Unity 寻路案例:自动寻路到目标点

文章目录

  • 1. 按
  • 2. 操作步骤

1. 按

在一个平面中,寻路物体会绕开平面上的障碍物并自动寻路以达到目标体所在的位置。
Unity 寻路案例:自动寻路到目标点_第1张图片

2. 操作步骤

  1. 创建的所有物体如图所示,1个Plane,7个Cube(其中六个是障碍物,Cube 6是目标物体),1个Sphere
    Unity 寻路案例:自动寻路到目标点_第2张图片

  2. Window->AI->Navigation
    Unity 寻路案例:自动寻路到目标点_第3张图片

  3. 点击Navigation,选中所有障碍物和平面,勾选Navigation Static
    Unity 寻路案例:自动寻路到目标点_第4张图片

  4. 将平面设为可走的(Walkable)
    Unity 寻路案例:自动寻路到目标点_第5张图片

  5. 将障碍物设为不可走的(Not Walkable)
    Unity 寻路案例:自动寻路到目标点_第6张图片

  6. 根据具体场景调节导航网格的大小
    Unity 寻路案例:自动寻路到目标点_第7张图片

  7. 进行烘焙后会看到可走的部分是蓝色的
    Unity 寻路案例:自动寻路到目标点_第8张图片

  8. 选中球形物体,添加Nav Mesh Agent
    Unity 寻路案例:自动寻路到目标点_第9张图片

  9. 将以下脚本挂载到主场景上

    using UnityEngine;
    using UnityEngine.AI;
    
    public class test : MonoBehaviour
    {
        public NavMeshAgent agent; //寻路者
        public Transform target;    //寻路目标
        // Start is called before the first frame update
        void Start()
        {
            
        }
    
        // Update is called once per frame
        void Update()
        {
            agent.SetDestination(target.position);  //寻路算法
        }
    }
    
    
  10. 绑定变量,此时已完成任务。
    Unity 寻路案例:自动寻路到目标点_第10张图片

  11. 最后也可以添加控制目标体移动的功能,将以下代码生成的脚本绑定到目标四方体上

    using UnityEngine;
    
    public class movement : MonoBehaviour
    {
        public float speed = 5;
        public float angularSpeed = 30;
        private Rigidbody rigidbody;
        // Start is called before the first frame update
        void Start()
        {
            rigidbody = this.GetComponent<Rigidbody>();
        }
    
        // Update is called once per frame
        void Update()
        {
            float v = Input.GetAxis("Vertical");
            rigidbody.velocity = transform.forward * v * speed;
            float h = Input.GetAxis("Horizontal");
            rigidbody.angularVelocity = transform.up * h * angularSpeed;
        }
    }
    
  12. 给目标四方体添加Rigidbody,冻结Position中的y,Rotation中的x轴,即可实现按上下左右箭头键移动和控制目标体的方向
    Unity 寻路案例:自动寻路到目标点_第11张图片

你可能感兴趣的:(Unity)