|
|
-
- using UnityEngine;
-
-
- [ExecuteInEditMode]
- public class FogVolumePrimitive : MonoBehaviour
- {
- public FogVolumePrimitive()
- {
- SphereColl = null;
- BoxColl = null;
- }
-
- public Transform GetTransform { get { return gameObject.transform; } }
-
- public Vector3 GetPrimitiveScale
- {
- get
- {
- return new Vector3(Mathf.Max(MinScale, transform.lossyScale.x),
- Mathf.Max(MinScale, transform.lossyScale.y),
- Mathf.Max(MinScale, transform.lossyScale.z));
- }
- }
-
- public Bounds Bounds
- {
- get
- {
- if (BoxColl != null) { return BoxColl.bounds; }
- else if (SphereColl != null) { return SphereColl.bounds; }
- else
- {
- return new Bounds(gameObject.transform.position, gameObject.transform.lossyScale);
- }
- }
- }
-
- public void AddColliderIfNeccessary(EFogVolumePrimitiveType _type)
- {
- Type = _type;
- switch (Type)
- {
- case EFogVolumePrimitiveType.None:
- {
- break;
- }
- case EFogVolumePrimitiveType.Box:
- {
- if (BoxColl == null) { BoxColl = gameObject.AddComponent<BoxCollider>(); }
- break;
- }
- case EFogVolumePrimitiveType.Sphere:
- {
- if (SphereColl == null) { SphereColl = gameObject.AddComponent<SphereCollider>(); }
- break;
- }
- }
- }
-
- private void OnEnable()
- {
- Primitive = gameObject;
- _Renderer = Primitive.GetComponent<MeshRenderer>();
- if (!PrimitiveMaterial)
- {
- PrimitiveMaterial = (Material) Resources.Load("PrimitiveMaterial");
- }
- _Renderer.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off;
- _Renderer.lightProbeUsage = UnityEngine.Rendering.LightProbeUsage.Off;
- _Renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
- _Renderer.receiveShadows = false;
-
- GetComponent<MeshRenderer>().material = PrimitiveMaterial;
-
- BoxColl = GetComponent<BoxCollider>();
- SphereColl = GetComponent<SphereCollider>();
-
- if (BoxColl == null &&
- SphereColl == null)
- {
- BoxColl = gameObject.AddComponent<BoxCollider>();
- Type = EFogVolumePrimitiveType.Box;
- }
- else
- {
- if (BoxColl != null) { Type = EFogVolumePrimitiveType.Box; }
- else if (SphereColl != null) { Type = EFogVolumePrimitiveType.Sphere; }
- else { Type = EFogVolumePrimitiveType.None; }
- }
- }
-
- public BoxCollider BoxColl;
-
- public SphereCollider SphereColl;
-
- public bool IsPersistent = true;
-
- public EFogVolumePrimitiveType Type;
-
- public bool IsSubtractive;
-
- public Material PrimitiveMaterial;
-
- private GameObject Primitive;
-
- private Renderer _Renderer;
-
- private readonly float MinScale = .0001f;
- }
|