推进度!

This commit is contained in:
SoulliesOfficial
2025-11-25 21:49:03 -05:00
parent f0c06f0337
commit ad4948207e
1068 changed files with 418853 additions and 1047 deletions

View File

@@ -0,0 +1,58 @@
// using UnityEditor;
// using UnityEditor.PackageManager;
// using UnityEditor.PackageManager.Requests;
// using UnityEngine;
//
// namespace UISplineRendererEditor
// {
// internal static class DependencyResolver
// {
// static AddRequest splineRequest;
// static AddRequest collectionsRequest;
// static AddRequest mathematicsRequest;
// static AddRequest burstRequest;
// [InitializeOnLoadMethod]
// static void Install()
// {
// bool requested = false;
// #if !ENABLE_SPLINES
// splineRequest = Client.Add("com.unity.splines");
// requested = true;
// #endif
// #if !ENABLE_COLLECTIONS
// collectionsRequest = Client.Add("com.unity.collections");
// requested = true;
// #endif
// #if !ENABLE_MATHEMATICS
// mathematicsRequest = Client.Add("com.unity.mathematics");
// requested = true;
// #endif
// #if !ENABLE_BURST
// burstRequest = Client.Add("com.unity.burst");
// requested = true;
// #endif
// if(requested) EditorApplication.update += Progress;
// }
//
// static void Progress()
// {
// if(splineRequest != null) PrintResult(splineRequest);
// if(collectionsRequest != null) PrintResult(collectionsRequest);
// if(mathematicsRequest != null) PrintResult(mathematicsRequest);
// if(burstRequest != null) PrintResult(burstRequest);
//
// EditorApplication.update -= Progress;
// }
//
// static void PrintResult(AddRequest request)
// {
// if (request.IsCompleted)
// {
// if (request.Status == StatusCode.Success)
// Debug.Log("Installed: " + request.Result.packageId);
// else if (request.Status >= StatusCode.Failure)
// Debug.Log(request.Error.message);
// }
// }
// }
// }

View File

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

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 4b66ad526b1cb0c49b3364a6b4884ccd
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

@@ -0,0 +1,127 @@
fileFormatVersion: 2
guid: c3499b63a6dc8424f8ca9c03466edd59
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 12
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 2
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,76 @@
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" editor-extension-mode="True">
<uie:ObjectField label="Spline Container" binding-path="splineContainer" name="splineContainer" type="UnityEngine.Splines.SplineContainer, Unity.Splines" />
<uie:ObjectField label="Material" binding-path="m_Material" name="material" type="UnityEngine.Material, UnityEngine.CoreModule" />
<ui:Toggle label="Recursive Material" binding-path="_recursiveMaterial" name="recursivceMaterial" tooltip="If true, this renderer&apos;s material value will also be applied to startImages and endImages." style="padding-left: 20px;" />
<uie:ColorField label="Color" value="#FFFFFFFF" name="color" binding-path="m_Color" />
<uie:GradientField label="Color Gradient" name="colorGradient" binding-path="_colorGradient" />
<ui:Toggle label="Recursive Color" binding-path="_recursiveColor" name="recursivceColor" tooltip="If true, this renderer&apos;s color will also be applied to startImages and endImages." style="padding-left: 20px;" />
<ui:Toggle label="Raycast Target" binding-path="m_RaycastTarget" name="raycastTarget" />
<ui:Foldout text="Raycast Padding" name="raycastPaddingFoldout" value="false">
<ui:Vector4Field binding-path="m_RaycastPadding" name="raycastPadding" />
</ui:Foldout>
<ui:Toggle label="Maskable" binding-path="m_Maskable" name="maskable" />
<ui:VisualElement style="flex-grow: 1; background-color: rgba(0, 0, 0, 0); height: 20px; max-height: 20px; min-height: 20px;" />
<ui:FloatField label="Width" value="6" binding-path="_width" name="width" tooltip="Width of this spline renderer" is-delayed="false" />
<uie:CurveField label="Width Curve" binding-path="_widthCurve" tooltip="Multiplier for the width of this spline. [0..1]" name="widthCurve" />
<ui:VisualElement name="lineTextureArea" style="background-color: rgba(0, 0, 0, 0);">
<ui:Toggle label="Keep Zero Z" binding-path="_keepZeroZ" name="keepZeroZ" tooltip="Keep all z position and transform.localPosition.z as 0. This keep the spline flatten on canvas." />
<ui:Toggle label="Keep Billboard" binding-path="_keepBillboard" name="keepBillboard" tooltip="Keep all normals of the vertices pointing towards the screen direction. This ensures that the spline is rendered as a billboard, even if you set odd rotations to knots." />
<ui:VisualElement style="flex-grow: 1; background-color: rgba(0, 0, 0, 0); height: 20px; max-height: 20px; min-height: 20px;" />
<ui:VisualElement name="presetButtons" style="flex-grow: 1; flex-direction: row; flex-shrink: 0;">
<ui:Label text="Line Texture Preset" style="-unity-text-align: middle-left; align-self: stretch;" />
<ui:Button text="Default (Anti-Alised)" display-tooltip-when-elided="true" name="default" tooltip="Default anti-aliased texture. This is simple trick using a slightly blurred image." style="height: 30px; max-height: 30px; min-height: 30px; flex-grow: 1;" />
<ui:Button text="UV Test" display-tooltip-when-elided="true" name="uvTest" tooltip="Cheker texture with numbers. This is useful if you want to see how UVs are applied." style="height: 30px; max-height: 30px; min-height: 30px; flex-grow: 1;" />
<ui:Button text="Custom" display-tooltip-when-elided="true" name="custom" tooltip="Custom texture. If you set the texture property via script, it&apos;s automatically changed." style="height: 30px; max-height: 30px; min-height: 30px; flex-grow: 1;" />
</ui:VisualElement>
<uie:ObjectField label="Texture" binding-path="m_Texture" name="texture" type="UnityEngine.Texture, UnityEngine.CoreModule" style="padding-left: 20px;" />
<ui:SliderInt picking-mode="Ignore" label="Resolution" value="2" high-value="10" low-value="1" name="resolution" binding-path="_resolution" show-input-field="true" />
<ui:Label tabindex="-1" text="Vertex Count" display-tooltip-when-elided="true" name="vertexCount" tooltip="Unity vertex limit is 65,000. keep vertex count lower than this." style="padding-left: 20px; -unity-text-align: middle-left;" />
<ui:MinMaxSlider picking-mode="Ignore" label="Clip Range" min-value="0" max-value="1" low-limit="0" high-limit="1" name="clipRange" binding-path="_clipRange" />
<ui:EnumField label="UV Mode" type="UI_Spline_Renderer.UVMode, UISplineRenderer" binding-path="_uvMode" name="uvMode" />
</ui:VisualElement>
<ui:VisualElement name="startImageArea" style="flex-grow: 1; background-color: rgba(0, 0, 0, 0);">
<ui:VisualElement style="flex-grow: 1; background-color: rgba(0, 0, 0, 0); height: 20px; max-height: 20px; min-height: 20px;" />
<ui:Vector2Field label="UV Multiplier" binding-path="_uvMultiplier" name="uvMultiplier" x="1" y="1" />
<ui:Vector2Field label="UV Offset" binding-path="_uvOffset" name="uvOffset" tooltip="Line textures UV offset. You can make simple texture animations using this property. " />
<ui:VisualElement name="presetButtons" style="flex-grow: 1; flex-shrink: 0; flex-direction: row;">
<ui:Label text="Start Image Preset" style="-unity-text-align: middle-left; align-self: stretch;" />
<ui:VisualElement name="vert" style="flex-grow: 1; background-color: rgba(0, 0, 0, 0); justify-content: space-around;">
<ui:VisualElement name="hor1" style="flex-grow: 1; background-color: rgba(0, 0, 0, 0); flex-direction: row; height: 30px; max-height: 30px; min-height: 30px;">
<ui:Button text="None" display-tooltip-when-elided="true" name="none" style="flex-grow: 1;" />
<ui:Button text="Triangle" display-tooltip-when-elided="true" name="triangle" style="flex-grow: 1;" />
<ui:Button text="Arrow" display-tooltip-when-elided="true" name="arrow" style="flex-grow: 1;" />
</ui:VisualElement>
<ui:VisualElement name="hor2" style="flex-grow: 1; background-color: rgba(0, 0, 0, 0); flex-direction: row; height: 30px; max-height: 30px; min-height: 30px;">
<ui:Button text="Empty Circle" display-tooltip-when-elided="true" name="emptyCircle" style="flex-grow: 1;" />
<ui:Button text="Filled Circle" display-tooltip-when-elided="true" name="filledCircle" style="flex-grow: 1;" />
<ui:Button text="Custom" display-tooltip-when-elided="true" name="custom" style="flex-grow: 1;" />
</ui:VisualElement>
</ui:VisualElement>
</ui:VisualElement>
<uie:ObjectField label="Start Image Sprite" binding-path="_startImageSprite" name="sprite" type="UnityEngine.Sprite, UnityEngine.CoreModule" style="padding-left: 20px;" />
<ui:FloatField label="Start Image Size" value="32" binding-path="_startImageSize" name="size" style="padding-left: 20px;" />
<ui:FloatField label="Start Image Offset" value="0" binding-path="_startImageOffset" name="offset" tooltip="Offset from first point of spline. If the value is greater than 0, it moves along the spline. Otherwise, it moves backward relative to current rotation." style="padding-left: 20px;" />
</ui:VisualElement>
<ui:VisualElement name="endImageArea" style="flex-grow: 1; background-color: rgba(0, 0, 0, 0);">
<ui:VisualElement style="flex-grow: 1; background-color: rgba(0, 0, 0, 0); height: 20px; max-height: 20px; min-height: 20px;" />
<ui:VisualElement name="presetButtons" style="flex-grow: 1; flex-shrink: 0; flex-direction: row;">
<ui:Label text="End Image Preset" style="-unity-text-align: middle-left; align-self: stretch;" />
<ui:VisualElement name="vert" style="flex-grow: 1; background-color: rgba(0, 0, 0, 0); justify-content: space-around;">
<ui:VisualElement name="hor1" style="flex-grow: 1; background-color: rgba(0, 0, 0, 0); flex-direction: row; height: 30px; max-height: 30px; min-height: 30px;">
<ui:Button text="None" display-tooltip-when-elided="true" name="none" style="flex-grow: 1;" />
<ui:Button text="Triangle" display-tooltip-when-elided="true" name="triangle" style="flex-grow: 1;" />
<ui:Button text="Arrow" display-tooltip-when-elided="true" name="arrow" style="flex-grow: 1;" />
</ui:VisualElement>
<ui:VisualElement name="hor2" style="flex-grow: 1; background-color: rgba(0, 0, 0, 0); flex-direction: row; height: 30px; max-height: 30px; min-height: 30px;">
<ui:Button text="Empty Circle" display-tooltip-when-elided="true" name="emptyCircle" style="flex-grow: 1;" />
<ui:Button text="Filled Circle" display-tooltip-when-elided="true" name="filledCircle" style="flex-grow: 1;" />
<ui:Button text="Custom" display-tooltip-when-elided="true" name="custom" style="flex-grow: 1;" />
</ui:VisualElement>
</ui:VisualElement>
</ui:VisualElement>
<uie:ObjectField label="End Image Sprite" binding-path="_endImageSprite" name="sprite" type="UnityEngine.Sprite, UnityEngine.CoreModule" style="padding-left: 20px;" />
<ui:FloatField label="End Image Size" value="32" binding-path="_endImageSize" name="size" style="padding-left: 20px;" />
<ui:FloatField label="End Image Offset" value="0" binding-path="_endImageOffset" name="offset" tooltip="Offset from last point of spline. If the value is smaller than 0, it moves along the spline. Otherwise, it moves forward relative to current rotation." style="padding-left: 20px;" />
</ui:VisualElement>
</ui:UXML>

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 3d080aacdb57b754ea02423382b3c18e
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}

View File

@@ -0,0 +1,40 @@
{
"name": "UISplineRenderer.Editor",
"rootNamespace": "UISplineRendererEditor",
"references": [
"GUID:21d1eb854b91ade49bc69a263d12bee2",
"GUID:8f24f501fa8e1fb48a03f1d7e6d03db4"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [
{
"name": "com.unity.splines",
"expression": "",
"define": "ENABLE_SPLINES"
},
{
"name": "com.unity.collections",
"expression": "",
"define": "ENABLE_COLLECTIONS"
},
{
"name": "com.unity.mathematics",
"expression": "",
"define": "ENABLE_MATHEMATICS"
},
{
"name": "com.unity.burst",
"expression": "",
"define": "ENABLE_BURST"
}
],
"noEngineReferences": false
}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: ba3c2b61e54e2994595f1bd021287b42
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,583 @@
using System;
using UI_Spline_Renderer;
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.Splines;
using UnityEngine.UIElements;
namespace UISplineRendererEditor
{
[CustomEditor(typeof(UISplineRenderer))]
[CanEditMultipleObjects]
public class UISplineRendererEditor : UnityEditor.Editor
{
UISplineRenderer _target;
ObjectField _splineContainerField;
ObjectField _materialField;
ObjectField _textureField;
Button _defaultLineTextureButton;
Button _uvTestLineTextureButton;
Button _customLineTextureButton;
Toggle _keepZeroZField;
Toggle _keepBillboardField;
EnumField _uvModeField;
SliderInt _resolutionSlider;
Label _vertexCountField;
ObjectField _startImageSpriteField;
FloatField _startImageSizeField;
FloatField _startImageOffsetField;
Button _noneStartImageButton;
Button _triangleStartImageButton;
Button _arrowStartImageButton;
Button _emptyCircleStartImageButton;
Button _filledCircleStartImageButton;
Button _customStartImageButton;
ObjectField _endImageSpriteField;
FloatField _endImageSizeField;
FloatField _endImageOffsetField;
Button _noneEndImageButton;
Button _triangleEndImageButton;
Button _arrowEndImageButton;
Button _emptyCircleEndImageButton;
Button _filledCircleEndImageButton;
Button _customEndImageButton;
bool _shouldUpdateStartEndImages;
UISplineRendererSettings settings => UISplineRendererSettings.Instance;
void OnEnable()
{
if (_target == null) _target = target as UISplineRenderer;
Spline.Changed += SplineChangeCallback;
SplineContainer.SplineAdded += SplineContainerChangeCallback;
SplineContainer.SplineRemoved += SplineContainerChangeCallback;
EditorApplication.update += _delayed_update_vertex_count;
void _delayed_update_vertex_count()
{
UpdateVertexCount();
EditorApplication.update -= UpdateVertexCount;
}
}
void OnDisable()
{
Spline.Changed -= SplineChangeCallback;
SplineContainer.SplineAdded -= SplineContainerChangeCallback;
SplineContainer.SplineRemoved -= SplineContainerChangeCallback;
}
public override void OnInspectorGUI()
{
serializedObject.Update();
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(serializedObject.FindProperty("_splineContainer"));
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(serializedObject.FindProperty("_fitPosition"));
EditorGUI.indentLevel--;
EditorGUILayout.PropertyField(serializedObject.FindProperty("m_Material"));
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(serializedObject.FindProperty("_recursiveMaterial"));
EditorGUI.indentLevel--;
EditorGUILayout.PropertyField(serializedObject.FindProperty("m_Color"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("_colorGradient"));
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(serializedObject.FindProperty("_recursiveColor"));
EditorGUI.indentLevel--;
EditorGUILayout.PropertyField(serializedObject.FindProperty("m_RaycastTarget"));
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(serializedObject.FindProperty("m_RaycastPadding"));
EditorGUI.indentLevel--;
EditorGUILayout.PropertyField(serializedObject.FindProperty("m_Maskable"));
EditorGUILayout.Space();
EditorGUILayout.PropertyField(serializedObject.FindProperty("_width"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("_widthCurve"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("_keepZeroZ"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("_keepBillboard"));
EditorGUILayout.Space();
EditorGUI.BeginChangeCheck();
var lineTexturePreset = EnumButtonField("Line Texture Preset", Enum.GetNames(typeof(LineTexturePreset)),
(int)_target.lineTexturePreset);
if(EditorGUI.EndChangeCheck())
{
_target.lineTexturePreset = (LineTexturePreset)lineTexturePreset;
}
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(serializedObject.FindProperty("m_Texture"));
EditorGUI.indentLevel--;
EditorGUILayout.PropertyField(serializedObject.FindProperty("_smooth"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("_roundEnds"));
EditorGUI.BeginChangeCheck();
var resolution = serializedObject.FindProperty("_resolution");
EditorGUILayout.IntSlider(resolution, 1, 20);
if (EditorGUI.EndChangeCheck())
{
_target.resolution = resolution.intValue;
}
EditorGUI.indentLevel++;
EditorGUILayout.LabelField("Vertex Count", _target.vertexCount.ToString());
EditorGUI.indentLevel--;
var clipRangeSP = serializedObject.FindProperty("_clipRange");
var clipRange = clipRangeSP.vector2Value;
EditorGUILayout.MinMaxSlider("Clip Range", ref clipRange.x, ref clipRange.y, 0, 1);
clipRangeSP.vector2Value = clipRange;
EditorGUILayout.LabelField($"min: {clipRange.x} | max: {clipRange.y}");
EditorGUILayout.PropertyField(serializedObject.FindProperty("_uvMode"));
EditorGUILayout.Space();
EditorGUILayout.PropertyField(serializedObject.FindProperty("_uvMultiplier"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("_uvOffset"));
EditorGUILayout.Space();
EditorGUI.BeginChangeCheck();
var startImagePreset = EnumButtonField("Start Image Preset", Enum.GetNames(typeof(StartEndImagePreset)),
(int)_target.startImagePreset, 3);
if (EditorGUI.EndChangeCheck())
{
_target.startImagePreset = (StartEndImagePreset)startImagePreset;
}
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(serializedObject.FindProperty("_startImageSprite"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("_startImageSize"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("_startImageOffsetMode"));
if(_target.startImageOffsetMode == OffsetMode.Distance)
EditorGUILayout.PropertyField(serializedObject.FindProperty("_startImageOffset"));
else if(_target.startImageOffsetMode == OffsetMode.Normalized)
EditorGUILayout.PropertyField(serializedObject.FindProperty("_normalizedStartImageOffset"));
EditorGUI.indentLevel--;
EditorGUILayout.Space();
EditorGUI.BeginChangeCheck();
var endImagePreset = EnumButtonField("End Image Preset", Enum.GetNames(typeof(StartEndImagePreset)),
(int)_target.endImagePreset, 3);
if(EditorGUI.EndChangeCheck())
{
_target.endImagePreset = (StartEndImagePreset)endImagePreset;
}
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(serializedObject.FindProperty("_endImageSprite"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("_endImageSize"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("_endImageOffsetMode"));
if(_target.endImageOffsetMode == OffsetMode.Distance)
EditorGUILayout.PropertyField(serializedObject.FindProperty("_endImageOffset"));
else if(_target.endImageOffsetMode == OffsetMode.Normalized)
EditorGUILayout.PropertyField(serializedObject.FindProperty("_normalizedEndImageOffset"));
EditorGUI.indentLevel--;
if (EditorGUI.EndChangeCheck())
{
EditorUtility.SetDirty(target);
serializedObject.ApplyModifiedProperties();
_target.UpdateRaycastTargetRect();
foreach (var o in targets)
{
var renderer = o as UISplineRenderer;
renderer.UpdateStartEndImages(true);
renderer.UpdateStartEndImages(false);
}
}
}
int EnumButtonField(string label, string[] names, int selected, int lineChange = 0)
{
EditorGUILayout.BeginHorizontal();
GUILayout.Label(label);
EditorGUILayout.BeginVertical();
EditorGUILayout.BeginHorizontal();
for(var i = 0; i < names.Length; i ++)
{
if (i > 0 && lineChange > 0 && i % lineChange == 0)
{
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
}
if (i == selected) GUI.color = new Color(2,2,2);
if (GUILayout.Button(names[i], GUILayout.Height(30)))
{
selected = i;
}
GUI.color = Color.white;
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.EndVertical();
EditorGUILayout.EndHorizontal();
return selected;
}
// public override VisualElement CreateInspectorGUI()
// {
// var asset = Resources.Load<VisualTreeAsset>("UISplineRenderer Inspector");
// var tree = asset.CloneTree();
//
// _splineContainerField = tree.Q<ObjectField>("splineContainer");
// _splineContainerField.SetEnabled(false);
//
// _materialField = tree.Q<ObjectField>("material");
// _materialField.RegisterValueChangedCallback(e =>
// {
// _target.material = e.newValue as Material;
// });
//
// _keepZeroZField = tree.Q<Toggle>("keepZeroZ");
// _keepZeroZField.RegisterValueChangedCallback(e =>
// {
// _target.UpdateStartEndImages(true);
// _target.UpdateStartEndImages(false);
// });
// _keepBillboardField = tree.Q<Toggle>("keepBillboard");
// _keepBillboardField.RegisterValueChangedCallback(e =>
// {
// _target.UpdateStartEndImages(true);
// _target.UpdateStartEndImages(false);
// });
//
// var lineTextureArea = tree.Q<VisualElement>("lineTextureArea");
// _textureField = lineTextureArea.Q<ObjectField>("texture");
//
// var textureButtons = tree.Q<VisualElement>("presetButtons");
// _defaultLineTextureButton = textureButtons.Q<Button>("default");
// _uvTestLineTextureButton = textureButtons.Q<Button>("uvTest");
// _customLineTextureButton = textureButtons.Q<Button>("custom");
//
// _defaultLineTextureButton.clicked += () => OnLineTexturePresetChanged(LineTexturePreset.Default);
// _uvTestLineTextureButton.clicked += () => OnLineTexturePresetChanged(LineTexturePreset.UVTest);
// _customLineTextureButton.clicked += () => OnLineTexturePresetChanged(LineTexturePreset.Custom);
//
// OnLineTexturePresetChanged(_target.lineTexturePreset);
//
// _uvModeField = lineTextureArea.Q<EnumField>("uvMode");
// _uvModeField.tooltip = "Tile - Texture is tiled along spline length. The wrap mode of the texture should be Repeat\n\n" +
// "Repeat per Segment - Texture is placed per segment(based on spline knots). The wrap mode of the texture should be Repeat\n\n" +
// "Stretch - Texture is stretched along spline.";
//
//
// _vertexCountField = lineTextureArea.Q<Label>("vertexCount");
// _resolutionSlider = lineTextureArea.Q<SliderInt>("resolution");
// _resolutionSlider.RegisterValueChangedCallback(e =>
// {
// _target.resolution = e.newValue;
// UpdateVertexCount();
// });
// UpdateVertexCount();
//
// var clipRangeSlider = lineTextureArea.Q<MinMaxSlider>("clipRange");
// clipRangeSlider.RegisterValueChangedCallback(e =>
// {
// UpdateVertexCount();
// });
//
// // init start images
// var startImageArea = tree.Q<VisualElement>("startImageArea");
// _startImageSpriteField = startImageArea.Q<ObjectField>("sprite");
// _startImageSpriteField.RegisterValueChangedCallback(e =>
// {
// _target.UpdateStartEndImages(true);
// });
//
// _noneStartImageButton = startImageArea.Q<Button>("none");
// _triangleStartImageButton = startImageArea.Q<Button>("triangle");
// _arrowStartImageButton = startImageArea.Q<Button>("arrow");
// _emptyCircleStartImageButton = startImageArea.Q<Button>("emptyCircle");
// _filledCircleStartImageButton = startImageArea.Q<Button>("filledCircle");
// _customStartImageButton = startImageArea.Q<Button>("custom");
//
// _noneStartImageButton.clicked += () => OnStartImagePresetChanged(StartEndImagePreset.None);
// _triangleStartImageButton.clicked += () => OnStartImagePresetChanged(StartEndImagePreset.Triangle);
// _arrowStartImageButton.clicked += () => OnStartImagePresetChanged(StartEndImagePreset.Arrow);
// _emptyCircleStartImageButton.clicked += () => OnStartImagePresetChanged(StartEndImagePreset.EmptyCircle);
// _filledCircleStartImageButton.clicked += () => OnStartImagePresetChanged(StartEndImagePreset.FilledCircle);
// _customStartImageButton.clicked += () => OnStartImagePresetChanged(StartEndImagePreset.Custom);
//
// _startImageSizeField = startImageArea.Q<FloatField>("size");
// _startImageSizeField.RegisterValueChangedCallback(e =>
// {
// _target.UpdateStartEndImages(true);
// });
//
// _startImageOffsetField = startImageArea.Q<FloatField>("offset");
// _startImageOffsetField.RegisterValueChangedCallback(e =>
// {
// _target.UpdateStartEndImages(true);
// });
//
// OnStartImagePresetChanged(_target.startImagePreset);
//
//
// // init end images
// var endImageArea = tree.Q<VisualElement>("endImageArea");
// _endImageSpriteField = endImageArea.Q<ObjectField>("sprite");
// _endImageSpriteField.RegisterValueChangedCallback(e =>
// {
// _target.UpdateStartEndImages(false);
// });
//
// _noneEndImageButton = endImageArea.Q<Button>("none");
// _triangleEndImageButton = endImageArea.Q<Button>("triangle");
// _arrowEndImageButton = endImageArea.Q<Button>("arrow");
// _emptyCircleEndImageButton = endImageArea.Q<Button>("emptyCircle");
// _filledCircleEndImageButton = endImageArea.Q<Button>("filledCircle");
// _customEndImageButton = endImageArea.Q<Button>("custom");
//
// _noneEndImageButton.clicked += () => OnEndImagePresetChanged(StartEndImagePreset.None);
// _triangleEndImageButton.clicked += () => OnEndImagePresetChanged(StartEndImagePreset.Triangle);
// _arrowEndImageButton.clicked += () => OnEndImagePresetChanged(StartEndImagePreset.Arrow);
// _emptyCircleEndImageButton.clicked += () => OnEndImagePresetChanged(StartEndImagePreset.EmptyCircle);
// _filledCircleEndImageButton.clicked += () => OnEndImagePresetChanged(StartEndImagePreset.FilledCircle);
// _customEndImageButton.clicked += () => OnEndImagePresetChanged(StartEndImagePreset.Custom);
//
//
// OnEndImagePresetChanged(_target.endImagePreset);
// _endImageSizeField = endImageArea.Q<FloatField>("size");
// _endImageSizeField.RegisterValueChangedCallback(e =>
// {
// _target.UpdateStartEndImages(false);
// });
//
// _endImageOffsetField = endImageArea.Q<FloatField>("offset");
// _endImageOffsetField.RegisterValueChangedCallback(e =>
// {
// _target.UpdateStartEndImages(false);
// });
//
//
// return tree;
// }
void OnLineTexturePresetChanged(LineTexturePreset preset)
{
switch (preset)
{
case LineTexturePreset.Default:
_defaultLineTextureButton.style.backgroundColor = Color.gray;
_uvTestLineTextureButton.style.backgroundColor = StyleKeyword.Null;
_customLineTextureButton.style.backgroundColor = StyleKeyword.Null;
_textureField.value = settings.defaultLineTexture;
// _textureField.SetEnabled(false);
// if not initialized yet
if (_target.texture == null)
{
_target.texture = settings.defaultLineTexture;
}
break;
case LineTexturePreset.UVTest:
_defaultLineTextureButton.style.backgroundColor = StyleKeyword.Null;
_uvTestLineTextureButton.style.backgroundColor = Color.gray;
_customLineTextureButton.style.backgroundColor = StyleKeyword.Null;
_textureField.value = settings.uvTestLineTexture;
// _textureField.SetEnabled(false);
break;
case LineTexturePreset.Custom:
_defaultLineTextureButton.style.backgroundColor = StyleKeyword.Null;
_uvTestLineTextureButton.style.backgroundColor = StyleKeyword.Null;
_customLineTextureButton.style.backgroundColor = Color.gray;
_textureField.SetEnabled(true);
break;
default:
throw new ArgumentOutOfRangeException(nameof(preset), preset, null);
}
}
void OnStartImagePresetChanged(StartEndImagePreset preset)
{
switch (preset)
{
case StartEndImagePreset.None:
_noneStartImageButton.style.backgroundColor = Color.gray;
_triangleStartImageButton.style.backgroundColor = StyleKeyword.Null;
_arrowStartImageButton.style.backgroundColor = StyleKeyword.Null;
_emptyCircleStartImageButton.style.backgroundColor = StyleKeyword.Null;
_filledCircleStartImageButton.style.backgroundColor = StyleKeyword.Null;
_customStartImageButton.style.backgroundColor = StyleKeyword.Null;
_startImageSpriteField.value = null;
// _startImageSpriteField.SetEnabled(false);
break;
case StartEndImagePreset.Triangle:
_noneStartImageButton.style.backgroundColor = StyleKeyword.Null;
_triangleStartImageButton.style.backgroundColor = Color.gray;
_arrowStartImageButton.style.backgroundColor = StyleKeyword.Null;
_emptyCircleStartImageButton.style.backgroundColor = StyleKeyword.Null;
_filledCircleStartImageButton.style.backgroundColor = StyleKeyword.Null;
_customStartImageButton.style.backgroundColor = StyleKeyword.Null;
_startImageSpriteField.value = settings.triangleHead;
// _startImageSpriteField.SetEnabled(false);
break;
case StartEndImagePreset.Arrow:
_noneStartImageButton.style.backgroundColor = StyleKeyword.Null;
_triangleStartImageButton.style.backgroundColor = StyleKeyword.Null;
_arrowStartImageButton.style.backgroundColor = Color.gray;
_emptyCircleStartImageButton.style.backgroundColor = StyleKeyword.Null;
_filledCircleStartImageButton.style.backgroundColor = StyleKeyword.Null;
_customStartImageButton.style.backgroundColor = StyleKeyword.Null;
_startImageSpriteField.value = settings.arrowHead;
// _startImageSpriteField.SetEnabled(false);
break;
case StartEndImagePreset.EmptyCircle:
_noneStartImageButton.style.backgroundColor = StyleKeyword.Null;
_triangleStartImageButton.style.backgroundColor = StyleKeyword.Null;
_arrowStartImageButton.style.backgroundColor = StyleKeyword.Null;
_emptyCircleStartImageButton.style.backgroundColor = Color.gray;
_filledCircleStartImageButton.style.backgroundColor = StyleKeyword.Null;
_customStartImageButton.style.backgroundColor = StyleKeyword.Null;
_startImageSpriteField.value = settings.emptyCircleHead;
// _startImageSpriteField.SetEnabled(false);
break;
case StartEndImagePreset.FilledCircle:
_noneStartImageButton.style.backgroundColor = StyleKeyword.Null;
_triangleStartImageButton.style.backgroundColor = StyleKeyword.Null;
_arrowStartImageButton.style.backgroundColor = StyleKeyword.Null;
_emptyCircleStartImageButton.style.backgroundColor = StyleKeyword.Null;
_filledCircleStartImageButton.style.backgroundColor = Color.gray;
_customStartImageButton.style.backgroundColor = StyleKeyword.Null;
_startImageSpriteField.value = settings.filledCircleHead;
// _startImageSpriteField.SetEnabled(false);
break;
case StartEndImagePreset.Custom:
_noneStartImageButton.style.backgroundColor = StyleKeyword.Null;
_triangleStartImageButton.style.backgroundColor = StyleKeyword.Null;
_arrowStartImageButton.style.backgroundColor = StyleKeyword.Null;
_emptyCircleStartImageButton.style.backgroundColor = StyleKeyword.Null;
_filledCircleStartImageButton.style.backgroundColor = StyleKeyword.Null;
_customStartImageButton.style.backgroundColor = Color.gray;
_startImageSpriteField.SetEnabled(true);
break;
default:
throw new ArgumentOutOfRangeException(nameof(preset), preset, null);
}
}
void OnEndImagePresetChanged(StartEndImagePreset preset)
{
switch (preset)
{
case StartEndImagePreset.None:
_noneEndImageButton.style.backgroundColor = Color.gray;
_triangleEndImageButton.style.backgroundColor = StyleKeyword.Null;
_arrowEndImageButton.style.backgroundColor = StyleKeyword.Null;
_emptyCircleEndImageButton.style.backgroundColor = StyleKeyword.Null;
_filledCircleEndImageButton.style.backgroundColor = StyleKeyword.Null;
_customEndImageButton.style.backgroundColor = StyleKeyword.Null;
_endImageSpriteField.value = null;
// _endImageSpriteField.SetEnabled(false);
break;
case StartEndImagePreset.Triangle:
_noneEndImageButton.style.backgroundColor = StyleKeyword.Null;
_triangleEndImageButton.style.backgroundColor = Color.gray;
_arrowEndImageButton.style.backgroundColor = StyleKeyword.Null;
_emptyCircleEndImageButton.style.backgroundColor = StyleKeyword.Null;
_filledCircleEndImageButton.style.backgroundColor = StyleKeyword.Null;
_customEndImageButton.style.backgroundColor = StyleKeyword.Null;
_endImageSpriteField.value = settings.triangleHead;
// _endImageSpriteField.SetEnabled(false);
break;
case StartEndImagePreset.Arrow:
_noneEndImageButton.style.backgroundColor = StyleKeyword.Null;
_triangleEndImageButton.style.backgroundColor = StyleKeyword.Null;
_arrowEndImageButton.style.backgroundColor = Color.gray;
_emptyCircleEndImageButton.style.backgroundColor = StyleKeyword.Null;
_filledCircleEndImageButton.style.backgroundColor = StyleKeyword.Null;
_customEndImageButton.style.backgroundColor = StyleKeyword.Null;
_endImageSpriteField.value = settings.arrowHead;
// _endImageSpriteField.SetEnabled(false);
break;
case StartEndImagePreset.EmptyCircle:
_noneEndImageButton.style.backgroundColor = StyleKeyword.Null;
_triangleEndImageButton.style.backgroundColor = StyleKeyword.Null;
_arrowEndImageButton.style.backgroundColor = StyleKeyword.Null;
_emptyCircleEndImageButton.style.backgroundColor = Color.gray;
_filledCircleEndImageButton.style.backgroundColor = StyleKeyword.Null;
_customEndImageButton.style.backgroundColor = StyleKeyword.Null;
_endImageSpriteField.value = settings.emptyCircleHead;
// _endImageSpriteField.SetEnabled(false);
break;
case StartEndImagePreset.FilledCircle:
_noneEndImageButton.style.backgroundColor = StyleKeyword.Null;
_triangleEndImageButton.style.backgroundColor = StyleKeyword.Null;
_arrowEndImageButton.style.backgroundColor = StyleKeyword.Null;
_emptyCircleEndImageButton.style.backgroundColor = StyleKeyword.Null;
_filledCircleEndImageButton.style.backgroundColor = Color.gray;
_customEndImageButton.style.backgroundColor = StyleKeyword.Null;
_endImageSpriteField.value = settings.filledCircleHead;
// _endImageSpriteField.SetEnabled(false);
break;
case StartEndImagePreset.Custom:
_noneEndImageButton.style.backgroundColor = StyleKeyword.Null;
_triangleEndImageButton.style.backgroundColor = StyleKeyword.Null;
_arrowEndImageButton.style.backgroundColor = StyleKeyword.Null;
_emptyCircleEndImageButton.style.backgroundColor = StyleKeyword.Null;
_filledCircleEndImageButton.style.backgroundColor = StyleKeyword.Null;
_customEndImageButton.style.backgroundColor = Color.gray;
_endImageSpriteField.SetEnabled(true);
break;
default:
throw new ArgumentOutOfRangeException(nameof(preset), preset, null);
}
}
void UpdateVertexCount()
{
if(_vertexCountField == null) return;
#if UNITY_2022_3_OR_NEWER
_vertexCountField.text = $"Vertex Count : {_target.vertexCount}";
#endif
}
void SplineChangeCallback(Spline spline, int idx, SplineModification modification)
{
for (int i = 0; i < _target.splineContainer.Splines.Count; i++)
{
if (_target.splineContainer.Splines[i] == spline)
{
UpdateVertexCount();
return;
}
}
}
void SplineContainerChangeCallback(SplineContainer container, int i)
{
if(container == _target.splineContainer) UpdateVertexCount();
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 30338a4923984065905dd45640ab4853
timeCreated: 1690032615