Пятница, 29 Марта 2024, 10:13

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Поиск пути (Проблема с передвижением по сетке)
Поиск пути
Valik_FenkoДата: Суббота, 28 Мая 2016, 00:20 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Написал волновый алгоритм поиска пути.(Занимает все соседние клетки и по диагонали тоже пока не найдёт конечную точку).Но вот проблема ,я не могу сделать чтоб персонаж двигался по этому пути...
В Update() путь постоянно обновляется и поэтому я не знаю как сделать чтобы игрок шел от клетки до клетки пока путь заного прощитывается.Я делаю я через Vector3.MoveToward и проблема в том что оно перезаписывает постоянно шаги, в итоге персонаж идет напрямик проходя через стены..Мб кто подаст идею как его лучше реализовать.Ну поэтапно.Потому что в интерете только реалзация самого алгоритма,а как передвигать по сетке персонажа ниче нету :(.У самого не получается чет
EchoITДата: Суббота, 28 Мая 2016, 01:07 | Сообщение # 2
старожил
Сейчас нет на сайте
Valik_Fenko, нужен просто поиск пути или цель состоит именно в самостоятельной разработке? Что мешает использовать какой-нибудь NavMesh из коробки?
Хотелось бы увидеть код для возможности детального разбора.


Долгожданный анонсик: State of War
Valik_FenkoДата: Суббота, 28 Мая 2016, 13:47 | Сообщение # 3
почетный гость
Сейчас нет на сайте
С этим разобрался.Есть проблема с подвижными объектами(Юнитами).Вся карта разбита на квадраты по которым юниты двигаются.Как лучше проверять находится ли юнит в квадрате чтобы изменить тег квадрата(Сделать непроходимым)?

Делаю сам.NavMesh мягко говоря фигня.Он ищет самый кототкий путь и всё такое,но напишу я Instantiate гденить и мой объект будет игнорится NavMesh.Такчто мимо сразу

В общем напишу ещё раз по другому сформулирую вопрос).
По всей карте находятся квадратики на расстоянии 1 юнит друг от друга.Мне нужно сделать чтоб пока они сталкивались со стеной или другим непроходимым обьектом у них тег был UnPath,если же они не сталкиваются с таким обьектом то Path..

Как лучше всего проверять столкновение?.
Я делал через OnTriggerStay и Enter,Exit,но он хорошо работает ток для неподвижных обьектов,а у меня RPG жанр игры.И мне нид чет не очень ресурсозатратное и чтоб работало и с подвижными обьектами.


Сообщение отредактировал Valik_Fenko - Суббота, 28 Мая 2016, 16:31
EchoITДата: Суббота, 28 Мая 2016, 17:25 | Сообщение # 4
старожил
Сейчас нет на сайте
Цитата
но напишу я Instantiate гденить и мой объект будет игнорится NavMesh

Щас бы забить на справку, да? biggrin Для этих целей есть Nav Mesh Obstacle.
Цитата
По всей карте находятся квадратики на расстоянии 1 юнит друг от друга.Мне нужно сделать чтоб пока они сталкивались со стеной или другим непроходимым обьектом у них тег был UnPath,если же они не сталкиваются с таким обьектом то Path..

Ты велосипеды изобретаешь. Но допустим тебе это очень надо, и необходимо решить эту проблему.

OnTriggerEnter и OnTriggerExit прекрасно работают и с подвижными объектами, проверено. Сам писал подобный поиск пути. Но нюансы начинаются ровно с того момента, как твой юнит утыкается в UnPath, и тут уже нужно придумать, как он будет его обходить. Изврат, в общем. Можно попробовать использовать теорию графов и поиск вглубину, например. Все пути прохода алгоритма записывать, затем, если пути найдены, то выбираем кратчайший, и пускаем по нему юнита (ну а клетку, в которую заходит юнит, соответственно делать занятой - UnPath). Разумеется, это работает для статики. Для динамики этот поиск пути нужно производить возможно даже каждый кадр. А это прожорливо. Но опять же, повторюсь, OnTriggerExit и OnTriggerEnter замечательно работают.

И всё же, я бы советовал хорошенько разобраться с НавМеш, точно убедиться, что он не подходит, и уж только в этом случае писать велосипеды.


Долгожданный анонсик: State of War
Valik_FenkoДата: Суббота, 28 Мая 2016, 17:33 | Сообщение # 5
почетный гость
Сейчас нет на сайте
Мм.Алгоритм у меня уже есть(Волновой поиск пути) и персонаж по нему двигается,проблема только в нем самом.Я покамись поставил красные и синие материалы на эти квадратики.Если он непроходим то он красный если проходим то синий(чтоб видеть).Алгоритм отлично работает и обходит квадратики.Как ты говоришь он каждый кадр считывает новый путь(лагов нет.Лишнее всё убрал).Алгоритм поиска волновой,так что он без всяких проблем находит путь.Проблема не в нем а в этих квадратиках.Скажем у меня есть вот такой скрипт
Код
using UnityEngine;
using System.Collections;

public class PathSetting : MonoBehaviour
{
    public Material Red,Blue;
    void OnTriggerEnter(Collider other)
    {
  if(other.gameObject.tag == "Path")
  {
   other.gameObject.tag = "UnPath";
   other.gameObject.renderer.material = Red;
  }
    }
    void OnTriggerExit(Collider other)
    {
  if(other.gameObject.tag == "UnPath")
  {
   other.gameObject.tag = "Path";
   other.gameObject.renderer.material = Blue;
  }
    }
}

Он работает только для неподвижных объектов.Если вешаю на юнита ничиго не происходит все клеточки которые он тригерно зацепил остются синими и проходимымы ,а ининогда одна становится красной и даже после того как юнит покидает этот квадрат.Вот поэтому я и усомнился в работе OnTriggerEnter.
Напиши плиз что куда кидать чтоб правильно работало.
То есть на какой объект скрипт кидать(Подвижный неподвижный).На какой галочку ставить IsTrigger и кидать Rigibody,а то у меня чет ваще не ок работает.Или мб скрипт не так сделал. =(

Ну если ты говоришь я изобрёл велосипед,черт с ним ;D.


Сообщение отредактировал Valik_Fenko - Суббота, 28 Мая 2016, 17:37
EchoITДата: Суббота, 28 Мая 2016, 18:05 | Сообщение # 6
старожил
Сейчас нет на сайте
Valik_Fenko, во-первых, и на кубиках пути, и на юните должен быть коллайдер (или триггер, не суть важно), и хоть на одном из них должен быть Rigidbody (насколько я помню на подвижном, т.е. в твоём случае на юните, да и это будет менее ресурсозатратно). Чтобы не было проблем с Rigidbody (если не нужна физика), ставишь на нём галку isKinematic. Свой скрипт кидаешь на игрока, и всё должно работать.

Долгожданный анонсик: State of War
Valik_FenkoДата: Суббота, 28 Мая 2016, 18:09 | Сообщение # 7
почетный гость
Сейчас нет на сайте
Щас попробую

Добавлено (28 мая 2016, 18:09)
---------------------------------------------
Работает.Но очень лаги жуткие начались когда я это сделал =(

EchoITДата: Суббота, 28 Мая 2016, 18:18 | Сообщение # 8
старожил
Сейчас нет на сайте
Valik_Fenko, Ctrl+7 нажми, выбери CPU Usage и заскринь окошко во время игры.

Долгожданный анонсик: State of War
Valik_FenkoДата: Суббота, 28 Мая 2016, 18:27 | Сообщение # 9
почетный гость
Сейчас нет на сайте
СКРИН

Сообщение отредактировал Valik_Fenko - Суббота, 28 Мая 2016, 18:40
EchoITДата: Суббота, 28 Мая 2016, 18:40 | Сообщение # 10
старожил
Сейчас нет на сайте
Valik_Fenko, попробуй нафиг вырубить рендер всех этих кубиков. Ну и цвет соответственно им не менять - сам говоришь, заработало. Возможно, из-за этого.

Ну и ещё нагуглил, что стоит вырубить VSync в QualitySettings (хотя, ИМХО, это и так нужно сделать в первую очередь).


Долгожданный анонсик: State of War

Сообщение отредактировал EchoIT - Суббота, 28 Мая 2016, 18:41
Valik_FenkoДата: Суббота, 28 Мая 2016, 18:50 | Сообщение # 11
почетный гость
Сейчас нет на сайте
да уже пробовал так убрал рендер (

ваще куба нету.Один коллайдер.Лаги менше,но всё равно жуткие

вопрос от нуба.Что это?

Добавлено (28 мая 2016, 18:45)
---------------------------------------------
А понял нагуглил сеттинг щас поиграюсь

Добавлено (28 мая 2016, 18:50)
---------------------------------------------
Не, =(.Всё равно жуткие лаги настройки самые низкие

Сообщение отредактировал Valik_Fenko - Суббота, 28 Мая 2016, 18:49
EchoITДата: Суббота, 28 Мая 2016, 18:57 | Сообщение # 12
старожил
Сейчас нет на сайте
Valik_Fenko, растяни окошко, которое открылось при ctrl+7 и сделай ещё раз скрин, а то там не всё видно. И помимо CPU Usage заскринь ещё Rendering, скорее всего, там будет что-то интересное.

Долгожданный анонсик: State of War
Valik_FenkoДата: Суббота, 28 Мая 2016, 19:00 | Сообщение # 13
почетный гость
Сейчас нет на сайте
кажется я понял в чем проблема.Вот сотри он кидает под себя "стену",ну что нельзя там пройти,а потом пытается пройти.И мой волновой алгоритм сходит с ума прост ппц.Пытается чет сделать :D.Можно добавить ещё 1 тип тега Unit,но ведь тогда и остальные юниты будут проходить через него.

P.S возможно даже если он будет ходить нормально лаги будут,т.к чтоб увидеть что оно тупить я уменшил сетку с 85 на 85 до 25 на 25.Что очень значительно..

Добавлено (28 мая 2016, 19:00)
---------------------------------------------
Странно у меня в процесах ниче не происходит в рендеринге.Цифры не меняются,диаграмма не шевелится.да и ваще ниче интересно нету.так и должно быть?


Сообщение отредактировал Valik_Fenko - Суббота, 28 Мая 2016, 19:02
EchoITДата: Суббота, 28 Мая 2016, 19:01 | Сообщение # 14
старожил
Сейчас нет на сайте
Valik_Fenko, если камеру не двигать, то вряд ли там что-то меняться будет. Вполне возможно, что из-за алгоритма просадки, у самого так было, когда код кривоват получался)

Долгожданный анонсик: State of War
Valik_FenkoДата: Суббота, 28 Мая 2016, 19:14 | Сообщение # 15
почетный гость
Сейчас нет на сайте
Сотри!Он короче зацикливается и не перестает искать путь потомучто красной становятся ток 2-3 клетки остальные синие и алгоритм работает.И жесть как нагружает систему...Нид придумать как игнорить красные кубики которые созданы самим юнитом

Сообщение отредактировал Valik_Fenko - Суббота, 28 Мая 2016, 19:21
EchoITДата: Суббота, 28 Мая 2016, 19:26 | Сообщение # 16
старожил
Сейчас нет на сайте
Valik_Fenko, записывать этот кубик в переменную и потом просто воткнуть в цикле или где там конструкцию вида if (checkingCube!=cubeBelowUnit) или как-нибудь так.

Долгожданный анонсик: State of War
Valik_FenkoДата: Суббота, 28 Мая 2016, 19:37 | Сообщение # 17
почетный гость
Сейчас нет на сайте
Не циклится я хз как его сделать.Сложно(

Сообщение отредактировал Valik_Fenko - Суббота, 28 Мая 2016, 19:41
EchoITДата: Суббота, 28 Мая 2016, 19:42 | Сообщение # 18
старожил
Сейчас нет на сайте
Valik_Fenko, блин, не знаю biggrin biggrin

Долгожданный анонсик: State of War
Valik_FenkoДата: Суббота, 28 Мая 2016, 19:54 | Сообщение # 19
почетный гость
Сейчас нет на сайте
Сделал!Смотри.Когда юнит начинает движение делаем клеточку красной.Если стартовая клеточка красная алгоритму как-то *****.
Когда он доходит до сл . клеточки делаем эти назад синей,а ту в которую он пришал делаем красной и так пока он не прийдёт.т.к любой юнит будет проходить клеточку весьма быстро,то проблем с проходом через юнитов быть не должно!

Добавлено (28 мая 2016, 19:54)
---------------------------------------------
Ток 1 минус.Пока он стоит под ним нету красного квадратика.Бога нет!

EchoITДата: Суббота, 28 Мая 2016, 19:54 | Сообщение # 20
старожил
Сейчас нет на сайте
Valik_Fenko, в целом, вменяемое решение. Странно, что так не работало.

Долгожданный анонсик: State of War
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Поиск пути (Проблема с передвижением по сетке)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг