| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- using System;
- using System.Collections.Generic;
- using UnityEngine.Assertions;
- namespace UnityEngine.Rendering.PostProcessing
- {
- static class MeshUtilities
- {
- static Dictionary<PrimitiveType, Mesh> s_Primitives;
- static Dictionary<Type, PrimitiveType> s_ColliderPrimitives;
- static MeshUtilities()
- {
- s_Primitives = new Dictionary<PrimitiveType, Mesh>();
- s_ColliderPrimitives = new Dictionary<Type, PrimitiveType>
- {
- { typeof(BoxCollider), PrimitiveType.Cube },
- { typeof(SphereCollider), PrimitiveType.Sphere },
- { typeof(CapsuleCollider), PrimitiveType.Capsule }
- };
- }
- internal static Mesh GetColliderMesh(Collider collider)
- {
- var type = collider.GetType();
- if (type == typeof(MeshCollider))
- return ((MeshCollider)collider).sharedMesh;
- Assert.IsTrue(s_ColliderPrimitives.ContainsKey(type), "Unknown collider");
- return GetPrimitive(s_ColliderPrimitives[type]);
- }
- internal static Mesh GetPrimitive(PrimitiveType primitiveType)
- {
- Mesh mesh;
- if (!s_Primitives.TryGetValue(primitiveType, out mesh))
- {
- mesh = GetBuiltinMesh(primitiveType);
- s_Primitives.Add(primitiveType, mesh);
- }
- return mesh;
- }
- // (Not pretty) hack to get meshes from `unity default resources` in user land
- // What it does is create a new GameObject using the CreatePrimitive utility, retrieve its
- // mesh and discard it...
- static Mesh GetBuiltinMesh(PrimitiveType primitiveType)
- {
- var gameObject = GameObject.CreatePrimitive(primitiveType);
- var mesh = gameObject.GetComponent<MeshFilter>().sharedMesh;
- RuntimeUtilities.Destroy(gameObject);
- return mesh;
- }
- }
- }
|