Files
JJBB/Assets/Project/Script/Common/Utilities/Editor/NavMeshToCollider.cs
2024-08-23 15:49:34 +08:00

77 lines
2.6 KiB
C#

using Module.Log;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
public static class NavMeshToCollider
{
public const string navMeshColliderName = "navMeshCollider";
[MenuItem("Scene/NavMesh生成碰撞体")]
public static void ConvertNavMeshToCollider()
{
if (Application.isPlaying)
{
LogModule.ErrorLog("不允许在游戏运行时生成寻路碰撞!");
}
else
{
RemoveOtherCollider();
var colliderObj = GameObject.Find(navMeshColliderName);
if (colliderObj == null)
colliderObj = new GameObject(navMeshColliderName);
colliderObj.layer = 0;
colliderObj.transform.position = Vector3.zero;
colliderObj.transform.rotation = Quaternion.identity;
colliderObj.transform.localScale = Vector3.one;
var meshCollider = colliderObj.EnsureComponent<MeshCollider>();
var triangulation = UnityEngine.AI.NavMesh.CalculateTriangulation();
var vertics = triangulation.vertices;
var mesh = new Mesh
{
vertices = vertics,
triangles = triangulation.indices
};
if (meshCollider.sharedMesh != null)
Object.DestroyImmediate(meshCollider.sharedMesh);
meshCollider.sharedMesh = mesh;
EditorSceneManager.MarkAllScenesDirty();
}
}
[MenuItem("Scene/移除非NavMesh碰撞体")]
public static void RemoveOtherCollider()
{
if (Application.isPlaying)
{
LogModule.ErrorLog("不允许在游戏运行时移除碰撞体!");
}
else
{
var colliders = Object.FindObjectsOfType<Collider>();
for (var i = 0; i < colliders.Length; i++)
if (!string.Equals(colliders[i].gameObject.name, navMeshColliderName))
{
LogModule.WarningLog("删除Collider于GameObject " + colliders[i].transform.GetHierarchyName());
Object.DestroyImmediate(colliders[i]);
}
EditorSceneManager.MarkAllScenesDirty();
}
}
[MenuItem("Scene/开启摄像机深度")]
public static void EnableCameraDepth()
{
if (Application.isPlaying)
{
LogModule.ErrorLog("不允许在游戏运行时修改摄像机!");
}
else
{
var camera = Object.FindObjectOfType<Camera>();
if (camera != null)
camera.depthTextureMode = DepthTextureMode.Depth;
}
}
}