@@ -213,7 +213,7 @@ Material:
|
|||||||
- _Dst: 10
|
- _Dst: 10
|
||||||
- _DstBlend: 0
|
- _DstBlend: 0
|
||||||
- _DstBlendAlpha: 0
|
- _DstBlendAlpha: 0
|
||||||
- _EdgeValue: 0.83361584
|
- _EdgeValue: 0.206462
|
||||||
- _EnvironmentReflections: 1
|
- _EnvironmentReflections: 1
|
||||||
- _FNLfanxiangkaiguan: 0
|
- _FNLfanxiangkaiguan: 0
|
||||||
- _Face: 1
|
- _Face: 1
|
||||||
@@ -258,7 +258,7 @@ Material:
|
|||||||
- _Mask_scale: 1
|
- _Mask_scale: 1
|
||||||
- _Metallic: 0
|
- _Metallic: 0
|
||||||
- _OcclusionStrength: 1
|
- _OcclusionStrength: 1
|
||||||
- _Opacity: 0.16638416
|
- _Opacity: 0.793538
|
||||||
- _Parallax: 0.005
|
- _Parallax: 0.005
|
||||||
- _Pass: 0
|
- _Pass: 0
|
||||||
- _QueueOffset: 0
|
- _QueueOffset: 0
|
||||||
|
|||||||
28
Assets/AddressableAssetsData/link.xml
Normal file
28
Assets/AddressableAssetsData/link.xml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<linker>
|
||||||
|
<assembly fullname="Unity.Addressables, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" preserve="all">
|
||||||
|
<type fullname="UnityEngine.AddressableAssets.Addressables" preserve="all" />
|
||||||
|
</assembly>
|
||||||
|
<assembly fullname="Unity.Localization, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
|
||||||
|
<type fullname="UnityEngine.Localization.Locale" preserve="all" />
|
||||||
|
<type fullname="UnityEngine.Localization.Tables.SharedTableData" preserve="all" />
|
||||||
|
<type fullname="UnityEngine.Localization.Tables.StringTable" preserve="all" />
|
||||||
|
<type fullname="UnityEngine.Localization.LocaleIdentifier" preserve="nothing" serialized="true" />
|
||||||
|
<type fullname="UnityEngine.Localization.Metadata.MetadataCollection" preserve="nothing" serialized="true" />
|
||||||
|
<type fullname="UnityEngine.Localization.Tables.TableEntryData" preserve="nothing" serialized="true" />
|
||||||
|
<type fullname="UnityEngine.Localization.Tables.DistributedUIDGenerator" preserve="nothing" serialized="true" />
|
||||||
|
<type fullname="UnityEngine.Localization.Tables.SharedTableData/SharedTableEntry" preserve="nothing" serialized="true" />
|
||||||
|
<type fullname="UnityEngine.Localization.Metadata.FallbackLocale" preserve="nothing" serialized="true" />
|
||||||
|
</assembly>
|
||||||
|
<assembly fullname="Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" preserve="all">
|
||||||
|
<type fullname="UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider" preserve="all" />
|
||||||
|
<type fullname="UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider" preserve="all" />
|
||||||
|
<type fullname="UnityEngine.ResourceManagement.ResourceProviders.InstanceProvider" preserve="all" />
|
||||||
|
<type fullname="UnityEngine.ResourceManagement.ResourceProviders.SceneProvider" preserve="all" />
|
||||||
|
</assembly>
|
||||||
|
<assembly fullname="UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
|
||||||
|
<type fullname="UnityEngine.Object" preserve="all" />
|
||||||
|
</assembly>
|
||||||
|
<assembly fullname="YarnSpinner.Unity">
|
||||||
|
<type fullname="Yarn.Unity.UnityLocalization.LineMetadata" preserve="nothing" serialized="true" />
|
||||||
|
</assembly>
|
||||||
|
</linker>
|
||||||
7
Assets/AddressableAssetsData/link.xml.meta
Normal file
7
Assets/AddressableAssetsData/link.xml.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6ce491c0f528de74dbed99b700a51ea5
|
||||||
|
TextScriptImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/FR2_Cache.asset
LFS
BIN
Assets/FR2_Cache.asset
LFS
Binary file not shown.
@@ -24,6 +24,7 @@ namespace Ichni.RhythmGame
|
|||||||
public bool zWrite;
|
public bool zWrite;
|
||||||
public Vector2 uvScale;
|
public Vector2 uvScale;
|
||||||
public Vector2 uvOffset;
|
public Vector2 uvOffset;
|
||||||
|
private bool requiresMeshRebuild;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region [初始化与防御机制] Initialization & Defense
|
#region [初始化与防御机制] Initialization & Defense
|
||||||
@@ -72,17 +73,44 @@ namespace Ichni.RhythmGame
|
|||||||
{
|
{
|
||||||
if (meshGenerator == null) return;
|
if (meshGenerator == null) return;
|
||||||
|
|
||||||
|
bool colorChanged = false;
|
||||||
if (meshGenerator.color != color)
|
if (meshGenerator.color != color)
|
||||||
{
|
{
|
||||||
meshGenerator.color = color;
|
meshGenerator.color = color;
|
||||||
|
colorChanged = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (forceImmediateRebuild && track.trackTimeSubmodule is not TrackTimeSubmoduleMovable)
|
if (track.trackTimeSubmodule is TrackTimeSubmoduleMovable)
|
||||||
|
{
|
||||||
|
if (colorChanged || forceImmediateRebuild)
|
||||||
|
{
|
||||||
|
RequestMeshRebuild();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (forceImmediateRebuild)
|
||||||
{
|
{
|
||||||
meshGenerator.RebuildImmediate();
|
meshGenerator.RebuildImmediate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void RequestMeshRebuild()
|
||||||
|
{
|
||||||
|
requiresMeshRebuild = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ConsumeMeshRebuildRequest()
|
||||||
|
{
|
||||||
|
if (!requiresMeshRebuild)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
requiresMeshRebuild = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
protected void SetMesh()
|
protected void SetMesh()
|
||||||
{
|
{
|
||||||
if (track.trackTimeSubmodule is TrackTimeSubmoduleMovable trackTimeSubmoduleMovable)
|
if (track.trackTimeSubmodule is TrackTimeSubmoduleMovable trackTimeSubmoduleMovable)
|
||||||
|
|||||||
@@ -31,6 +31,11 @@ namespace Ichni.RhythmGame
|
|||||||
public float trackTotalTime;
|
public float trackTotalTime;
|
||||||
public float visibleTrackTimeLength;
|
public float visibleTrackTimeLength;
|
||||||
public AnimationCurveType animationCurveType;
|
public AnimationCurveType animationCurveType;
|
||||||
|
private const float ClipChangeEpsilon = 0.0001f;
|
||||||
|
private bool hasClipState;
|
||||||
|
private float lastClipFrom;
|
||||||
|
private float lastClipTo;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region [生命周期] Initialization
|
#region [生命周期] Initialization
|
||||||
@@ -49,17 +54,54 @@ namespace Ichni.RhythmGame
|
|||||||
#region [时间运算逻辑] Timing Calculation
|
#region [时间运算逻辑] Timing Calculation
|
||||||
public void UpdateTrackPart(float songTime)
|
public void UpdateTrackPart(float songTime)
|
||||||
{
|
{
|
||||||
|
CalculateVisibleClip(songTime, out float newTailPercent, out float newHeadPercent);
|
||||||
|
headPercent = newHeadPercent;
|
||||||
|
tailPercent = newTailPercent;
|
||||||
|
|
||||||
|
TrackRendererSubmodule rendererSubmodule = track.trackRendererSubmodule;
|
||||||
|
if (rendererSubmodule == null || rendererSubmodule.meshGenerator == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool clipChanged = !hasClipState ||
|
||||||
|
Mathf.Abs(lastClipFrom - tailPercent) > ClipChangeEpsilon ||
|
||||||
|
Mathf.Abs(lastClipTo - headPercent) > ClipChangeEpsilon;
|
||||||
|
bool rebuildRequested = rendererSubmodule.ConsumeMeshRebuildRequest();
|
||||||
|
|
||||||
|
if (!clipChanged && !rebuildRequested)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
rendererSubmodule.meshGenerator.clipFrom = tailPercent;
|
||||||
|
rendererSubmodule.meshGenerator.clipTo = headPercent;
|
||||||
|
rendererSubmodule.meshGenerator.RebuildImmediate();
|
||||||
|
|
||||||
|
hasClipState = true;
|
||||||
|
lastClipFrom = tailPercent;
|
||||||
|
lastClipTo = headPercent;
|
||||||
|
//track.trackPathSubmodule.path.Rebuild(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CalculateVisibleClip(float songTime, out float tailPercent, out float headPercent)
|
||||||
|
{
|
||||||
|
if (songTime <= trackStartTime)
|
||||||
|
{
|
||||||
|
tailPercent = 0f;
|
||||||
|
headPercent = 0f;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (songTime >= trackEndTime + visibleTrackTimeLength)
|
||||||
|
{
|
||||||
|
tailPercent = 1f;
|
||||||
|
headPercent = 1f;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
headPercent = GetTrackPercent(songTime);
|
headPercent = GetTrackPercent(songTime);
|
||||||
tailPercent = GetTrackPercent(songTime - visibleTrackTimeLength);
|
tailPercent = GetTrackPercent(songTime - visibleTrackTimeLength);
|
||||||
|
|
||||||
if (track.trackRendererSubmodule != null)
|
|
||||||
{
|
|
||||||
track.trackRendererSubmodule.meshGenerator.clipFrom = tailPercent;
|
|
||||||
track.trackRendererSubmodule.meshGenerator.clipTo = headPercent;
|
|
||||||
track.trackRendererSubmodule.meshGenerator.RebuildImmediate();
|
|
||||||
}
|
|
||||||
|
|
||||||
//track.trackPathSubmodule.path.Rebuild(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public float GetTrackPercent(float songTimeInTime)
|
public float GetTrackPercent(float songTimeInTime)
|
||||||
|
|||||||
BIN
ProfilerCaptures/ichni Official_2026-07-18_12-27-30.data
Normal file
BIN
ProfilerCaptures/ichni Official_2026-07-18_12-27-30.data
Normal file
Binary file not shown.
BIN
ProfilerCaptures/ichni Official_2026-07-18_12-27-30.highlights
Normal file
BIN
ProfilerCaptures/ichni Official_2026-07-18_12-27-30.highlights
Normal file
Binary file not shown.
Reference in New Issue
Block a user