Генерация Teleportarea С Использованием Navmesh

При разработке для VR на Unity у меня возникла проблема с TeleportArea, а именно, по умолчанию ее можно создать только прямоугольной.



Генерация TeleportArea с использованием NavMesh

Прямоугольная Телепортная Область Но это довольно неудобно, если на TeleportArea есть статический объект и игрок может в нем застрять.

Эту проблему можно решить и так, но решение будет выглядеть немного неудовлетворительно (ну лично для меня).



Генерация TeleportArea с использованием NavMesh

Решение, но у нас уже есть 4 TeleportArea Вроде бы проблема решена, но

  1. Вместо одной TeleportArea у нас их 4
  2. Такое решение сложно реализовать для большого помещения с большим количеством предметов.

  3. Это не дерьмо для Terrain


Генерация TeleportArea с использованием NavMesh

Некорректная работа с Terrain

Готовое решение

Есть готовое решение этой проблемы, но оно, к сожалению, для SteamVr 1.x. https://github.com/Flafla2/Vive-Teleporter , Поэтому я решил решить эту проблему, ведь.

не я один с ней страдал!

Решение этой проблемы

В Unity есть отличный генератор символов NavMesh, который генерирует карту местности для ИИ.



Генерация TeleportArea с использованием NavMesh

Запеченная NavMesh Почему бы не использовать его для создания TeleportArea. Итак, я сделал набросок скрипта для преобразования NavMesh в Mesh.

  
  
   

NavMeshTriangulation triangles = NavMesh.CalculateTriangulation(); Mesh mesh = new Mesh(); mesh.vertices = triangles.vertices; mesh.triangles = triangles.indices;

Зная, что TeleportArea использует MeshRender и MeshFilter для зоны движения, необходимо было сохранить его в папке проекта для дальнейших манипуляций.



public static void SaveMesh(Mesh mesh, string name, bool makeNewInstance, bool optimizeMesh) { Mesh meshToSave = (makeNewInstance) ? Instantiate(mesh) : mesh; if (optimizeMesh) MeshUtility.Optimize(meshToSave); AssetDatabase.CreateAsset(meshToSave, "Assets/GeneratedNavMeshes/" + name + ".

asset"); AssetDatabase.SaveAssets(); }

Я разработал этот инструмент как EditorWindow.

[CustomEditor(typeof(NaveMeshToMeshGenerator))] public class NavMeshToMeshEditor : Editor { public override void OnInspectorGUI() { NaveMeshToMeshGenerator now = (NaveMeshToMeshGenerator) target; GUILayout.Label("Created by LivelyPuer https://github.com/LivelyPuer "); now.BakeNaveMesh = GUILayout.Toggle(now.BakeNaveMesh, "Bake NavMesh", EditorStyles.toggle); if (GUILayout.Button("GenerateMesh")) { string curScene = EditorSceneManager.GetActiveScene().

name; if (now.BakeNaveMesh) { NavMeshBuilder.BuildNavMesh(); } NavMeshTriangulation triangles = NavMesh.CalculateTriangulation(); Mesh mesh = new Mesh(); mesh.vertices = triangles.vertices; mesh.triangles = triangles.indices; SaveMesh(mesh, "Mesh" + curScene, true, false); MeshCollider now_Mesh = now.GetComponent<MeshCollider>(); now_Mesh.sharedMesh = mesh; MeshFilter nowMeshFilter = now.GetComponent<MeshFilter>(); nowMeshFilter.mesh = mesh; Debug.Log("TeleportArea was created"); } } public static void SaveMesh(Mesh mesh, string name, bool makeNewInstance, bool optimizeMesh) { Mesh meshToSave = (makeNewInstance) ? Instantiate(mesh) : mesh; if (optimizeMesh) MeshUtility.Optimize(meshToSave); AssetDatabase.CreateAsset(meshToSave, "Assets/GeneratedNavMeshes/" + name + ".

asset"); AssetDatabase.SaveAssets(); } }



Генерация TeleportArea с использованием NavMesh



Как это использовать

  1. Загрузите последнюю версию с github https://github.com/LivelyPuer/NavMeshToTeleportArea
  2. Импортируйте его в Unity после установки пакета SteamVR 2.x.
  3. Создание комнаты


Генерация TeleportArea с использованием NavMesh

Украшение комнаты 4. Добавьте Collider ко всем статическим объектам и установите флажок Статический.



Генерация TeleportArea с использованием NavMesh

Статический 5. Добавьте в сцену префаб плеера SteamVR.

Генерация TeleportArea с использованием NavMesh

6. Открыть в окне/NavMesh в сетку 7. Выберите настройки TeleportArea.

Генерация TeleportArea с использованием NavMesh

8. В открывшемся окне нажмите кнопку «Сформировать».

9. На сцене появятся 2 объекта: 1. Телепортация (система движения для SteamVR) 2. Наша сгенерированная TeleportArea 10. Все готово! Наш готовый результат: Спасибо за прочтение статьи, все предложения по дальнейшему улучшению системы приветствуются в комментариях.

Готовый проект можно найти на github. Теги: #игры #Разработка игр #vr #Разработка для AR и VR #unity #AR и VR #pc #unity3d #navmesh #3v

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.