This commit is contained in:
2025-11-14 18:44:06 +08:00
parent 10156da245
commit 22e867d077
7013 changed files with 2572882 additions and 1804 deletions

View File

@@ -0,0 +1,134 @@
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.TextCore;
using UnityEngine.UIElements;
[CustomEditor(typeof(DrawShadowMask))]
public class DrawShadowMaskEditor : Editor
{
DrawShadowMask inst;
Ray ray;
RaycastHit hit;
float brushSize;
Vector2 centerPosRecord;
private void OnEnable()
{
inst = (DrawShadowMask)target;
}
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
//
GUILayout.Space(100);
GUILayout.BeginHorizontal();
if (GUILayout.Button("Clear", GUILayout.Height(50)))
{
Clear();
}
if (GUILayout.Button("Fill", GUILayout.Height(50)))
{
Fill();
}
GUILayout.EndHorizontal();
}
void Clear()
{
for (int y = 0; y <= inst.shadowMaskTex.height; ++y)
{
for (int x = 0; x <= inst.shadowMaskTex.width; ++x)
{
inst.shadowMaskTex.SetPixel(x, y, Color.black);
}
}
inst.shadowMaskTex.Apply();
}
void Fill()
{
for (int y = 0; y <= inst.shadowMaskTex.height; ++y)
{
for (int x = 0; x <= inst.shadowMaskTex.width; ++x)
{
inst.shadowMaskTex.SetPixel(x, y, Color.white);
}
}
inst.shadowMaskTex.Apply();
}
private void OnSceneGUI()
{
if(!inst.shadowMaskTex && !inst.mat)
{
return;
}
if(Selection.activeObject == inst.gameObject)
{
HandleUtility.AddDefaultControl(GUIUtility.GetControlID(FocusType.Passive));
//
ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
if (Physics.Raycast(ray, out hit, 2000, 1 << LayerMask.NameToLayer("DrawHelp")))
{
if (Event.current.type == EventType.MouseDown && Event.current.button == 0)
{
inst.isDrawing = true;
}
brushSize = inst.brushSize;
if (inst.isDrawing)
{
Handles.color = Color.green;
//
Vector2Int centerPos = new Vector2Int((int)(hit.textureCoord.x * inst.shadowMaskTex.width), (int)(hit.textureCoord.y * inst.shadowMaskTex.height));
if(centerPosRecord != centerPos)
{
centerPosRecord = centerPos;
//
Handles.color = Color.green;
Handles.Label(hit.point, centerPos.ToString());
for (int y = -(int)brushSize; y <= (int)brushSize; ++y)
{
for (int x = -(int)brushSize; x <= (int)brushSize; ++x)
{
Vector2Int rang = new Vector2Int(x, y) + centerPos;
if (rang.x > 0 && rang.x < inst.shadowMaskTex.width || rang.y > 0 && rang.y < inst.shadowMaskTex.height)
{
Color col = inst.shadowMaskTex.GetPixel(rang.x, rang.y);
float dis = 1 - 1 / Vector2.Distance(centerPos, rang);
inst.shadowMaskTex.SetPixel(rang.x, rang.y, Color.Lerp(inst.color, col, dis * (1 - inst.color.a)));
}
}
}
inst.shadowMaskTex.Apply();
}
}
if (Event.current.type == EventType.MouseUp && Event.current.button == 0)
{
inst.isDrawing = false;
Handles.color = Color.red;
}
Handles.DrawWireDisc(hit.point, Vector3.up, brushSize * 0.1f);
SceneView.RepaintAll();
}
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1428c98fe082328409e0df97f7c68c82
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: