update
This commit is contained in:
@@ -8,11 +8,11 @@ using UnityEngine.Serialization;
|
||||
|
||||
namespace Ichni.RhythmGame
|
||||
{
|
||||
public partial class ParticleTracker : GameElement, IHaveColorSubmodule
|
||||
public partial class ParticleTracker : GameElement, IHaveParticles, IHaveColorSubmodule
|
||||
{
|
||||
public Track track;
|
||||
public ParticleController particleController;
|
||||
public ParticleSystem particle;
|
||||
public ParticleSystem particle { get; set; }
|
||||
public ColorSubmodule colorSubmodule { get; set; }
|
||||
public bool haveBaseColor => true;
|
||||
public bool haveEmissionColor => true;
|
||||
@@ -44,6 +44,7 @@ namespace Ichni.RhythmGame
|
||||
{
|
||||
ParticleTracker particleTracker = Instantiate(GameManager.instance.basePrefabs.particleTracker, track.transform)
|
||||
.GetComponent<ParticleTracker>();
|
||||
particleTracker.particle = particleTracker.GetComponent<ParticleSystem>();
|
||||
particleTracker.Initialize(elementName, id, tags, isFirstGenerated, track);
|
||||
particleTracker.track = track;
|
||||
particleTracker.particleController.spline = track.trackPathSubmodule.path;
|
||||
@@ -51,7 +52,7 @@ namespace Ichni.RhythmGame
|
||||
particleTracker.stopTime = stopTime;
|
||||
particleTracker.themeBundleName = themeBundleName;
|
||||
particleTracker.materialName = materialName;
|
||||
particleTracker.SetParticleMaterial(themeBundleName, materialName);
|
||||
(particleTracker as IHaveParticles).SetParticleMaterial(themeBundleName, materialName);
|
||||
particleTracker.SetParticleSettings(prewarm, is3D, width, extendDirection, density, lifeTime, isAutoOrient, particleRotation);
|
||||
return particleTracker;
|
||||
}
|
||||
@@ -60,21 +61,9 @@ namespace Ichni.RhythmGame
|
||||
{
|
||||
colorSubmodule = new ColorSubmodule(this, Color.white, true, Color.white, 0);
|
||||
}
|
||||
|
||||
public void SetParticleMaterial(string themeBundleName, string materialName)
|
||||
{
|
||||
Material material = ThemeBundleManager.instance.GetObject<Material>(themeBundleName, materialName) ??
|
||||
GameManager.instance.basePrefabs.defaultParticleMaterial;
|
||||
Renderer particleRenderer = particle.GetComponent<Renderer>();
|
||||
particleRenderer.material = material;
|
||||
particleRenderer.InitializeShader();
|
||||
|
||||
}
|
||||
|
||||
public void SetParticleSettings(bool prewarm,
|
||||
bool is3D, float width, Vector3 extendDirection,
|
||||
float density, float lifeTime,
|
||||
bool isAutoOrient, Vector3 particleRotation)
|
||||
|
||||
public void SetParticleSettings(bool prewarm, bool is3D, float width, Vector3 extendDirection,
|
||||
float density, float lifeTime, bool isAutoOrient, Vector3 particleRotation)
|
||||
{
|
||||
this.prewarm = prewarm;
|
||||
this.is3D = is3D;
|
||||
@@ -85,12 +74,9 @@ namespace Ichni.RhythmGame
|
||||
this.prewarm = prewarm;
|
||||
this.isAutoOrient = isAutoOrient;
|
||||
this.particleRotation = particleRotation;
|
||||
|
||||
SetPrewarm();
|
||||
(this as IHaveParticles).SetParticleSettings(prewarm, ParticleSystemSimulationSpace.Local, density,
|
||||
lifeTime, 0, 1, isAutoOrient, particleRotation);
|
||||
SetShape();
|
||||
SetDensity();
|
||||
SetLifeTime();
|
||||
SetAlignment();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,50 +116,7 @@ namespace Ichni.RhythmGame
|
||||
particleController.extendDirection = extendDirection;
|
||||
particleController.Rebuild();
|
||||
}
|
||||
|
||||
private void SetDensity()
|
||||
{
|
||||
var emission = particle.emission;
|
||||
emission.rateOverTime = density;
|
||||
}
|
||||
|
||||
private void SetLifeTime()
|
||||
{
|
||||
var mainModule = particle.main;
|
||||
mainModule.startLifetime = lifeTime;
|
||||
}
|
||||
|
||||
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 * Mathf.Deg2Rad;
|
||||
mainModule.startRotationY = particleRotation.y * Mathf.Deg2Rad;
|
||||
mainModule.startRotationZ = particleRotation.z * Mathf.Deg2Rad;
|
||||
}
|
||||
|
||||
public override void Refresh()
|
||||
{
|
||||
base.Refresh();
|
||||
|
||||
Reference in New Issue
Block a user