啊啊啊FE你这需求真难做啊啊啊
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
31775
Assets/FR2_Cache.asset
31775
Assets/FR2_Cache.asset
File diff suppressed because it is too large
Load Diff
@@ -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: []
|
||||
|
||||
@@ -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,
|
||||
|
||||
4957
Assets/Prefabs/GameElements/Track/ParticleTracker.prefab
Normal file
4957
Assets/Prefabs/GameElements/Track/ParticleTracker.prefab
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0b3b8df64bc2b4a4fabd753f7e9189e7
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -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}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a51c4f27e68ef814390c1cbb84f208ef
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1ab4c5365c4f21d4797255075067de95
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -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", () =>
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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;
|
||||
|
||||
//采音器
|
||||
|
||||
@@ -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":[
|
||||
|
||||
|
||||
@@ -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" : {
|
||||
|
||||
@@ -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" : {
|
||||
|
||||
@@ -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: []
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 84db5d745f29e924c92b143f052021a0
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -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
|
||||
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: abadec1812956184baeaef8d7cf924b6
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user