当前位置:   article > 正文

【Unity学习笔记】——使用unity自带寻路系统进行寻路_setdestination unity

setdestination unity

自动寻路步骤:

①  把场景中不动的物体勾选static

②  烘焙寻路网格

③  添加NavMeshAgent组件

④  给需要寻路的物体添加脚本

实现:

① 搭一个简易场景

放上enemy和player:

把场景设为静态

选择window→navigation,调出navigation面板,选择bake,形成一个蓝色路面,enemy将在这个蓝色路面上进行寻路

给寻路者(敌人)添加NavMeshAgent组件

把下面脚本挂到enemy上

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.AI;
  5. /// <summary>
  6. /// 寻路算法
  7. /// </summary>
  8. public class NavTest : MonoBehaviour {
  9. private NavMeshAgent agent;//寻路者
  10. public Transform target;//寻路目标
  11. private void Start()
  12. {
  13. agent = this.GetComponent<NavMeshAgent>();
  14. }
  15. private void Update()
  16. {
  17. if(agent!=null)
  18. {
  19. agent.SetDestination(target.position);//寻路算法
  20. }
  21. }
  22. }

运行,enemy自动靠近player

但是enemy和player会重合在一起

调Stopping Distance


如果没有player,点击哪就让AI往哪寻路呢?

把下面脚本挂到Camera上,为AI添加NavMeshAgent组件,同样需要烘焙一个NavMash

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.AI;
  5. public class RayTest : MonoBehaviour {
  6. private Ray ray;
  7. private RaycastHit hit;//射线碰到的碰撞信息
  8. public GameObject navPlayer;//寻路的人
  9. private NavMeshAgent agent;
  10. private void Start()
  11. {
  12. agent = navPlayer.GetComponent<NavMeshAgent>();
  13. }
  14. private void Update ()
  15. {
  16. //射线起始位置
  17. ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  18. if(Physics.Raycast(ray,out hit, 100) && Input.GetMouseButtonDown(0))
  19. {
  20. agent.SetDestination(hit.point);
  21. Debug.DrawLine(ray.origin, hit.point, Color.red);
  22. }
  23. }
  24. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/111283
推荐阅读
相关标签
  

闽ICP备14008679号