This commit is contained in:
SoulliesOfficial
2026-04-03 10:53:11 -04:00
parent e7b890686d
commit 1bc9af280b
177 changed files with 4029 additions and 3302 deletions

View File

@@ -60,8 +60,7 @@ namespace Ichni.RhythmGame
skyboxThemeBundleName = themeBundleName;
skyboxMaterialName = materialName;
skyboxMaterial = ThemeBundleManager.instance.GetObject<Material>(themeBundleName, materialName);
if (skyboxMaterial == null) skyboxMaterial = GameManager.Instance.basePrefabs.defaultSkyboxMaterial;
GameManager.Instance.backgroundController.SetSkybox(skyboxMaterial);
if (skyboxMaterial != null) GameManager.Instance.backgroundController.SetSkybox(skyboxMaterial);
}
private void SetBackgroundSprite(string spriteName)

View File

@@ -114,12 +114,12 @@ namespace Ichni.RhythmGame
particleSystemRenderer.material.SetColor("_BaseColor", colorSubmodule.currentBaseColor);
if (colorSubmodule.emissionEnabled)
{
particleSystemRenderer.material.EnableKeyword("_EMISSION_ON");
particleSystemRenderer.material.SetFloat("_EnableEmission", 1);
particleSystemRenderer.material.SetColor("_EmissionColor", colorSubmodule.GetCurrentEmissionColor());
}
else
{
particleSystemRenderer.material.DisableKeyword("_EMISSION_ON");
particleSystemRenderer.material.SetFloat("_EnableEmission", 0);
}
}
}

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Dreamteck.Splines;
using Ichni.RhythmGame.Beatmap;
using Lean.Pool;
@@ -45,6 +46,20 @@ namespace Ichni.RhythmGame
return pathNode;
}
public override void AfterInitialize()
{
base.AfterInitialize();
if (childElementList.Any(c => c is AnimationBase))
{
if(track.trackRendererSubmodule != null) track.trackRendererSubmodule.meshGenerator.autoUpdate = true;
}
else
{
//LeanPool.Despawn(gameObject);
}
}
public override void SetDefaultSubmodules()
{
transformSubmodule = new TransformSubmodule(this);

View File

@@ -60,6 +60,12 @@ namespace Ichni.RhythmGame
public void ClosePath()
{
if (pathNodeList.Count == 2)
{
path.type = Spline.Type.Linear;
path.sampleRate = 1;
}
if (isClosed)
{
path.Close();
@@ -95,7 +101,7 @@ namespace Ichni.RhythmGame
SetPathNode(pathNode);
}
ClosePath();
path.RebuildImmediate(true, true);
path.RebuildImmediate();
}
}
#endregion

View File

@@ -37,20 +37,6 @@ namespace Ichni.RhythmGame
{
this.track.trackRendererSubmodule = this;
}
// 【盲区修复】: 在启用所需的轨道生成器前,强行将对象池残留里的其他轨道生成器打入休眠状态,以防止管网和曲线同屏出现重叠!
DisableAllGenerators();
}
private void DisableAllGenerators()
{
if (track.trackRenderer == null) return;
if (track.trackRenderer.TryGetComponent(out SplineRenderer sr)) sr.enabled = false;
if (track.trackRenderer.TryGetComponent(out PathGenerator pg)) pg.enabled = false;
if (track.trackRenderer.TryGetComponent(out TubeGenerator tg)) tg.enabled = false;
if (track.trackRenderer.TryGetComponent(out SurfaceGenerator sg)) sg.enabled = false;
if (track.trackRenderer.TryGetComponent(out MeshRenderer mr)) mr.enabled = false;
}
#endregion
@@ -79,8 +65,6 @@ namespace Ichni.RhythmGame
protected void SetMesh()
{
this.meshGenerator.enabled = true;
if (track.trackTimeSubmodule is TrackTimeSubmoduleMovable trackTimeSubmoduleMovable)
{
meshGenerator.clipFrom = trackTimeSubmoduleMovable.tailPercent;
@@ -91,10 +75,6 @@ namespace Ichni.RhythmGame
meshGenerator.clipFrom = 0;
meshGenerator.clipTo = 1;
}
this.meshRenderer.enabled = true;
// 短暂激活生成网格后,为了性能再度关闭自身的实时刷新。
this.meshGenerator.enabled = false;
}
protected void SetEnableEmission() => meshRenderer.material.SetInt("_Emission", enableEmission ? 1 : 0);

View File

@@ -1,6 +1,7 @@
using System;
using Dreamteck.Splines;
using Ichni.RhythmGame.Beatmap;
using UniRx;
using UnityEngine;
namespace Ichni.RhythmGame
@@ -16,16 +17,16 @@ namespace Ichni.RhythmGame
bool zWrite, Vector2 uvScale, Vector2 uvOffset, Material material = null) :
base(track, enableEmission, emissionIntensity, zWrite, uvScale, uvOffset)
{
this.splineRenderer = track.trackRenderer.GetComponent<SplineRenderer>();
this.splineRenderer = track.trackRenderer.AddComponent<SplineRenderer>();
this.meshRenderer = splineRenderer.GetComponent<MeshRenderer>();
this.meshGenerator = splineRenderer;
// 真正安全地仅激活该模块需要用到的引擎
this.splineRenderer.enabled = true;
this.meshGenerator.enabled = true;
this.renderMaterial = material == null ? GameManager.Instance.basePrefabs.defaultTrackMaterial : material;
this.splineRenderer.spline = track.trackPathSubmodule.path;
this.splineRenderer.doubleSided = true;
this.splineRenderer.clipFrom = 0;
this.splineRenderer.clipTo = 1;
this.splineRenderer.updateMethod = SplineUser.UpdateMethod.Update;

View File

@@ -1,6 +1,7 @@
using System;
using Dreamteck.Splines;
using Ichni.RhythmGame.Beatmap;
using UniRx;
using UnityEngine;
namespace Ichni.RhythmGame
@@ -16,15 +17,15 @@ namespace Ichni.RhythmGame
bool zWrite, Vector2 uvScale, Vector2 uvOffset, Material material = null) :
base(track, enableEmission, emissionIntensity, zWrite, uvScale, uvOffset)
{
this.pathGenerator = track.trackRenderer.GetComponent<PathGenerator>();
this.pathGenerator = track.trackRenderer.AddComponent<PathGenerator>();
this.meshRenderer = pathGenerator.GetComponent<MeshRenderer>();
this.meshGenerator = pathGenerator;
this.pathGenerator.enabled = true;
this.meshGenerator.enabled = true;
this.renderMaterial = material == null ? GameManager.Instance.basePrefabs.defaultTrackMaterial : material;
this.pathGenerator.spline = track.trackPathSubmodule.path;
this.pathGenerator.doubleSided = true;
this.pathGenerator.clipFrom = 0;
this.pathGenerator.clipTo = 1;
this.pathGenerator.updateMethod = SplineUser.UpdateMethod.Update;

View File

@@ -16,15 +16,15 @@ namespace Ichni.RhythmGame
bool zWrite, Vector2 uvScale, Vector2 uvOffset, Material material = null) :
base(track, enableEmission, emissionIntensity, zWrite, uvScale, uvOffset)
{
this.surface = track.trackRenderer.GetComponent<SurfaceGenerator>();
this.surface = track.trackRenderer.AddComponent<SurfaceGenerator>();
this.meshRenderer = surface.GetComponent<MeshRenderer>();
this.meshGenerator = surface;
this.surface.enabled = true;
this.meshGenerator.enabled = true;
this.renderMaterial = material == null ? GameManager.Instance.basePrefabs.defaultTrackMaterial : material;
this.surface.spline = track.trackPathSubmodule.path;
this.surface.doubleSided = true;
this.surface.clipFrom = 0;
this.surface.clipTo = 1;
this.surface.updateMethod = SplineUser.UpdateMethod.Update;

View File

@@ -19,12 +19,11 @@ namespace Ichni.RhythmGame
{
this.sideCount = sideCount;
this.tubeGenerator = track.trackRenderer.GetComponent<TubeGenerator>();
this.tubeGenerator = track.trackRenderer.AddComponent<TubeGenerator>();
this.meshRenderer = tubeGenerator.GetComponent<MeshRenderer>();
this.meshGenerator = tubeGenerator;
this.tubeGenerator.enabled = true;
this.meshGenerator.enabled = true;
this.renderMaterial = material == null ? GameManager.Instance.basePrefabs.defaultTrackMaterial : material;
this.tubeGenerator.spline = track.trackPathSubmodule.path;

View File

@@ -127,12 +127,12 @@ namespace Ichni.RhythmGame
particleSystemRenderer.material.SetColor("_BaseColor", colorSubmodule.currentBaseColor);
if (colorSubmodule.emissionEnabled)
{
particleSystemRenderer.material.EnableKeyword("_EMISSION_ON");
particleSystemRenderer.material.SetFloat("_EnableEmission", 1);
particleSystemRenderer.material.SetColor("_EmissionColor", colorSubmodule.GetCurrentEmissionColor());
}
else
{
particleSystemRenderer.material.DisableKeyword("_EMISSION_ON");
particleSystemRenderer.material.SetFloat("_EnableEmission", 0);
}
}
}