Files
3d-bxqz/Assets/Enviro 3 - Sky and Weather/Scripts/Runtime/Base/EnviroEffectRemovalZone.cs
2026-05-06 17:36:41 +08:00

100 lines
2.6 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Enviro
{
[ExecuteInEditMode]
[AddComponentMenu("Enviro 3/Effect Removal Zone")]
public class EnviroEffectRemovalZone : MonoBehaviour
{
public enum Mode
{
Spherical,
Cubical
}
public Mode type;
[Range(-10f, 0f)]
public float density = -10.0f;
public float radius = 1.0f;
public float stretch = 2.0f;
[Range(0, 1)]
public float feather = 0.7f;
public Vector3 size = Vector3.one * 10;
void OnEnable()
{
if(EnviroManager.instance != null)
AddToZoneToManager();
}
void OnDisable()
{
if(EnviroManager.instance != null)
RemoveZoneFromManager();
}
void OnDestroy()
{
if(EnviroManager.instance != null)
RemoveZoneFromManager();
}
void AddToZoneToManager()
{
bool addedToMgr = false;
for(int i = 0; i < EnviroManager.instance.removalZones.Count; i++)
{
if(EnviroManager.instance.removalZones[i] == this)
{
addedToMgr = true;
break;
}
}
if(!addedToMgr)
EnviroManager.instance.AddRemovalZone(this);
}
void RemoveZoneFromManager()
{
for(int i = 0; i < EnviroManager.instance.removalZones.Count; i++)
{
if(EnviroManager.instance.removalZones[i] == this)
EnviroManager.instance.RemoveRemovaleZone(EnviroManager.instance.removalZones[i]);
}
}
void Update()
{
transform.localScale = size;
}
void OnDrawGizmosSelected()
{
if(type == Mode.Spherical)
{
Matrix4x4 m = Matrix4x4.identity;
Transform t = transform;
m.SetTRS(t.position, t.rotation, new Vector3(1.0f, stretch, 1.0f));
Gizmos.matrix = m;
Gizmos.DrawWireSphere(Vector3.zero, radius);
}
else
{
Matrix4x4 m = Matrix4x4.identity;
Transform t = transform;
m.SetTRS(t.position, t.rotation, new Vector3(1.0f, 1.0f, 1.0f));
Gizmos.matrix = m;
Gizmos.DrawWireCube(Vector3.zero,t.localScale);
}
}
}
}