Система навигации Unity Navigation и руководство по рисованию

Предисловие

Система поиска пути - очень часто используемая функция в играх. Чтобы достичь определенной точки, система должна указать путь. Это может помочь игроку спланировать путь и побудить игрока прибыть. Эта функция широко используется в различных типах. игр.

В этом случае 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

рекомендация

отblog.csdn.net/xinzhilinger/article/details/113540207