赞
踩
自动寻路步骤:
① 把场景中不动的物体勾选static
② 烘焙寻路网格
③ 添加NavMeshAgent组件
④ 给需要寻路的物体添加脚本
实现:
① 搭一个简易场景
放上enemy和player:
把场景设为静态
选择window→navigation,调出navigation面板,选择bake,形成一个蓝色路面,enemy将在这个蓝色路面上进行寻路
给寻路者(敌人)添加NavMeshAgent组件
把下面脚本挂到enemy上
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.AI;
-
- /// <summary>
- /// 寻路算法
- /// </summary>
- public class NavTest : MonoBehaviour {
-
- private NavMeshAgent agent;//寻路者
- public Transform target;//寻路目标
-
- private void Start()
- {
- agent = this.GetComponent<NavMeshAgent>();
- }
-
- private void Update()
- {
- if(agent!=null)
- {
- agent.SetDestination(target.position);//寻路算法
- }
- }
- }
运行,enemy自动靠近player
但是enemy和player会重合在一起
调Stopping Distance
如果没有player,点击哪就让AI往哪寻路呢?
把下面脚本挂到Camera上,为AI添加NavMeshAgent组件,同样需要烘焙一个NavMash
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.AI;
-
- public class RayTest : MonoBehaviour {
-
- private Ray ray;
- private RaycastHit hit;//射线碰到的碰撞信息
- public GameObject navPlayer;//寻路的人
- private NavMeshAgent agent;
-
- private void Start()
- {
- agent = navPlayer.GetComponent<NavMeshAgent>();
- }
-
- private void Update ()
- {
- //射线起始位置
- ray = Camera.main.ScreenPointToRay(Input.mousePosition);
- if(Physics.Raycast(ray,out hit, 100) && Input.GetMouseButtonDown(0))
- {
- agent.SetDestination(hit.point);
- Debug.DrawLine(ray.origin, hit.point, Color.red);
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。