|
#if UNITY_EDITOR
|
|
using UnityEngine;
|
|
|
|
using UnityEditor;
|
|
|
|
using System.Reflection;
|
|
|
|
|
|
public class FogVolumeCreator : Editor
|
|
{
|
|
[MenuItem("GameObject/Create Other/Fog Volume")]
|
|
[MenuItem("Fog Volume/Create Fog Volume")]
|
|
public static void CreateFogVolume()
|
|
{
|
|
var FogVolume = new GameObject();
|
|
|
|
//Icon stuff
|
|
var Icon = Resources.Load("FogVolumeIcon") as Texture;
|
|
|
|
//Icon.hideFlags = HideFlags.HideAndDontSave;
|
|
var editorGUI = typeof(EditorGUIUtility);
|
|
var bindingFlags = BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.NonPublic;
|
|
var args = new object[]
|
|
{
|
|
FogVolume,
|
|
Icon
|
|
};
|
|
editorGUI.InvokeMember("SetIconForObject", bindingFlags, null, null, args);
|
|
|
|
FogVolume.name = "Fog Volume";
|
|
FogVolume.AddComponent<MeshRenderer>();
|
|
FogVolume.AddComponent<FogVolume>();
|
|
FogVolume.GetComponent<Renderer>().shadowCastingMode =
|
|
UnityEngine.Rendering.ShadowCastingMode.Off;
|
|
FogVolume.GetComponent<Renderer>().receiveShadows = false;
|
|
FogVolume.GetComponent<Renderer>().reflectionProbeUsage =
|
|
UnityEngine.Rendering.ReflectionProbeUsage.Off;
|
|
FogVolume.GetComponent<Renderer>().lightProbeUsage =
|
|
UnityEngine.Rendering.LightProbeUsage.Off;
|
|
Selection.activeObject = FogVolume;
|
|
if (SceneView.currentDrawingSceneView)
|
|
{
|
|
SceneView.currentDrawingSceneView.MoveToView(FogVolume.transform);
|
|
}
|
|
}
|
|
|
|
|
|
//=============================================================================================
|
|
// L I G H T S
|
|
//=============================================================================================
|
|
|
|
[MenuItem("GameObject/Create Other/Fog Volume Light/Fog Volume Point Light")]
|
|
[MenuItem("Fog Volume/Create Light/Fog Volume Point Light")]
|
|
public static void CreateFogVolumePointLight()
|
|
{
|
|
var fogVolumeLight = new GameObject("FogVolumePointLight");
|
|
var light = fogVolumeLight.AddComponent<FogVolumeLight>();
|
|
light.IsPointLight = true;
|
|
light.IsAddedToNormalLight = false;
|
|
}
|
|
|
|
[MenuItem("GameObject/Create Other/Fog Volume Light/Fog Volume Spot Light")]
|
|
[MenuItem("Fog Volume/Create Light/Fog Volume Spot Light")]
|
|
public static void CreateFogVolumeSpotLight()
|
|
{
|
|
var fogVolumeLight = new GameObject("FogVolumeSpotLight");
|
|
var light = fogVolumeLight.AddComponent<FogVolumeLight>();
|
|
light.IsPointLight = false;
|
|
light.IsAddedToNormalLight = false;
|
|
}
|
|
|
|
[MenuItem("Fog Volume/Create Light/Fog Volume Directional Light")]
|
|
public static void AutoCreateFogVolumeDirectionalLight()
|
|
{
|
|
var lights = FindObjectsOfType<Light>();
|
|
for (var i = 0; i < lights.Length; i++)
|
|
{
|
|
var light = lights[i];
|
|
if (light.type == LightType.Directional)
|
|
{
|
|
if (light.GetComponent<FogVolumeDirectionalLight>() == null)
|
|
{
|
|
var dirLight = light.gameObject.AddComponent<FogVolumeDirectionalLight>();
|
|
var fogVolumes = FindObjectsOfType<FogVolume>();
|
|
dirLight._TargetFogVolumes = new FogVolume[fogVolumes.Length];
|
|
for (var k = 0; k < fogVolumes.Length; k++)
|
|
{
|
|
dirLight._TargetFogVolumes[k] = fogVolumes[k];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
[MenuItem("Fog Volume/Create Light/Fog Volume Directional Light", true)]
|
|
public static bool EnableCreateFogVolumeDirectionalLight()
|
|
{
|
|
return FindObjectOfType<FogVolumeDirectionalLight>() == null &&
|
|
FindObjectOfType<FogVolume>() != null;
|
|
}
|
|
[MenuItem("GameObject/Create Other/Fog Volume Light/Normal Point Light")]
|
|
[MenuItem("Fog Volume/Create Light/Normal Point Light")]
|
|
public static void CreateNormalPointLight()
|
|
{
|
|
var normalPointLight = new GameObject("Point light");
|
|
var light = normalPointLight.AddComponent<Light>();
|
|
light.type = LightType.Point;
|
|
var fvLight = normalPointLight.AddComponent<FogVolumeLight>();
|
|
fvLight.IsPointLight = true;
|
|
fvLight.IsAddedToNormalLight = true;
|
|
}
|
|
|
|
[MenuItem("GameObject/Create Other/Fog Volume Light/Normal Spot Light")]
|
|
[MenuItem("Fog Volume/Create Light/Normal Spot Light")]
|
|
public static void CreateNormalSpotLight()
|
|
{
|
|
var normalPointLight = new GameObject("Spot light");
|
|
var light = normalPointLight.AddComponent<Light>();
|
|
light.type = LightType.Spot;
|
|
var fvLight = normalPointLight.AddComponent<FogVolumeLight>();
|
|
fvLight.IsPointLight = false;
|
|
fvLight.IsAddedToNormalLight = true;
|
|
}
|
|
|
|
|
|
//=============================================================================================
|
|
// P R I M I T I V E S
|
|
//=============================================================================================
|
|
|
|
[MenuItem("Fog Volume/Create Primitive/Fog Volume Primitive Box")]
|
|
[MenuItem("GameObject/Create Other/Fog Volume Primitive/Box")]
|
|
static public void CreateFogVolumePrimitiveBox()
|
|
{
|
|
GameObject FogVolumePrimitive = GameObject.CreatePrimitive(PrimitiveType.Cube);
|
|
//Icon stuff
|
|
//Texture Icon = Resources.Load("FogVolumePrimitiveIcon") as Texture;
|
|
//Icon.hideFlags = HideFlags.HideAndDontSave;
|
|
// var editorGUI = typeof(EditorGUIUtility);
|
|
// var bindingFlags = BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.NonPublic;
|
|
//var args = new object[] { FogVolumePrimitive, Icon };
|
|
//editorGUI.InvokeMember("SetIconForObject", bindingFlags, null, null, args);
|
|
|
|
FogVolumePrimitive.name = "Fog Volume Primitive Box";
|
|
|
|
FogVolumePrimitive.GetComponent<BoxCollider>().isTrigger = true;
|
|
|
|
FogVolumePrimitive.GetComponent<Renderer>().shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
|
|
FogVolumePrimitive.GetComponent<Renderer>().receiveShadows = false;
|
|
FogVolumePrimitive.GetComponent<Renderer>().reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off;
|
|
FogVolumePrimitive.GetComponent<Renderer>().lightProbeUsage = UnityEngine.Rendering.LightProbeUsage.Off;
|
|
Selection.activeObject = FogVolumePrimitive;
|
|
if (UnityEditor.SceneView.currentDrawingSceneView) UnityEditor.SceneView.currentDrawingSceneView.MoveToView(FogVolumePrimitive.transform);
|
|
FogVolumePrimitive.AddComponent<FogVolumePrimitive>();
|
|
}
|
|
|
|
|
|
[MenuItem("Fog Volume/Create Primitive/Fog Volume Primitive Sphere")]
|
|
[MenuItem("GameObject/Create Other/Fog Volume Primitive/Sphere")]
|
|
static public void CreateFogVolumePrimitiveSphere()
|
|
{
|
|
GameObject FogVolumePrimitive = GameObject.CreatePrimitive(PrimitiveType.Sphere);
|
|
//Icon stuff
|
|
//Texture Icon = Resources.Load("FogVolumePrimitiveIcon") as Texture;
|
|
//Icon.hideFlags = HideFlags.HideAndDontSave;
|
|
// var editorGUI = typeof(EditorGUIUtility);
|
|
// var bindingFlags = BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.NonPublic;
|
|
//var args = new object[] { FogVolumePrimitive, Icon };
|
|
//editorGUI.InvokeMember("SetIconForObject", bindingFlags, null, null, args);
|
|
|
|
FogVolumePrimitive.name = "Fog Volume Primitive Sphere";
|
|
|
|
FogVolumePrimitive.GetComponent<SphereCollider>().isTrigger = true;
|
|
|
|
FogVolumePrimitive.GetComponent<Renderer>().shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
|
|
FogVolumePrimitive.GetComponent<Renderer>().receiveShadows = false;
|
|
FogVolumePrimitive.GetComponent<Renderer>().reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off;
|
|
FogVolumePrimitive.GetComponent<Renderer>().lightProbeUsage = UnityEngine.Rendering.LightProbeUsage.Off;
|
|
Selection.activeObject = FogVolumePrimitive;
|
|
if (UnityEditor.SceneView.currentDrawingSceneView) UnityEditor.SceneView.currentDrawingSceneView.MoveToView(FogVolumePrimitive.transform);
|
|
FogVolumePrimitive.AddComponent<FogVolumePrimitive>();
|
|
}
|
|
}
|
|
#endif
|