Предисловие
Система поиска пути - очень часто используемая функция в играх. Чтобы достичь определенной точки, система должна указать путь. Это может помочь игроку спланировать путь и побудить игрока прибыть. Эта функция широко используется в различных типах. игр.
В этом случае Navigation
используются Line Renderer
компоненты для идентификации индикаторной линии при реализации системы поиска пути . Окончательная картина эффекта выглядит следующим образом:
Процесс внедрения
1. Используйте навигацию, чтобы запечь сцену.
Для того , чтобы реализовать функцию автоматического поиска пути, в первую очередь, вам необходимо настроить основные параметры сцены , так что система может распознать , какие из них являются подвижные области , а какие нет. В Navigation
условиях суждения навигационной системы являются на основе статических объектов.Если вы хотите оценивать динамические объекты, вам необходимо добавить компоненты ответа.
Чтобы сделать объект статичным, сначала выберите статичную землю и препятствия в сцене, выберите перевернутый треугольник параметра Статический в верхнем левом углу панели инспектора редактора Unity и установите флажок Статический переход:
Затем введите Панель навигации для выполнения сцены. Чтобы запечь, щелкните два пункта Bake сверху вниз. Синяя область на рисунке - это подвижная область персонажа, а не синяя область - это непересекаемая область, которая является связанное препятствие:
Конкретные подробности о выпечке можно найти в статьях между:
2. Добавьте к роли компоненты ответа.
Чтобы обеспечить выполнение этой роли, необходимо добавить функции навигации и линии индикатора, Nav Mesh Agent
а также Line Renderer
два компонента:
Прежде всего, для Nav Mesh Agent
настройки параметров необходимо реализовать настройку пути персонажа. В этом случае настройка параметров компонента в основном осуществляется в двух аспектах. Во-первых, это его скорость. Установка значения может изменить движение скорость, а другой - ускорение., Размер изменения скорости при изменении цели
Второй компонент Line Renderer
находится в центре внимания в этом случае. Его основная функция - рисовать линии в трехмерной сцене. С помощью этой функции можно нарисовать путь, по которому будет двигаться персонаж, так что функция навигации объекта может быть понял.
О LIne Randerer
- Компонент Line Renderer принимает массив из двух или более точек в трехмерном пространстве и рисует прямую линию между каждой точкой. Вы можете использовать средство визуализации линий, чтобы рисовать что угодно, от простых прямых линий до сложных спиралей. Линии всегда непрерывны; если вам нужно нарисовать две или более полностью независимых линии, вы должны использовать несколько игровых объектов, каждый со своим собственным средством рендеринга линий. Средство рендеринга линий не отображает линии шириной в пиксель. Полигоны, которые он отображает, имеют ширину в мировых единицах. Средство рендеринга линий использует тот же алгоритм рендеринга линий, что и рендерер следа.
В этом случае после добавления компонента нам сначала нужно добавить к нему материал. Вы можете установить количество материалов в разделе «Материалы», добавить к нему материалы и отрегулировать его ширину по ширине. Конкретные настройки показаны на рисунке:
3. Напишите сценарий для вызова двух компонентов для навигации.
Соедините два компонента с помощью скриптов, сначала используйте свои собственные методы для выполнения своих функций, используйте Navigation
комбинированные лучи для обнаружения столкновений, чтобы завершить перемещение персонажа в позицию, на которую щелкнул щелчок, и Line Renderer
компоненты проведут линию между полученной серией точек для завершения двух комбинаций между ними состоит в том, Navigation
чтобы получить серию поворотных точек во время навигации по назначенной функции компонента и назначить их Line Renderer
, таким образом завершив функцию рисования линии:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class FindRode : MonoBehaviour
{
private NavMeshAgent agent;
private LineRenderer line;
// Start is called before the first frame update
void Start()
{
agent = GetComponent<NavMeshAgent>();
line = GetComponent<LineRenderer>();
}
// Update is called once per frame
void Update()
{
if(Input.GetMouseButtonDown(1))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray,out hit,500))
{
if(hit.transform.tag=="ground")
{
agent.SetDestination(hit.point);
}
}
}
//如果导航里面的点大于1
if(agent.path.corners.Length>1)
{
//画线的点位等于导航的点位
line.positionCount = agent.path.corners.Length;
line.SetPositions(agent.path.corners);
}
}
}
Комбинация между ними содержится в суждении If. Мы можем agent.path.corners.Length
узнать количество точек, которые необходимо провести через атрибуты, а через SetPositions()
массив, который может получить все координаты, мы можем провести между двумя соседними точками. Line