2026-03-28 인벤토리 90%
This commit is contained in:
87
Assets/HighlightPlus/Editor/TransparentWithDepth.cs
Normal file
87
Assets/HighlightPlus/Editor/TransparentWithDepth.cs
Normal file
@@ -0,0 +1,87 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
using UnityEditor;
|
||||
|
||||
namespace HighlightPlus {
|
||||
|
||||
public class TransparentWithDepth {
|
||||
|
||||
static Material bmDepthOnly;
|
||||
|
||||
|
||||
[MenuItem("GameObject/Effects/Highlight Plus/Add Depth To Transparent Object", false, 100)]
|
||||
static void AddDepthOption () {
|
||||
Renderer renderer = GetRenderer();
|
||||
if (renderer == null)
|
||||
return;
|
||||
|
||||
if (!EditorUtility.DisplayDialog("Add Depth To Transparent Object", "This option will force the transparent object to write to the depth buffer by adding a new special material to the renderer (existing materials are preserved) so it can occlude and allow See-Through effect.\nOnly use on transparent objects.\n\nProceed?", "Yes", "No")) {
|
||||
return;
|
||||
}
|
||||
|
||||
Material[] materials = renderer.sharedMaterials;
|
||||
for (int k = 0; k < materials.Length; k++) {
|
||||
if (materials[k] == bmDepthOnly) {
|
||||
EditorUtility.DisplayDialog("Depth Support", "Already set! Nothing to do.", "Ok");
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (materials == null) {
|
||||
renderer.sharedMaterial = bmDepthOnly;
|
||||
}
|
||||
else {
|
||||
List<Material> newMaterials = new List<Material>(materials);
|
||||
newMaterials.Insert(0, bmDepthOnly);
|
||||
renderer.sharedMaterials = newMaterials.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
[MenuItem("GameObject/Effects/Highlight Plus/Remove Depth Compatibility", false, 101)]
|
||||
static void RemoveDepthOption () {
|
||||
|
||||
Renderer renderer = GetRenderer();
|
||||
if (renderer == null)
|
||||
return;
|
||||
|
||||
Material[] materials = renderer.sharedMaterials;
|
||||
for (int k = 0; k < materials.Length; k++) {
|
||||
if (materials[k] == bmDepthOnly) {
|
||||
List<Material> newMaterials = new List<Material>(renderer.sharedMaterials);
|
||||
newMaterials.RemoveAt(k);
|
||||
renderer.sharedMaterials = newMaterials.ToArray();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
EditorUtility.DisplayDialog("Depth Support", "This object was not previously modified! Nothing to do.", "Ok");
|
||||
}
|
||||
|
||||
|
||||
static Renderer GetRenderer () {
|
||||
|
||||
if (Selection.activeGameObject == null) {
|
||||
EditorUtility.DisplayDialog("Depth Support", "This option can only be used on GameObjects.", "Ok");
|
||||
return null;
|
||||
}
|
||||
Renderer renderer = Selection.activeGameObject.GetComponent<Renderer>();
|
||||
if (renderer == null) {
|
||||
EditorUtility.DisplayDialog("Depth Support", "This option can only be used on GameObjects with a Renderer component attached.", "Ok");
|
||||
return null;
|
||||
}
|
||||
|
||||
if (bmDepthOnly == null) {
|
||||
bmDepthOnly = Resources.Load<Material>("HighlightPlus/HighlightPlusDepthWrite");
|
||||
if (bmDepthOnly == null) {
|
||||
EditorUtility.DisplayDialog("Depth Support", "HighlightPlusDepthWrite material not found!", "Ok");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
return renderer;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user