77 lines
2.6 KiB
C#
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;
|
|
}
|
|
}
|
|
} |