啊啊啊FE你这需求真难做啊啊啊

This commit is contained in:
SoulliesOfficial
2025-07-03 18:14:17 -04:00
parent ffb97c6d28
commit 6533997d59
21 changed files with 22026 additions and 16139 deletions

View File

@@ -25,6 +25,9 @@ namespace Dreamteck.Splines
public enum MotionType { None, UseParticleSystem, FollowForward, FollowBackward, ByNormal, ByNormalRandomized }
public enum Wrap { Default, Loop }
public float width = 10f;
public Vector3 extendDirection = Vector3.right;
[HideInInspector]
public bool pauseWhenNotVisible = false;
[HideInInspector]
@@ -47,9 +50,11 @@ namespace Dreamteck.Splines
public float minCycles = 1f;
[HideInInspector]
public float maxCycles = 1f;
private Dictionary<uint, Particle> _particleDataMap = new Dictionary<uint, Particle>();
private ParticleSystem.Particle[] _particles = new ParticleSystem.Particle[0];
private Particle[] _controllers = new Particle[0];
//private float[] _initialOffset = new float[0];
//private Particle[] _controllers = new Particle[0];
private int _particleCount = 0;
private int _birthIndex = 0;
private List<Vector4> _customParticleData = new List<Vector4>();
@@ -67,43 +72,52 @@ namespace Dreamteck.Splines
}
int maxParticles = _particleSystem.main.maxParticles;
if (_particles.Length != maxParticles)
{
_particles = new ParticleSystem.Particle[maxParticles];
_customParticleData = new List<Vector4>(maxParticles);
Particle[] newControllers = new Particle[maxParticles];
for (int i = 0; i < newControllers.Length; i++)
if (maxParticles > _particleDataMap.Count)
{
if (i >= _controllers.Length) break;
newControllers[i] = _controllers[i];
_particleDataMap = new Dictionary<uint, Particle>(maxParticles);
}
_controllers = newControllers;
}
_particleCount = _particleSystem.GetParticles(_particles);
_particleSystem.GetCustomParticleData(_customParticleData, ParticleSystemCustomData.Custom1);
HashSet<uint> activeSeeds = new HashSet<uint>();
bool isLocal = _particleSystem.main.simulationSpace == ParticleSystemSimulationSpace.Local;
Transform particleSystemTransform = _particleSystem.transform;
for (int i = 0; i < _particleCount; i++)
{
if (_controllers[i] == null)
uint seed = _particles[i].randomSeed; // 获取粒子的唯一ID
activeSeeds.Add(seed); // 记录存活的粒子
if (isLocal) TransformParticle(ref _particles[i], particleSystemTransform);
// 使用字典来检查粒子是否是新生儿这是100%可靠的
if (!_particleDataMap.ContainsKey(seed))
{
_controllers[i] = new Particle();
OnParticleBorn(i, seed);
}
if (isLocal)
HandleParticle(i, seed);
if (isLocal) InverseTransformParticle(ref _particles[i], particleSystemTransform);
}
// 清理字典中已经死亡的粒子数据,防止内存无限增长
if (activeSeeds.Count < _particleDataMap.Count)
{
List<uint> keysToRemove = new List<uint>();
foreach (var key in _particleDataMap.Keys)
{
TransformParticle(ref _particles[i], particleSystemTransform);
if (!activeSeeds.Contains(key)) keysToRemove.Add(key);
}
if (_customParticleData[i].w < 1f)
foreach (var key in keysToRemove)
{
OnParticleBorn(i);
}
HandleParticle(i);
if (isLocal)
{
InverseTransformParticle(ref _particles[i], particleSystemTransform);
_particleDataMap.Remove(key);
}
}
@@ -134,39 +148,45 @@ namespace Dreamteck.Splines
if (_particleSystem == null) _particleSystem = GetComponent<ParticleSystem>();
}
void HandleParticle(int index)
void HandleParticle(int index, uint seed)
{
if (!_particleDataMap.TryGetValue(seed, out Particle particleData)) return; // 安全检查
float lifePercent = _particles[index].remainingLifetime / _particles[index].startLifetime;
if (motionType == MotionType.FollowBackward || motionType == MotionType.FollowForward || motionType == MotionType.None)
{
Evaluate(_controllers[index].GetSplinePercent(wrapMode, _particles[index], motionType), ref evalResult);
Evaluate(particleData.GetSplinePercent(wrapMode, _particles[index], motionType), ref evalResult);
Vector3 resultRight = evalResult.right;
_particles[index].position = evalResult.position;
_particles[index].position = evalResult.position + extendDirection * particleData.initialOffset;
if (apply3DRotation)
{
_particles[index].rotation3D = evalResult.rotation.eulerAngles;
}
Vector2 finalOffset = offset;
if (volumetric)
{
if (motionType != MotionType.None)
{
finalOffset += Vector2.Lerp(_controllers[index].startOffset, _controllers[index].endOffset, 1f - lifePercent);
finalOffset += Vector2.Lerp(particleData.startOffset, particleData.endOffset, 1f - lifePercent);
finalOffset.x *= scale.x;
finalOffset.y *= scale.y;
} else
{
finalOffset += _controllers[index].startOffset;
finalOffset += particleData.startOffset;
}
}
_particles[index].position += resultRight * (finalOffset.x * evalResult.size) + evalResult.up * (finalOffset.y * evalResult.size);
_particles[index].position += resultRight * (finalOffset.x * evalResult.size)
+ evalResult.up * (finalOffset.y * evalResult.size);
_particles[index].velocity = evalResult.forward;
_particles[index].startColor = _controllers[index].startColor * evalResult.color;
_particles[index].startColor = particleData.startColor * evalResult.color;
}
}
private void OnParticleBorn(int index)
private void OnParticleBorn(int index, uint seed)
{
Particle newParticleData = new Particle();
Vector4 custom = _customParticleData[index];
custom.w = 1;
_customParticleData[index] = custom;
@@ -187,22 +207,29 @@ namespace Dreamteck.Splines
case EmitPoint.Ordered: percent = expectedParticleCount > 0 ? (float)_birthIndex / expectedParticleCount : 0f; break;
}
Evaluate(percent, ref evalResult);
_controllers[index].startColor = _particles[index].startColor;
_controllers[index].startPercent = percent;
newParticleData.startColor = _particles[index].startColor;
newParticleData.startPercent = percent;
_controllers[index].cycleSpeed = Random.Range(minCycles, maxCycles);
newParticleData.cycleSpeed = Random.Range(minCycles, maxCycles);
Vector2 circle = Vector2.zero;
if (volumetric)
{
if (emitFromShell) circle = Quaternion.AngleAxis(Random.Range(0f, 360f), Vector3.forward) * Vector2.right;
else circle = Random.insideUnitCircle;
}
_controllers[index].startOffset = circle * 0.5f;
_controllers[index].endOffset = Random.insideUnitCircle * 0.5f;
Vector3 right = Vector3.Cross(evalResult.forward, evalResult.up);
_particles[index].position = evalResult.position + right * _controllers[index].startOffset.x * evalResult.size * scale.x + evalResult.up * _controllers[index].startOffset.y * evalResult.size * scale.y;
newParticleData.initialOffset = Random.Range(-width, width);
newParticleData.startOffset = circle * 0.5f;
newParticleData.endOffset = Random.insideUnitCircle * 0.5f;
_particleDataMap.Add(seed, newParticleData);
if (!(motionType == MotionType.FollowForward || motionType == MotionType.FollowBackward))
{
Vector3 right = Vector3.Cross(evalResult.forward, evalResult.up);
_particles[index].position = evalResult.position +
right * newParticleData.startOffset.x * evalResult.size * scale.x +
evalResult.up * newParticleData.startOffset.y * evalResult.size * scale.y;
}
float forceX = _particleSystem.forceOverLifetime.x.constantMax;
float forceY = _particleSystem.forceOverLifetime.y.constantMax;
@@ -232,11 +259,12 @@ namespace Dreamteck.Splines
_particles[index].position += forceDistance;
_particles[index].velocity = normal * startSpeed + new Vector3(forceX, forceY, forceZ) * time;
}
HandleParticle(index);
//HandleParticle(index);
}
public class Particle
{
internal float initialOffset;
internal Vector2 startOffset = Vector2.zero;
internal Vector2 endOffset = Vector2.zero;
internal float cycleSpeed = 0f;

View File

@@ -27,6 +27,8 @@ namespace Dreamteck.Splines.Editor
SerializedProperty wrapMode = serializedObject.FindProperty("wrapMode");
SerializedProperty minCycles = serializedObject.FindProperty("minCycles");
SerializedProperty maxCycles = serializedObject.FindProperty("maxCycles");
SerializedProperty width = serializedObject.FindProperty("width");
SerializedProperty extendDirection = serializedObject.FindProperty("extendDirection");
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(_particleSystem, new GUIContent("Particle System"));
@@ -38,6 +40,9 @@ namespace Dreamteck.Splines.Editor
EditorGUILayout.PropertyField(pauseWhenNotVisible);
EditorGUILayout.PropertyField(emitPoint);
EditorGUILayout.PropertyField(offset);
EditorGUILayout.PropertyField(width);
if (width.floatValue < 0f) width.floatValue = 0f;
EditorGUILayout.PropertyField(extendDirection);
EditorGUILayout.PropertyField(applyRotation);
EditorGUILayout.PropertyField(volumetric);
if (volumetric.boolValue)

File diff suppressed because it is too large Load Diff

View File

@@ -1,77 +1,143 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: MMBPR_BlueSquares
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: ed68763c04a44fa49a0aa2316c3d46ee, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 0.049
- _Glossiness: 0.5
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &-3164646337227227263
MonoBehaviour:
m_ObjectHideFlags: 11
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 7
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: MMBPR_BlueSquares
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords:
- _ALPHAPREMULTIPLY_ON
- _EMISSION
- _NORMALMAP
- _OCCLUSIONMAP
- _SPECULAR_SETUP
- _SURFACE_TYPE_TRANSPARENT
m_InvalidKeywords: []
m_LightmapFlags: 2
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: 3000
stringTagMap:
RenderType: Transparent
disabledShaderPasses:
- DepthOnly
- SHADOWCASTER
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BaseMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BumpMap:
m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_Lightmaps:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_LightmapsInd:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_ShadowMasks:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _AlphaClip: 0
- _AlphaToMask: 0
- _Blend: 0
- _BlendModePreserveSpecular: 1
- _BumpScale: 1
- _ClearCoatMask: 0
- _ClearCoatSmoothness: 0
- _Cull: 2
- _Cutoff: 0.5
- _DetailAlbedoMapScale: 1
- _DetailNormalMapScale: 1
- _DstBlend: 10
- _DstBlendAlpha: 10
- _EnvironmentReflections: 1
- _GlossMapScale: 0.049
- _Glossiness: 0.5
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _QueueOffset: 0
- _ReceiveShadows: 1
- _Smoothness: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _SrcBlendAlpha: 1
- _Surface: 1
- _UVSec: 0
- _WorkflowMode: 0
- _ZWrite: 0
m_Colors:
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 1, g: 1, b: 1, a: 1}
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
m_BuildTextureStacks: []

View File

@@ -34,6 +34,8 @@ MonoBehaviour:
type: 3}
defaultTrackMaterial: {fileID: 2100000, guid: 2424431729f1047c4b42f971c2cdd2b6,
type: 2}
particleTracker: {fileID: 7924065371675278968, guid: 0b3b8df64bc2b4a4fabd753f7e9189e7,
type: 3}
sampler: {fileID: 8976586735561836907, guid: 6191c60211a05c04ea9265f89896f4d0, type: 3}
trail: {fileID: 4801226466239889825, guid: a21d9cdd0e3454527bec5f2b0e9a9cae, type: 3}
defaultTrailMaterial: {fileID: 2100000, guid: 8af6dd7f0725540388b84a4697118bb9,
@@ -51,6 +53,8 @@ MonoBehaviour:
type: 3}
triggerHint: {fileID: 7671065637303904002, guid: da8eca5e2d8a648e586955315c267d64,
type: 3}
defaultParticleMaterial: {fileID: 10301, guid: 0000000000000000f000000000000000,
type: 0}
bloomEffect: {fileID: 845605030242152257, guid: 1ea739ef6f1bf4e87835b0f554587451,
type: 3}
cameraShakeEffect: {fileID: 5030288017655597913, guid: 46175bea33f87445bbec1389a53da172,

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -10121,74 +10121,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2137073449}
m_CullTransparentMesh: 0
--- !u!1001 &524415195869365186
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 4428011038987230051, guid: 3f216541647c185428ca5581509954d8,
type: 3}
propertyPath: m_Name
value: DiamondRipple
objectReference: {fileID: 0}
- target: {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8064170251032554610, guid: 3f216541647c185428ca5581509954d8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 3f216541647c185428ca5581509954d8, type: 3}
--- !u!222 &4337614253254700757
CanvasRenderer:
m_ObjectHideFlags: 0
@@ -17076,7 +17008,7 @@ MonoBehaviour:
m_TargetGraphic: {fileID: 4337614255116277774}
m_HandleRect: {fileID: 4337614255116277775}
m_Direction: 2
m_Value: 0
m_Value: 1
m_Size: 1
m_NumberOfSteps: 0
m_OnValueChanged:
@@ -17675,7 +17607,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 20, y: 0}
m_AnchoredPosition: {x: 20, y: -0.00021362305}
m_SizeDelta: {x: 40, y: 0}
m_Pivot: {x: 0.5, y: 1}
--- !u!1 &4337614255290428457
@@ -17737,74 +17669,6 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_HorizontalFit: 0
m_VerticalFit: 2
--- !u!1001 &9028405135598409605
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2899945975172320258, guid: 85c3e9578b45a414bb6507f90e48720a,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5988426910569796711, guid: 85c3e9578b45a414bb6507f90e48720a,
type: 3}
propertyPath: m_Name
value: CircleRipple
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 85c3e9578b45a414bb6507f90e48720a, type: 3}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
@@ -17815,5 +17679,3 @@ SceneRoots:
- {fileID: 250681945}
- {fileID: 398605647}
- {fileID: 1050672441}
- {fileID: 524415195869365186}
- {fileID: 9028405135598409605}

View File

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

View File

@@ -0,0 +1,247 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Dreamteck.Splines;
using Ichni.Editor;
using Ichni.RhythmGame.Beatmap;
using UnityEngine;
using UnityEngine.Serialization;
namespace Ichni.RhythmGame
{
public partial class ParticleTracker : GameElement
{
public Track track;
public ParticleController particleController;
public ParticleSystem particle;
public float playTime;
public float stopTime;
public float width;
public float density;
public bool prewarm;
public bool isAutoOrient;
public Vector3 particleRotation;
public string themeBundleName;
public string materialName;
public static ParticleTracker GenerateElement(string elementName, Guid id, List<string> tags,
bool isFirstGenerated, Track track, string themeBundleName, string materialName,
float playTime, float stopTime,
float width, float density, bool prewarm, bool isAutoOrient, Vector3 particleRotation)
{
ParticleTracker particleTracker = Instantiate(EditorManager.instance.basePrefabs.particleTracker, track.transform)
.GetComponent<ParticleTracker>();
particleTracker.Initialize(elementName, id, tags, isFirstGenerated, track);
particleTracker.track = track;
particleTracker.particleController.spline = track.trackPathSubmodule.path;
particleTracker.playTime = playTime;
particleTracker.stopTime = stopTime;
particleTracker.themeBundleList = ThemeBundleManager.instance.loadedThemeBundleList.ConvertAll(x => x.themeBundleName);
particleTracker.materialNameList = new List<string>();
particleTracker.SetParticleMaterial(themeBundleName, materialName);
particleTracker.SetParticleSettings(width, density, prewarm, isAutoOrient, particleRotation);
return particleTracker;
}
public void SetParticleMaterial(string themeBundleName, string materialName)
{
Material material = ThemeBundleManager.instance.GetObject<Material>(themeBundleName, materialName) ??
EditorManager.instance.basePrefabs.defaultParticleMaterial;
particle.GetComponent<Renderer>().material = Instantiate(material);
}
public void SetParticleSettings(float width, float density, bool prewarm, bool isAutoOrient, Vector3 particleRotation)
{
this.width = width;
this.density = density;
this.prewarm = prewarm;
this.isAutoOrient = isAutoOrient;
this.particleRotation = particleRotation;
SetWidth();
SetDensity();
SetAlignment();
}
}
public partial class ParticleTracker
{
private void Update()
{
float songTime = EditorManager.instance.songInformation.songTime;
if (playTime > songTime || stopTime < songTime)
{
particle.Stop();
}
else
{
if (!particle.isPlaying)
{
particle.Play();
}
}
}
public override void SaveBM()
{
matchedBM = new ParticleTracker_BM(elementName, elementGuid, tags,
parentElement.matchedBM as GameElement_BM,
playTime, stopTime, width, density, prewarm, isAutoOrient, particleRotation,
themeBundleName, materialName);
}
private List<string> themeBundleList;
private List<string> materialNameList;
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
Inspector inspectorMain = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Particle Tracker");
DynamicUISubcontainer particleSettings0 = container.GenerateSubcontainer(3);
inspector.GenerateInputField(this, particleSettings0, "Play Time", nameof(playTime));
inspector.GenerateInputField(this, particleSettings0, "Stop Time", nameof(stopTime));
inspector.GenerateInputField(this, particleSettings0, "Width", nameof(width)).AddListenerFunction(SetWidth);
inspector.GenerateInputField(this, particleSettings0, "Density", nameof(density)).AddListenerFunction(SetDensity);
inspector.GenerateToggle(this, particleSettings0, "Prewarm", nameof(prewarm)).AddListenerFunction(SetPrewarm);
inspector.GenerateToggle(this, particleSettings0, "Is Auto Orient", nameof(isAutoOrient)).AddListenerFunction(SetAlignment);
DynamicUISubcontainer particleSettings1 = container.GenerateSubcontainer(1);
inspector.GenerateVector3InputField(this, particleSettings1, "Particle Rotation", nameof(particleRotation)).AddListenerFunction(SetParticleRotation);
DynamicUISubcontainer materialSettings = container.GenerateSubcontainer(3);
var themeBundleDropdown =
inspector.GenerateDropdown(this, materialSettings, "Theme Bundle", themeBundleList, nameof(themeBundleName))
.AddListenerFunction(() => inspectorMain.SetInspector(this));
if (themeBundleName != String.Empty && ThemeBundleManager.instance.TryGetThemeBundle(themeBundleName, out ThemeBundle themeBundle))
{
materialNameList = themeBundle.assetList_GameObject.ConvertAll(x => x.name);
var objectNameDropdown =
inspector.GenerateDropdown(this, materialSettings, "Material Name", materialNameList, nameof(materialName))
.AddListenerFunction(() => inspectorMain.SetInspector(this));
}
else
{
var objectNameDropdown =
inspector.GenerateDropdown(this, materialSettings, "Material Name", new List<string>(), nameof(materialName));
objectNameDropdown.dropdown.interactable = false;
} // 如果没有选择主题包,则材质名称下拉框不可用
var setMaterialButton = inspector.GenerateButton(this, materialSettings, "Set Material", () =>
{
SetParticleMaterial(themeBundleName, materialName);
});
if (themeBundleName == String.Empty || materialName == String.Empty)
{
setMaterialButton.button.interactable = false;
}
}
}
public partial class ParticleTracker
{
private void SetWidth()
{
particleController.width = width;
particleController.Rebuild();
}
private void SetDensity()
{
var emission = particle.emission;
emission.rateOverTime = density;
}
private void SetPrewarm()
{
var mainModule = particle.main;
mainModule.prewarm = prewarm;
}
private void SetAlignment()
{
ParticleSystemRenderer particleSystemRenderer = particle.GetComponent<ParticleSystemRenderer>();
var mainModule = particle.main;
if (isAutoOrient)
{
particleSystemRenderer.alignment = ParticleSystemRenderSpace.View;
mainModule.startRotation3D = false; // 禁用3D旋转
}
else
{
particleSystemRenderer.alignment = ParticleSystemRenderSpace.Local;
mainModule.startRotation3D = true; // 启用3D旋转
SetParticleRotation();
}
}
private void SetParticleRotation()
{
var mainModule = particle.main;
mainModule.startRotationX = particleRotation.x;
mainModule.startRotationY = particleRotation.y;
mainModule.startRotationZ = particleRotation.z;
}
}
namespace Beatmap
{
public class ParticleTracker_BM : GameElement_BM
{
public float playTime;
public float stopTime;
public float width;
public float density;
public bool prewarm;
public bool isAutoOrient;
public Vector3 particleRotation;
public string materialThemeBundleName;
public string materialName;
public ParticleTracker_BM()
{
}
public ParticleTracker_BM(string elementName, Guid elementGuid, List<string> tags, GameElement_BM attachedElement,
float playTime, float stopTime,
float width, float density, bool prewarm, bool isAutoOrient, Vector3 particleRotation,
string materialThemeBundleName, string materialName)
: base(elementName, elementGuid, tags, attachedElement)
{
this.playTime = playTime;
this.stopTime = stopTime;
this.width = width;
this.density = density;
this.prewarm = prewarm;
this.isAutoOrient = isAutoOrient;
this.particleRotation = particleRotation;
this.materialThemeBundleName = materialThemeBundleName;
this.materialName = materialName;
}
public override void ExecuteBM()
{
matchedElement = ParticleTracker.GenerateElement(
elementName, elementGuid, tags, false,
GetElement(attachedElementGuid) as Track,
materialThemeBundleName, materialName,
playTime, stopTime, width, density, prewarm, isAutoOrient, particleRotation);
}
public override GameElement DuplicateBM(GameElement attached)
{
return ParticleTracker.GenerateElement(
elementName, Guid.NewGuid(), tags, false, attached as Track,
materialThemeBundleName, materialName,
playTime, stopTime, width, density, prewarm, isAutoOrient, particleRotation);
}
}
}
}

View File

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

View File

@@ -162,6 +162,13 @@ namespace Ichni.RhythmGame
var flickButton = inspector.GenerateButton(this, noteSubcontainer, "Flick",
() => { Flick.GenerateElement("New Flick", Guid.NewGuid(), new List<string>(), true, this, 0f, new List<Vector2>()); }); //Note Flick
var particleSubcontainer = generateContainer.GenerateSubcontainer(3);
var particleTrackerButton = inspector.GenerateButton(this, particleSubcontainer, "Particle Tracker",
() => { ParticleTracker.GenerateElement("New Particle Tracker", Guid.NewGuid(), new List<string>(), true, this,
string.Empty, string.Empty, 0, 1, 10, 10, true, true, Vector3.zero); }); //Particle Tracker
StandardInspectionElement.GenerateForTransform(this, generateContainer); //关于有Transform的元素
// var animationSubcontainer = generateContainer.GenerateSubcontainer(3);
// var displacementButton = inspector.GenerateButton(this, animationSubcontainer, "Displacement", () =>

View File

@@ -134,7 +134,14 @@ namespace Ichni.RhythmGame
protected void SetEnableEmission()
{
meshRenderer.material.SetInt("_Emission", enableEmission ? 1 : 0);
if (enableEmission)
{
meshRenderer.material.EnableKeyword("_EMISSION_ON");
}
else
{
meshRenderer.material.DisableKeyword("_EMISSION_ON");
}
}
protected void SetEnableZWrite()

View File

@@ -13,11 +13,13 @@ namespace Ichni.RhythmGame
[Title("基础预制体")] public GameObject emptyObject;
public GameObject elementFolder;
public GameObject gameCamera;
[Title("Track相关")] public GameObject track;
public GameObject trackDisplay;
public GameObject pathNode;
public Material defaultTrackMaterial;
public GameObject particleTracker;
public GameObject sampler;
[Title("Trail相关")] public GameObject trail;
@@ -27,11 +29,13 @@ namespace Ichni.RhythmGame
public GameObject stayNote;
public GameObject holdNote;
public GameObject flickNote;
[Title("Note 判定UI")] public GameObject fullscreenNearTimeHint;
public GameObject areaHint;
public GameObject triggerHint;
[Title("Effect相关")] public GameObject bloomEffect;
[Title("Effect相关")] public Material defaultParticleMaterial;
public GameObject bloomEffect;
public GameObject cameraShakeEffect;
public GameObject cameraTiltEffect;
public GameObject chromaticAberrationEffect;
@@ -53,6 +57,7 @@ namespace Ichni.RhythmGame
public GameObject stringListDropdown;
public GameObject baseColorPicker;
public GameObject emissionColorPicker;
[Title("DynamicUI相关-Composite")] public GameObject generalSecondaryWindow;
public GameObject compositeParameterWindow;
public GameObject inputFieldUnit;
@@ -64,6 +69,7 @@ namespace Ichni.RhythmGame
public GameObject gradientColorKeyUnit;
public GameObject gradientAlphaKeyUnit;
public GameObject stringIntPairUnit;
[Title("图形化动画编辑器")] public GameObject graphicalFlexibleFloatWindow;
//采音器

View File

@@ -2111,7 +2111,7 @@
"materialThemeBundleName" : "departure_to_multiverse",
"materialName" : "EnergyTrail0",
"enableEmission" : true,
"emissionIntensity" : 4,
"emissionIntensity" : 5,
"zWrite" : false,
"attachedElementGuid" : {
"value" : "7fd4dbfe-ed4a-4c45-8b54-9ce497808b5c"
@@ -3573,7 +3573,7 @@
"z" : 0
},
"originalScale" : {
"x" : 0.1,
"x" : 1,
"y" : 1,
"z" : 1
},
@@ -65524,6 +65524,12 @@
"startTime" : 28.8,
"endTime" : 32,
"animationCurveType" : 0
},{
"startValue" : 0,
"endValue" : 1,
"startTime" : 28.8,
"endTime" : 32,
"animationCurveType" : 0
}
]
},
@@ -73536,7 +73542,7 @@
"effectTime" : 0
},{
"__type" : "Ichni.RhythmGame.Beatmap.PixelateEffect_BM,Assembly-CSharp",
"duration" : 5,
"duration" : 2.5,
"bottomX" : 3,
"bottomY" : 180,
"intensityCurve" : {
@@ -73547,21 +73553,41 @@
"inTangent" : 0,
"outTangent" : 0
},{
"time" : 0.185,
"value" : 1,
"time" : 0.1225,
"value" : 0.9933333,
"inTangent" : -0.2222226,
"outTangent" : 0.2222226
},{
"time" : 0.1925,
"value" : 0.01,
"inTangent" : 0,
"outTangent" : -3.43269825
"outTangent" : 0
},{
"time" : 0.3175,
"value" : 0.9833333,
"inTangent" : -0.3555552,
"outTangent" : 0.3555552
},{
"time" : 0.405,
"value" : 0.006666667,
"inTangent" : 0,
"outTangent" : 0
},{
"time" : 0.5175,
"value" : 1,
"inTangent" : -0.2222226,
"outTangent" : -3.592717
},{
"time" : 1,
"value" : 0,
"inTangent" : 0,
"inTangent" : -0.1006292,
"outTangent" : 0
}
],
"preWrapMode" : 8,
"postWrapMode" : 8
},
"effectTime" : 5
"effectTime" : 2.5
}
],"Late":[

View File

@@ -85,7 +85,7 @@
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TrackPathSubmodule_BM,Assembly-CSharp",
"trackSpaceType" : 0,
"trackSpaceType" : 3,
"trackSamplingType" : 0,
"isClosed" : false,
"isShowingDisplay" : true,
@@ -115,9 +115,9 @@
},{
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
"originalPosition" : {
"x" : 0,
"x" : -8,
"y" : 0,
"z" : 10
"z" : 0
},
"originalEulerAngles" : {
"x" : 0,
@@ -175,9 +175,9 @@
},{
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
"originalPosition" : {
"x" : 10,
"y" : 0,
"z" : 30
"x" : 0,
"y" : 10,
"z" : 10
},
"originalEulerAngles" : {
"x" : 0,
@@ -203,8 +203,8 @@
},{
"__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp",
"originalBaseColor" : {
"r" : 1,
"g" : 1,
"r" : 0,
"g" : 0,
"b" : 1,
"a" : 1
},
@@ -222,7 +222,7 @@
},{
"__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp",
"isShowingSphere" : true,
"elementName" : "New Path Node",
"elementName" : "New path Node",
"tags" : [
],
@@ -235,9 +235,9 @@
},{
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
"originalPosition" : {
"x" : 10,
"x" : 0,
"y" : 0,
"z" : 20
"z" : 30
},
"originalEulerAngles" : {
"x" : 0,
@@ -646,7 +646,7 @@
},{
"__type" : "Ichni.RhythmGame.Beatmap.CrossTrackPoint_BM,Assembly-CSharp",
"trackSwitch" : {
"value" : 1,
"value" : 0,
"animations" : [
{
"value" : 0,
@@ -658,8 +658,8 @@
]
},
"trackPercent" : {
"value" : 0.201065734,
"currentAnimationIndex" : 1,
"value" : 1,
"currentAnimationIndex" : 0,
"animations" : [
{
"startValue" : 0,
@@ -679,6 +679,7 @@
"lastReturnType" : 1,
"returnType" : 1
},
"MotionAngles" : false,
"elementName" : "New Cross Track Point",
"tags" : [
@@ -1135,6 +1136,47 @@
"attachedElementGuid" : {
"value" : "2a6a8778-f83f-47ad-8cc3-2fa6a6add834"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.BackgroundSetter_BM,Assembly-CSharp",
"useSkybox" : true,
"skyboxThemeBundleName" : "basic",
"skyboxMaterialName" : "Skybox",
"backgroundSpriteName" : "Background",
"elementName" : "Background Setter",
"tags" : [
],
"elementGuid" : {
"value" : "b2d480f8-ee18-456f-a2e0-b6f29a52ca86"
},
"attachedElementGuid" : {
"value" : "00000000-0000-0000-0000-000000000000"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.ParticleTracker_BM,Assembly-CSharp",
"playTime" : 0,
"stopTime" : 10,
"width" : 10,
"density" : 100,
"prewarm" : true,
"isAutoOrient" : true,
"particleRotation" : {
"x" : 0,
"y" : 0,
"z" : 0
},
"materialThemeBundleName" : "",
"materialName" : "",
"elementName" : "New Particle Tracker",
"tags" : [
],
"elementGuid" : {
"value" : "7dbb4c90-d401-42b0-85d6-6aed1d3d1ef5"
},
"attachedElementGuid" : {
"value" : "266d9898-21fd-4a93-86b9-6166399a5e8f"
}
}
],
"attachedElementGuid" : {

View File

@@ -85,7 +85,7 @@
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TrackPathSubmodule_BM,Assembly-CSharp",
"trackSpaceType" : 0,
"trackSpaceType" : 3,
"trackSamplingType" : 0,
"isClosed" : false,
"isShowingDisplay" : true,
@@ -115,9 +115,9 @@
},{
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
"originalPosition" : {
"x" : 0,
"x" : -8,
"y" : 0,
"z" : 10
"z" : 0
},
"originalEulerAngles" : {
"x" : 0,
@@ -175,9 +175,9 @@
},{
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
"originalPosition" : {
"x" : 10,
"y" : 0,
"z" : 30
"x" : 0,
"y" : 10,
"z" : 10
},
"originalEulerAngles" : {
"x" : 0,
@@ -203,8 +203,8 @@
},{
"__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp",
"originalBaseColor" : {
"r" : 1,
"g" : 1,
"r" : 0,
"g" : 0,
"b" : 1,
"a" : 1
},
@@ -222,7 +222,7 @@
},{
"__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp",
"isShowingSphere" : true,
"elementName" : "New Path Node",
"elementName" : "New path Node",
"tags" : [
],
@@ -235,9 +235,9 @@
},{
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
"originalPosition" : {
"x" : 10,
"x" : 0,
"y" : 0,
"z" : 20
"z" : 30
},
"originalEulerAngles" : {
"x" : 0,
@@ -646,7 +646,7 @@
},{
"__type" : "Ichni.RhythmGame.Beatmap.CrossTrackPoint_BM,Assembly-CSharp",
"trackSwitch" : {
"value" : 1,
"value" : 0,
"animations" : [
{
"value" : 0,
@@ -658,8 +658,8 @@
]
},
"trackPercent" : {
"value" : 0.201065734,
"currentAnimationIndex" : 1,
"value" : 0,
"currentAnimationIndex" : 0,
"animations" : [
{
"startValue" : 0,
@@ -679,6 +679,7 @@
"lastReturnType" : 1,
"returnType" : 1
},
"MotionAngles" : false,
"elementName" : "New Cross Track Point",
"tags" : [
@@ -1151,6 +1152,31 @@
"attachedElementGuid" : {
"value" : "00000000-0000-0000-0000-000000000000"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.ParticleTracker_BM,Assembly-CSharp",
"playTime" : 0,
"stopTime" : 10,
"width" : 10,
"density" : 10,
"prewarm" : true,
"isAutoOrient" : true,
"particleRotation" : {
"x" : 0,
"y" : 0,
"z" : 0
},
"materialThemeBundleName" : "",
"materialName" : "",
"elementName" : "New Particle Tracker",
"tags" : [
],
"elementGuid" : {
"value" : "7dbb4c90-d401-42b0-85d6-6aed1d3d1ef5"
},
"attachedElementGuid" : {
"value" : "266d9898-21fd-4a93-86b9-6166399a5e8f"
}
}
],
"attachedElementGuid" : {

View File

@@ -0,0 +1,215 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &-1779936735614116135
MonoBehaviour:
m_ObjectHideFlags: 11
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 7
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: ShapeWaterfall
m_Shader: {fileID: 4800000, guid: abadec1812956184baeaef8d7cf924b6, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords:
- _EMISSION_ON
- _ENABLEEMISSION_ON
- _RECEIVESHADOWS_OFF
- _RECEIVE_SHADOWS_OFF
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _AfterPostProcessTexture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BaseMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _CameraColorTexture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _CameraOpaqueTexture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ShapeTexture:
m_Texture: {fileID: 2800000, guid: 66995b6b61aed864daa956ae255d7fee, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpeedDistortMap:
m_Texture: {fileID: 2800000, guid: 7f808d0c8608b954d8f20cb4132c3049, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Texture0:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _TextureOverlay:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _TextureOverlayMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _texcoord:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_Lightmaps:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_LightmapsInd:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_ShadowMasks:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints:
- _NBPostProcessFlags: 0
m_Floats:
- _Alpha: 1
- _AlphaClip: 0
- _AlphaCutoff: 0.5
- _AlphaToMask: 0
- _BackgroundAlpha: 0
- _BackgroundOpacity: 0.145
- _Blend: 0
- _BlendModePreserveSpecular: 1
- _BumpScale: 1
- _ClearCoatMask: 0
- _ClearCoatSmoothness: 0
- _Contrast: 1
- _Cull: 2
- _Cutoff: 0.5
- _DeSaturateIntensity: 0
- _Density: 8.7
- _DetailAlbedoMapScale: 1
- _DetailNormalMapScale: 1
- _DisappearEndDistance: 100
- _DisappearStartDistance: 50
- _DstBlend: 0
- _DstBlendAlpha: 0
- _Emission: 1
- _EnableEmission: 1
- _EnvironmentReflections: 1
- _Fade: 0.1
- _GlobalAlpha: 1
- _GlobalOpacity: 1
- _GlossMapScale: 0
- _Glossiness: 0
- _GlossyReflections: 0
- _GridScale: 1
- _InvertIntensity: 0
- _LineWidth: 0.05
- _MaxMoveSpeed: 10
- _MaxRotationSpeed: 10
- _Metallic: 0
- _MinMoveSpeed: 1
- _MinRotationSpeed: 0
- _OcclusionStrength: 1
- _Parallax: 0.005
- _PixelateStrength: 1
- _PixelateStrengthX: 320
- _PixelateStrengthY: 180
- _Plane: 0
- _QueueControl: 0
- _QueueOffset: 0
- _ReceiveShadows: 0
- _ShapeAlpha: 1
- _ShapeOpacity: 1
- _Smoothness: 0.5
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _SrcBlendAlpha: 1
- _Surface: 0
- _TextureOverlayIntensity: 0
- _WorkflowMode: 1
- _ZWrite: 1
- __dirty: 0
m_Colors:
- _BackgroundColor: {r: 0, g: 0, b: 0, a: 0}
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
- _ChromaticAberrationVector: {r: 1, g: 0, b: 0, a: 0}
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _CustomScreenCenter: {r: 0.5, g: 0.5, b: 0, a: 0}
- _EmissionColor: {r: 1, g: 0, b: 0, a: 1}
- _FlashColor: {r: 1, g: 1, b: 1, a: 1}
- _LineColor: {r: 1, g: 1, b: 1, a: 1}
- _MoveDirection: {r: 0, g: 0, b: 0, a: 0}
- _RadialBlurVec: {r: 1, g: 0, b: 0, a: 0}
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
- _SpeedDistortVec: {r: 0, g: 0, b: 0, a: 0}
- _SpeedDistortVec2: {r: 0, g: 0, b: 0, a: 0}
- _TextureOverlayAnim: {r: 0, g: 0, b: 0, a: 0}
- _VignetteColor: {r: 0, g: 0, b: 0, a: 1}
- _VignetteVec: {r: 1, g: 0, b: 0, a: 0}
m_BuildTextureStacks: []

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 84db5d745f29e924c92b143f052021a0
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,261 @@
// Made with Amplify Shader Editor
// Available at the Unity Asset Store - http://u3d.as/y3X
Shader "Gemini/GraphicWaterfall"
{
Properties
{
_ShapeTexture("Shape Texture", 2D) = "white" {}
_BackgroundColor("Background Color", Color) = (0,0,0,0)
_BackgroundOpacity("Background Opacity", Range( 0 , 1)) = 0.5
_MoveDirection("Move Direction", Vector) = (1,0,0,0)
_MinMoveSpeed("Min Move Speed", Float) = 0.1
_MaxMoveSpeed("Max Move Speed", Float) = 0.5
_MinRotationSpeed("Min Rotation Speed", Range( 0 , 10)) = 1
_MaxRotationSpeed("Max Rotation Speed", Range( 0 , 10)) = 5
_Density("Density", Range( 1 , 100)) = 10
_ShapeOpacity("Shape Opacity", Range( 0 , 1)) = 1
[Toggle]_EnableEmission("Enable Emission", Float) = 0
_EmissionColor("Emission Color", Color) = (1,1,1,1)
_GlobalOpacity("Global Opacity", Range( 0 , 1)) = 1
[HideInInspector] _texcoord( "", 2D ) = "white" {}
}
SubShader
{
Tags { "RenderType"="Transparent" "Queue"="Transparent" "DisableBatching"="True" }
LOD 100
CGINCLUDE
#pragma target 3.0
ENDCG
Blend SrcAlpha OneMinusSrcAlpha
Cull Off
ColorMask RGBA
ZWrite Off
ZTest LEqual
Pass
{
Name "Unlit"
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile _ ETC1_EXTERNAL_ALPHA
#include "UnityCG.cginc"
#pragma multi_compile _ ENABLEEMISSION_ON
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD0;
};
uniform sampler2D _ShapeTexture;
uniform float _Density;
uniform float4 _MoveDirection;
uniform float _MinMoveSpeed;
uniform float _MaxMoveSpeed;
uniform float _MinRotationSpeed;
uniform float _MaxRotationSpeed;
uniform float4 _BackgroundColor;
uniform float _BackgroundOpacity;
uniform float _ShapeOpacity;
uniform float _GlobalOpacity;
uniform float4 _EmissionColor;
v2f vert ( appdata v )
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
// https://www.ronja-tutorials.com/post/028-voronoi-noise/
// https://www.shadertoy.com/view/MslGD8
float2 random( float2 p )
{
return frac( sin( float2( dot( p, float2( 127.1, 311.7 ) ), dot( p, float2( 269.5, 183.3 ) ) ) ) * 43758.5453 );
}
fixed4 frag (v2f i ) : SV_Target
{
fixed4 finalColor;
//---------------------------------------------------------
// 4.1 - 创建网格 (Grid) 和单元格内部坐标 (Cell UV)
//---------------------------------------------------------
float2 mainUV = i.uv;
float2 tiledUV = mainUV * _Density;
float2 cellID = floor(tiledUV);
float2 cellUV = frac(tiledUV);
//---------------------------------------------------------
// 4.2 - 为每个单元格生成独立的随机值
//---------------------------------------------------------
float2 randomValue1 = random(cellID);
float2 randomValue2 = random(cellID + float2(1.2, 3.4));
float randomSpeed = lerp(_MinMoveSpeed, _MaxMoveSpeed, randomValue1.x);
float randomRotationSpeed = lerp(_MinRotationSpeed, _MaxRotationSpeed, randomValue1.y);
float randomPhase = randomValue2.x * 100.0;
//---------------------------------------------------------
// 4.3 - 实现独立的平滑移动与旋转 (核心)
//---------------------------------------------------------
// 计算移动
float localTime = _Time.y + randomPhase;
float2 movementOffset = (localTime * randomSpeed) * _MoveDirection.xy;
float2 panningUV = cellUV - movementOffset;
// 计算旋转
float rotationAngle = localTime * randomRotationSpeed;
float2 anchor = float2(0.5, 0.5);
float sinRot = sin(rotationAngle);
float cosRot = cos(rotationAngle);
float2x2 rotationMatrix = float2x2(cosRot, -sinRot, sinRot, cosRot);
float2 finalUV = mul(panningUV - anchor, rotationMatrix) + anchor;
//---------------------------------------------------------
// 4.4 - 最终采样与混合
//---------------------------------------------------------
float4 shapeSample = tex2D(_ShapeTexture, finalUV);
// 混合颜色
float3 mixedColor = lerp(_BackgroundColor.rgb, shapeSample.rgb, shapeSample.a);
// 混合透明度
float mixedOpacity = lerp(_BackgroundOpacity, _ShapeOpacity, shapeSample.a);
float finalOpacity = mixedOpacity * _GlobalOpacity;
// 处理发光
float3 emission = 0.0;
#ifdef ENABLEEMISSION_ON
emission = shapeSample.rgb * _EmissionColor.rgb * shapeSample.a;
#endif
finalColor = float4(mixedColor + emission, finalOpacity);
return finalColor;
}
ENDCG
}
}
CustomEditor "AmplifyShaderEditor.AmplifyShaderEditor"
}
/*ASEBEGIN
Version=19100
Node;AmplifyShaderEditor.TextureCoordinatesNode;1;-1472,64;Inherit;False;0;3;2;3;2;FLOAT2;0,0;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
Node;AmplifyShaderEditor.RangedFloatNode;2;-1472,256;Inherit;False;Property;_Density;Density;8;0;Create;True;0;0;0;False;0;False;10;1;1;100;0;1;FLOAT;0
Node;AmplifyShaderEditor.SimpleMultiplyOpNode;3;-1216,128;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
Node;AmplifyShaderEditor.FloorOpNode;5;-960,64;Inherit;False;1;0;FLOAT2;0,0;False;1;FLOAT2;0
Node;AmplifyShaderEditor.FractNode;4;-960,192;Inherit;False;1;0;FLOAT2;0,0;False;1;FLOAT2;0
Node;AmplifyShaderEditor.CommentNode;48;-768,-448;Inherit;False;1024;336;4.2 随机值生成;10;8;10;11;12;13;14;15;16;17;47
Node;AmplifyShaderEditor.CommentNode;49;-1568,0;Inherit;False;720;352;4.1 网格划分;5;1;2;3;4;5
Node;AmplifyShaderEditor.CommentNode;50;-768,256;Inherit;False;1232;528;4.3 独立运动与旋转;11;18;19;20;21;22;23;24;25;26;27;30
Node;AmplifyShaderEditor.Vector2Node;11;-704,-384;Inherit;False;Constant;_Vector0;Vector 0;8;0;Create;True;0;0;0;False;0;False;1.2,3.4;0,0;0;3;FLOAT2;0;FLOAT;1;FLOAT;2
Node;AmplifyShaderEditor.SimpleAddOpNode;10;-448,-384;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0
Node;AmplifyShaderEditor.RandomRangeNode;8;-448,-256;Inherit;False;1;0;FLOAT2;0,0;False;1;FLOAT2;0
Node;AmplifyShaderEditor.RandomRangeNode;12;-192,-384;Inherit;False;1;0;FLOAT2;0,0;False;1;FLOAT2;0
Node;AmplifyShaderEditor.RangedFloatNode;15;-448,0;Inherit;False;Property;_MaxMoveSpeed;Max Move Speed;5;0;Create;True;0;0;0;False;0;False;0.5;0;0;0;0;1;FLOAT;0
Node;AmplifyShaderEditor.RangedFloatNode;14;-448,-128;Inherit;False;Property;_MinMoveSpeed;Min Move Speed;4;0;Create;True;0;0;0;False;0;False;0.1;0;0;0;0;1;FLOAT;0
Node;AmplifyShaderEditor.LerpOp;13;-192,-224;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0
Node;AmplifyShaderEditor.RangedFloatNode;17;-192,-128;Inherit;False;Property;_MaxRotationSpeed;Max Rotation Speed;7;0;Create;True;0;0;0;False;0;False;5;0;0;10;0;1;FLOAT;0
Node;AmplifyShaderEditor.RangedFloatNode;16;-192,0;Inherit;False;Property;_MinRotationSpeed;Min Rotation Speed;6;0;Create;True;0;0;0;False;0;False;1;0;0;10;0;1;FLOAT;0
Node;AmplifyShaderEditor.LerpOp;47;-16,-96;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0
Node;AmplifyShaderEditor.ComponentMaskNode;46;-16,-224;Inherit;False;1;1;0;FLOAT2;0,0;False;1;FLOAT;0
Node;AmplifyShaderEditor.ComponentMaskNode;45;-16,-384;Inherit;False;0;1;0;FLOAT2;0,0;False;1;FLOAT;0
Node;AmplifyShaderEditor.TimeNode;19;-704,320;Inherit;False;0;5;FLOAT4;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
Node;AmplifyShaderEditor.SimpleMultiplyOpNode;21;112,-384;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;100;False;1;FLOAT;0
Node;AmplifyShaderEditor.SimpleAddOpNode;20;-448,320;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
Node;AmplifyShaderEditor.SimpleMultiplyOpNode;22;-224,320;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
Node;AmplifyShaderEditor.Vector4Node;24;-448,448;Inherit;False;Property;_MoveDirection;Move Direction;3;0;Create;True;0;0;0;False;0;False;1,0,0,0;1,0,0,0;0;5;FLOAT4;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
Node;AmplifyShaderEditor.SimpleMultiplyOpNode;23;-16,384;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT2;0,0;False;1;FLOAT2;0
Node;AmplifyShaderEditor.SimpleSubtractOpNode;25;240,320;Inherit;False;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0
Node;AmplifyShaderEditor.SimpleMultiplyOpNode;27;-224,512;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
Node;AmplifyShaderEditor.Vector2Node;30;240,640;Inherit;False;Constant;_Vector1;Vector 1;10;0;Create;True;0;0;0;False;0;False;0.5,0.5;0,0;0;3;FLOAT2;0;FLOAT;1;FLOAT;2
Node;AmplifyShaderEditor.RotatorNode;26;496,448;Inherit;False;3;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;1;FLOAT2;0
Node;AmplifyShaderEditor.CommentNode;51;704,64;Inherit;False;1296;608;4.4 最终采样与混合;10;28;29;31;32;33;34;35;36;37;44
Node;AmplifyShaderEditor.SamplerNode;28;768,128;Inherit;True;Property;_ShapeTexture;Shape Texture;0;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;FLOAT;0;False;8;FLOAT;0;False;9;FLOAT;0;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
Node;AmplifyShaderEditor.ColorNode;29;768,384;Inherit;False;Property;_BackgroundColor;Background Color;1;0;Create;True;0;0;0;False;0;False;0,0,0,0;0,0,0,0;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
Node;AmplifyShaderEditor.LerpOp;31;1088,256;Inherit;False;3;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;FLOAT;0;False;1;COLOR;0
Node;AmplifyShaderEditor.RangedFloatNode;33;1088,512;Inherit;False;Property;_ShapeOpacity;Shape Opacity;9;0;Create;True;0;0;0;False;0;False;1;0;0;1;0;1;FLOAT;0
Node;AmplifyShaderEditor.RangedFloatNode;32;1088,384;Inherit;False;Property;_BackgroundOpacity;Background Opacity;2;0;Create;True;0;0;0;False;0;False;0.5;0;0;1;0;1;FLOAT;0
Node;AmplifyShaderEditor.LerpOp;34;1344,384;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0
Node;AmplifyShaderEditor.RangedFloatNode;35;1344,512;Inherit;False;Property;_GlobalOpacity;Global Opacity;12;0;Create;True;0;0;0;False;0;False;1;0;0;1;0;1;FLOAT;0
Node;AmplifyShaderEditor.SimpleMultiplyOpNode;36;1600,448;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
Node;AmplifyShaderEditor.ColorNode;37;1600,256;Inherit;False;Property;_EmissionColor;Emission Color;11;0;Create;True;0;0;0;False;0;False;1,1,1,1;1,1,1,1;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
Node;AmplifyShaderEditor.StaticSwitch;44;1344,128;Inherit;False;Property;_EnableEmission;Enable Emission;10;0;Create;True;0;0;0;False;0;False;0;0;0;True;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
Node;AmplifyShaderEditor.SimpleMultiplyOpNode;43;1088,128;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
Node;AmplifyShaderEditor.StandardUnlitNode;0;2112,256;Float;False;True;2;Float;ASEMaterialInspector;0;0;Unlit;Gemini/GraphicWaterfall;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;False;False;False;False;False;False;Back;0;False;;0;False;;False;0;False;;0;False;;False;0;Transparent;0.5;True;True;0;False;Transparent;RenderType;Transparent=RenderType;True;True;True;True;True;True;True;True;True;True;True;True;True;True;True;True;True;False;0;False;255;False;255;False;255;False;7;False;6;False;5;False;4;False;3;False;2;False;1;False;0;False;0;False;0;False;0;False;0;False;0;False;0;False;False;2;15;10;25;False;0.5;True;0;0;False;;0;0;Standard;0;False;0;2;True;8;1;False;0;0;2;1;1;1;1;1;False;0;0;False;0;0;0;0;0;0;0;0;Float4;0,0,0,0;False;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
WireConnection;3;0;1;0
WireConnection;3;1;2;0
WireConnection;5;0;3;0
WireConnection;4;0;3;0
WireConnection;10;0;5;0
WireConnection;10;1;11;0
WireConnection;8;0;5;0
WireConnection;12;0;10;0
WireConnection;13;0;14;0
WireConnection;13;1;15;0
WireConnection;13;2;45;0
WireConnection;47;0;16;0
WireConnection;47;1;17;0
WireConnection;47;2;46;0
WireConnection;46;0;8;0
WireConnection;45;0;8;0
IConnection;21;0;12;0
WireConnection;20;0;19;1
WireConnection;20;1;21;0
WireConnection;22;0;20;0
WireConnection;22;1;13;0
WireConnection;23;0;22;0
WireConnection;23;1;24;0
WireConnection;25;0;4;0
WireConnection;25;1;23;0
WireConnection;27;0;20;0
WireConnection;27;1;47;0
WireConnection;26;0;25;0
WireConnection;26;1;30;0
WireConnection;26;2;27;0
WireConnection;28;0;26;0
WireConnection;31;0;29;0
WireConnection;31;1;28;0
WireConnection;31;2;28;4
WireConnection;34;0;32;0
WireConnection;34;1;33;0
WireConnection;34;2;28;4
WireConnection;36;0;34;0
WireConnection;36;1;35;0
WireConnection;44;0;43;0
WireConnection;44;1;37;0
WireConnection;43;0;28;0
WireConnection;43;1;28;4
WireConnection;0;0;31;0
WireConnection;0;1;44;0
WireConnection;0;2;36;0
ASEEND*/
//CHKSM=12A9E53835C4A36B690A81180A5844053B2505C5

View File

@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: abadec1812956184baeaef8d7cf924b6
ShaderImporter:
externalObjects: {}
defaultTextures: []
nonModifiableTextures: []
userData:
assetBundleName:
assetBundleVariant: