Files
Liubing\LB 3d8d4d18f3 first commit
先修复一下,错误的场景

删除不必要的钓场资产

修复into场景

update:更新meta文件,修复报错

update:修复资源

修复第一章节建造

修复建造第三章

update:删除多余内容

update:更新README.md

update:还原图标

update:更新README

update:更新配置
2026-04-28 02:17:22 +08:00

145 lines
4.5 KiB
C#

using System;
using UnityEditor;
using UnityEngine;
namespace Coffee.UISoftMaskInternal
{
[Serializable]
public struct MinMax01
{
[SerializeField]
private float m_Min;
[SerializeField]
private float m_Max;
public MinMax01(float min, float max)
{
m_Min = Mathf.Clamp01(Mathf.Min(min, max));
m_Max = Mathf.Clamp01(Mathf.Max(min, max));
}
public float min
{
get => m_Min;
set
{
m_Min = Mathf.Clamp01(value);
m_Max = Mathf.Max(value, m_Max);
}
}
public float max
{
get => m_Max;
set
{
m_Max = Mathf.Clamp01(value);
m_Min = Mathf.Min(value, m_Min);
}
}
public float average => (m_Max + m_Min) * 0.5f;
public bool Approximately(MinMax01 other)
{
return Mathf.Approximately(m_Min, other.m_Min) && Mathf.Approximately(m_Max, other.m_Max);
}
}
#if UNITY_EDITOR
[CustomPropertyDrawer(typeof(MinMax01))]
public class MinMaxRangeDrawer : PropertyDrawer
{
private const float k_NumWidth = 50;
private const float k_Space = 5;
private SerializedProperty _max;
private SerializedProperty _min;
private static bool IsSingleLine(GUIContent label)
{
return EditorGUIUtility.wideMode || label == null || string.IsNullOrEmpty(label.text);
}
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
{
return IsSingleLine(label) ? 18 : 36;
}
public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label)
{
EditorGUI.BeginProperty(position, label, prop);
if (_min == null)
{
prop.Next(true);
_min = prop.Copy();
prop.Next(true);
_max = prop.Copy();
}
if (IsSingleLine(label))
{
position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label);
}
else
{
EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label);
var indent = (EditorGUI.indentLevel + 1) * 15f;
position = new Rect(position.x + indent, position.y + 18, position.width - indent, 16);
}
var min = _min.floatValue;
var max = _max.floatValue;
if (Draw(position, ref min, ref max))
{
_min.floatValue = min;
_max.floatValue = max;
}
EditorGUI.EndProperty();
}
public static bool Draw(Rect position, ref float minValue, ref float maxValue)
{
var indentLevel = EditorGUI.indentLevel;
EditorGUI.indentLevel = 0;
EditorGUI.BeginChangeCheck();
var rect = new Rect(position.x, position.y, k_NumWidth, position.height);
minValue = Mathf.Clamp(EditorGUI.FloatField(rect, minValue), 0, maxValue);
rect.x += rect.width + k_Space;
rect.width = position.width - k_NumWidth * 2 - k_Space * 2;
EditorGUI.MinMaxSlider(rect, ref minValue, ref maxValue, 0, 1);
rect.x += rect.width + k_Space;
rect.width = k_NumWidth;
maxValue = Mathf.Clamp(EditorGUI.FloatField(rect, maxValue), minValue, 1);
EditorGUI.indentLevel = indentLevel;
return EditorGUI.EndChangeCheck();
}
public static bool DrawLayout(GUIContent label, ref float minValue, ref float maxValue)
{
Rect position;
if (IsSingleLine(label))
{
position = EditorGUILayout.GetControlRect(true, 18f);
position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label);
}
else
{
position = EditorGUILayout.GetControlRect(true, 36f);
EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label);
var indent = (EditorGUI.indentLevel + 1) * 15f;
position = new Rect(position.x + indent, position.y + 18, position.width - indent, 16);
}
return Draw(position, ref minValue, ref maxValue);
}
}
#endif
}