note修复

Signed-off-by: TRADER_FOER <lhf190@outlook.com>
This commit is contained in:
2026-07-25 22:19:32 +08:00
parent eb7110ea77
commit c828389d0d
24 changed files with 60148 additions and 828818 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -77,6 +77,65 @@ namespace ichni.RhythmGame // [修复] 修正命名空间首字母大写,符
return _previewRoot;
}
}
private float CurrentSongTime => CoreServices.TimeProvider?.SongTime ?? EditorManager.instance.songInformation.songTime;
private bool TryGetTrackContext(out SplineComputer spline, out TrackTimeSubmodule trackTime)
{
spline = null;
trackTime = null;
if (TrackedTrack?.trackPathSubmodule?.path == null) return false;
if (TrackedTrack.trackTimeSubmodule == null) return false;
spline = TrackedTrack.trackPathSubmodule.path;
trackTime = TrackedTrack.trackTimeSubmodule;
return true;
}
private bool TryGetBeatRange(out float beatStart, out float beatEnd)
{
beatStart = 0f;
beatEnd = 0f;
if (!TryGetTrackContext(out _, out TrackTimeSubmodule trackTime)) return false;
var beatManager = EditorManager.instance.songInformation.beatManager;
switch (trackTime)
{
case TrackTimeSubmoduleMovable movable:
beatStart = beatManager.GetBeatFromTime(movable.trackStartTime);
beatEnd = beatManager.GetBeatFromTime(movable.trackEndTime);
return true;
case TrackTimeSubmoduleStatic stat:
float songTime = CurrentSongTime;
beatStart = beatManager.GetBeatFromTime(songTime);
beatEnd = beatManager.GetBeatFromTime(songTime + stat.trackTotalTime);
return true;
default:
return false;
}
}
private bool TryGetTrackPercent(float noteTime, TrackTimeSubmodule trackTime, out float trackPercent)
{
trackPercent = 0f;
switch (trackTime)
{
case TrackTimeSubmoduleMovable movable:
trackPercent = Mathf.Clamp01(movable.GetTrackPercentRaw(noteTime));
return true;
case TrackTimeSubmoduleStatic stat:
float startMove = noteTime - stat.trackTotalTime;
float percent = AnimationCurveEvaluator.Evaluate(
stat.animationCurveType,
(CurrentSongTime - startMove) / stat.trackTotalTime);
trackPercent = 1f - Mathf.Clamp01(percent);
return true;
default:
return false;
}
}
private class NotePreviewData : MonoBehaviour
{
@@ -101,9 +160,8 @@ namespace ichni.RhythmGame // [修复] 修正命名空间首字母大写,符
});
}
public void Refresh(SplineComputer spline, TrackTimeSubmoduleMovable trackTime, float horizonWidth)
public void Refresh(SplineComputer spline, float trackPercent, float horizonWidth)
{
float trackPercent = Mathf.Clamp01(trackTime.GetTrackPercentRaw(noteTime));
SplineSample sample = spline.Evaluate(trackPercent);
Vector3 sideOffset = sample.rotation * (noteBase1.noteVisual != null ? noteBase1.noteVisual.transformSubmodule.originalPosition : Vector3.zero);
Vector3 worldPos = sample.position;
@@ -155,15 +213,17 @@ namespace ichni.RhythmGame // [修复] 修正命名空间首字母大写,符
}
}
// 刷新所有预览
SplineComputer spline = TrackedTrack.trackPathSubmodule.path;
var trackTime = TrackedTrack.trackTimeSubmodule as TrackTimeSubmoduleMovable;
if (!TryGetTrackContext(out SplineComputer spline, out TrackTimeSubmodule trackTime)) return;
foreach (var preview in NotePreviews.Values)
{
if (preview != null)
{
Observable.NextFrame().Subscribe(_ =>
{
preview.Refresh(spline, trackTime, horizonWidth);
if (TryGetTrackPercent(preview.noteTime, trackTime, out float trackPercent))
{
preview.Refresh(spline, trackPercent, horizonWidth);
}
});
}
}
@@ -256,16 +316,16 @@ namespace ichni.RhythmGame // [修复] 修正命名空间首字母大写,符
if (!_isEnabled) return;
// 获取数据源
SplineComputer splineComputer = TrackedTrack.trackPathSubmodule.path;
var trackTime = TrackedTrack.trackTimeSubmodule as TrackTimeSubmoduleMovable;
float beatStart = EditorManager.instance.songInformation.beatManager.GetBeatFromTime(trackTime.trackStartTime);
float beatEnd = EditorManager.instance.songInformation.beatManager.GetBeatFromTime(trackTime.trackEndTime);
if (!TryGetTrackContext(out SplineComputer splineComputer, out TrackTimeSubmodule trackTime)) return;
if (!TryGetBeatRange(out float beatStart, out float beatEnd)) return;
int beatDiver = Mathf.Max(1, BeatDiver);
float beatStep = 1f / beatDiver;
// 2. 批量生成
for (float b = beatStart - 1; b <= beatEnd + 1f / BeatDiver; b += 1f / BeatDiver)
for (float b = beatStart - 1; b <= beatEnd + beatStep; b += beatStep)
{
float timeAtBeat = EditorManager.instance.songInformation.beatManager.GetTimeFromBeat(b);
float trackPercent = Mathf.Clamp01(trackTime.GetTrackPercentRaw(timeAtBeat));
if (!TryGetTrackPercent(timeAtBeat, trackTime, out float trackPercent)) continue;
CalculateLinePositions(splineComputer.Evaluate(trackPercent), out Vector3 p0, out Vector3 p1);
@@ -275,7 +335,9 @@ namespace ichni.RhythmGame // [修复] 修正命名空间首字母大写,符
Color color = (Mathf.Abs(b - Mathf.Round(b)) <= 0.01f) ? Color.green : Color.cyan;
SetupLineRenderer(lr, p0, p1, color);
float bi = (trackPercent >= 1f) ? EditorManager.instance.songInformation.beatManager.GetBeatFromTime(trackTime.trackEndTime) : b;
float bi = trackTime is TrackTimeSubmoduleMovable movable && trackPercent >= 1f
? EditorManager.instance.songInformation.beatManager.GetBeatFromTime(movable.trackEndTime)
: b;
Beats.Add(bi < 0 ? 0f : bi);
BeatLines.Add(lr);
}
@@ -292,19 +354,19 @@ namespace ichni.RhythmGame // [修复] 修正命名空间首字母大写,符
return;
}
SplineComputer splineComputer = TrackedTrack.trackPathSubmodule.path;
var trackTime = TrackedTrack.trackTimeSubmodule as TrackTimeSubmoduleMovable;
float beatStart = EditorManager.instance.songInformation.beatManager.GetBeatFromTime(trackTime.trackStartTime);
float beatEnd = EditorManager.instance.songInformation.beatManager.GetBeatFromTime(trackTime.trackEndTime);
if (!TryGetTrackContext(out SplineComputer splineComputer, out TrackTimeSubmodule trackTime)) return;
if (!TryGetBeatRange(out float beatStart, out float beatEnd)) return;
int beatDiver = Mathf.Max(1, BeatDiver);
float beatStep = 1f / beatDiver;
int index = 0;
// 重置 Beats 列表以匹配新的位置
Beats.Clear();
for (float b = beatStart - 1; b <= beatEnd + 1f / BeatDiver; b += 1f / BeatDiver)
for (float b = beatStart - 1; b <= beatEnd + beatStep; b += beatStep)
{
float timeAtBeat = EditorManager.instance.songInformation.beatManager.GetTimeFromBeat(b);
float trackPercent = Mathf.Clamp01(trackTime.GetTrackPercentRaw(timeAtBeat));
if (!TryGetTrackPercent(timeAtBeat, trackTime, out float trackPercent)) continue;
// 如果超出范围,跳过更新(除非你想一直显示)
// 这里沿用你 UpdateBeatLine 的逻辑
@@ -325,7 +387,9 @@ namespace ichni.RhythmGame // [修复] 修正命名空间首字母大写,符
Color color = (Mathf.Abs(b - Mathf.Round(b)) <= 0.01f) ? Color.green : Color.cyan;
SetupLineRenderer(lr, p0, p1, color, false);
float bi = (trackPercent >= 1f) ? EditorManager.instance.songInformation.beatManager.GetBeatFromTime(trackTime.trackEndTime) : b;
float bi = trackTime is TrackTimeSubmoduleMovable movable && trackPercent >= 1f
? EditorManager.instance.songInformation.beatManager.GetBeatFromTime(movable.trackEndTime)
: b;
Beats.Add(bi < 0 ? 0f : bi);
index++;
}
@@ -559,10 +623,11 @@ namespace ichni.RhythmGame // [修复] 修正命名空间首字母大写,符
return null;
}
fastNoteTracker.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
fastNoteTracker.IsEnabled = isEnabled;
fastNoteTracker.showNotePreview = showNotePreview;
fastNoteTracker.horizonWidth = horizonWidth;
fastNoteTracker.BeatDiver = beatDiver;
fastNoteTracker.BeatDiver = Mathf.Max(1, beatDiver);
fastNoteTracker._isEnabled = isEnabled;
fastNoteTracker._showNotePreview = showNotePreview;
fastNoteTracker.Refresh();
return fastNoteTracker;
}
@@ -615,12 +680,12 @@ namespace Ichni.RhythmGame.Beatmap
public override GameElement DuplicateBM(GameElement attached)
{
return FastNoteTracker.GenerateElement(elementName, Guid.NewGuid(), tags, false, attached);
return FastNoteTracker.GenerateElement(elementName, Guid.NewGuid(), tags, false, attached, IsEnabled, showNotePreview, horizonWidth, beatDiver);
}
public override void ExecuteBM()
{
FastNoteTracker.GenerateElement(elementName, elementGuid, tags, false, GetElement(attachedElementGuid));
FastNoteTracker.GenerateElement(elementName, elementGuid, tags, false, GetElement(attachedElementGuid), IsEnabled, showNotePreview, horizonWidth, beatDiver);
}
}
}

View File

@@ -66,7 +66,7 @@ namespace Ichni.RhythmGame
InspectorBuilder.For(this)
.Section("Note Info")
.InputField(nameof(exactJudgeTime), "exactJudgeTime")
.OnChanged(() => UpdateNoteInTrack(CoreServices.TimeProvider.SongTime))
.OnChanged(HandleExactJudgeTimeChanged)
.Mark("ExactJudgeTime")
.Button("Save Note Prefab", () =>
{
@@ -81,6 +81,14 @@ namespace Ichni.RhythmGame
.EnabledIf(() => noteVisual == null)
.Build();
}
private void HandleExactJudgeTimeChanged()
{
float songTime = CoreServices.TimeProvider?.SongTime ?? EditorManager.instance.songInformation.songTime;
UpdateNoteInTrack(songTime);
Refresh();
CoreServices.UpdateScheduler?.NoteScheduler.ManualTick(songTime);
}
#endregion
}
}

View File

@@ -99,10 +99,14 @@ namespace Ichni.RhythmGame
CommandManager.ExecuteCreate(() => TrackHeadPoint.GenerateElement("New Track Head Point", Guid.NewGuid(), new List<string>(), true, this, false, Vector3.zero));
})
.EnabledIf(() => trackTimeSubmodule is TrackTimeSubmoduleMovable)
.Button("Tap", () => CommandManager.ExecuteCreate(() => Tap.GenerateElement("New Tap", Guid.NewGuid(), new List<string>(), true, this, 0f)))
.Button("Stay", () => CommandManager.ExecuteCreate(() => Stay.GenerateElement("New Stay", Guid.NewGuid(), new List<string>(), true, this, 0f)))
.Button("Hold", () => CommandManager.ExecuteCreate(() => Hold.GenerateElement("New Hold", Guid.NewGuid(), new List<string>(), true, this, 0f, 1f)))
.Button("Flick", () => CommandManager.ExecuteCreate(() => Flick.GenerateElement("New Flick", Guid.NewGuid(), new List<string>(), true, this, 0f, new List<Vector2>())))
.Button("Tap", () => CommandManager.ExecuteCreate(() => PrepareGeneratedNote(Tap.GenerateElement("New Tap", Guid.NewGuid(), new List<string>(), true, this, GetDefaultNoteGenerateTime()))))
.Button("Stay", () => CommandManager.ExecuteCreate(() => PrepareGeneratedNote(Stay.GenerateElement("New Stay", Guid.NewGuid(), new List<string>(), true, this, GetDefaultNoteGenerateTime()))))
.Button("Hold", () => CommandManager.ExecuteCreate(() =>
{
float startTime = GetDefaultNoteGenerateTime();
return PrepareGeneratedNote(Hold.GenerateElement("New Hold", Guid.NewGuid(), new List<string>(), true, this, startTime, startTime + 1f));
}))
.Button("Flick", () => CommandManager.ExecuteCreate(() => PrepareGeneratedNote(Flick.GenerateElement("New Flick", Guid.NewGuid(), new List<string>(), true, this, GetDefaultNoteGenerateTime(), new List<Vector2>()))))
.Button("Particle Tracker", () =>
{
CommandManager.ExecuteCreate(() => ParticleTracker.GenerateElement("New Particle Tracker", Guid.NewGuid(), new List<string>(), true, this,
@@ -233,6 +237,17 @@ namespace Ichni.RhythmGame
#endregion
#region [] Tool Methods
private static float GetDefaultNoteGenerateTime()
{
return CoreServices.TimeProvider?.SongTime ?? EditorManager.instance.songInformation.songTime;
}
private static T PrepareGeneratedNote<T>(T note) where T : NoteBase
{
note.noteVisual?.transformSubmodule?.Refresh();
return note;
}
[Button("Test GetAllNotes")]
public List<NoteBase> GetAllNotes()
{

View File

@@ -11,7 +11,7 @@ namespace Ichni.RhythmGame
public GameCamera gameCamera;
public SceneCamera sceneCamera => EditorManager.instance.cameraManager.sceneCamera;
public float farClipRange = 1000f;
public float farClipRange = 2000f;
#endregion
#region [] Lifecycle & Factory

View File

@@ -67,7 +67,10 @@ namespace Ichni
finishTime = finishTime
};
_isDirty = true;
return;
}
RegisterNote(note, activationTime, finishTime);
}
/// <summary>手动触发排序(若需要在注册大批 Note 后一次性完成)</summary>

View File

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

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -6,7 +6,7 @@
"creatorName" : "TR",
"editorVersion" : "0.1.0",
"createTime" : "2026\/7\/14 23:27:03",
"lastSaveTime" : "2026\/7\/23 15:37:53",
"lastSaveTime" : "2026\/7\/25 17:15:54",
"selectedThemeBundleList" : [
"basic","departure_to_multiverse"
],

File diff suppressed because it is too large Load Diff

View File

@@ -6,7 +6,7 @@
"creatorName" : "TRADER FE",
"editorVersion" : "0.1.0",
"createTime" : "2026\/7\/14 21:31:43",
"lastSaveTime" : "2026\/7\/22 23:05:38",
"lastSaveTime" : "2026\/7\/25 17:15:09",
"selectedThemeBundleList" : [
"basic","departure_to_multiverse"
],

File diff suppressed because it is too large Load Diff

View File

@@ -6,7 +6,7 @@
"creatorName" : "XIAOU",
"editorVersion" : "0.1.0",
"createTime" : "2026\/7\/14 21:58:30",
"lastSaveTime" : "2026\/7\/22 15:16:50",
"lastSaveTime" : "2026\/7\/25 17:19:00",
"selectedThemeBundleList" : [
"basic","departure_to_multiverse"
],

View File

@@ -136,7 +136,7 @@
},{
"__type" : "Ichni.RhythmGame.Beatmap.TrackTimeSubmoduleMovable_BM,Assembly-CSharp",
"trackStartTime" : 0,
"trackEndTime" : 1,
"trackEndTime" : 14,
"visibleTrackTimeLength" : 999,
"animationCurveType" : 0,
"attachedElementGuid" : {
@@ -738,6 +738,650 @@
"attachedElementGuid" : {
"value" : "25c0ae0b-6862-4554-9edf-02f5e8e32f6e"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.Tap_BM,Assembly-CSharp",
"exactJudgeTime" : 13.5,
"elementName" : "New Tap",
"tags" : [
],
"elementGuid" : {
"value" : "a6f71ebe-5543-4fe0-abc5-06f4d0f10a5c"
},
"attachedElementGuid" : {
"value" : "99019f51-009c-49d9-95a0-b82e1d81ef56"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
"isOverridingDuration" : false,
"startTime" : -32767,
"endTime" : 32767,
"attachedElementGuid" : {
"value" : "a6f71ebe-5543-4fe0-abc5-06f4d0f10a5c"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.NoteAudioSubmodule_BM,Assembly-CSharp",
"generalJudgeAudioList" : [
"DefaultTap"
],
"perfectAudioList" : [
],
"goodAudioList" : [
],
"badAudioList" : [
],
"missAudioList" : [
],
"holdStartAudioList" : [
],
"holdEndAudioList" : [
],
"attachedElementGuid" : {
"value" : "a6f71ebe-5543-4fe0-abc5-06f4d0f10a5c"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.NoteJudgeSubmodule_BM,Assembly-CSharp",
"judgeUnitList" : [
{
"__type" : "Ichni.RhythmGame.Beatmap.TouchAreaJudgeUnit_BM,Assembly-CSharp",
"areaRadius" : 500
}
],
"attachedElementGuid" : {
"value" : "a6f71ebe-5543-4fe0-abc5-06f4d0f10a5c"
}
},{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNoteVisual_BM,Assembly-CSharp",
"isHighlighted" : false,
"themeBundleName" : "departure_to_multiverse",
"objectName" : "DTM_NoteVisualTap",
"elementName" : "New Note Visual",
"tags" : [
],
"elementGuid" : {
"value" : "08d68fa3-1a80-45aa-8a21-783f99e87fe7"
},
"attachedElementGuid" : {
"value" : "a6f71ebe-5543-4fe0-abc5-06f4d0f10a5c"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
"originalPosition" : {
"x" : 0,
"y" : 0,
"z" : 0
},
"originalEulerAngles" : {
"x" : 0,
"y" : 0,
"z" : 0
},
"originalScale" : {
"x" : 1,
"y" : 1,
"z" : 1
},
"attachedElementGuid" : {
"value" : "08d68fa3-1a80-45aa-8a21-783f99e87fe7"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
"isOverridingDuration" : false,
"startTime" : -32767,
"endTime" : 32767,
"attachedElementGuid" : {
"value" : "08d68fa3-1a80-45aa-8a21-783f99e87fe7"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp",
"originalBaseColor" : {
"r" : 1,
"g" : 1,
"b" : 1,
"a" : 1
},
"emissionEnabled" : false,
"originalEmissionColor" : {
"r" : 0,
"g" : 0,
"b" : 0,
"a" : 1
},
"originalEmissionIntensity" : 0,
"attachedElementGuid" : {
"value" : "08d68fa3-1a80-45aa-8a21-783f99e87fe7"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
"effectCollection" : {"Generate":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNoteGenerateExpand_BM,Assembly-CSharp",
"generateTime" : 0.8,
"effectTime" : 0.2
}
],"GeneralJudge":[
],"StartHold":[
],"Holding":[
],"Perfect":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNotePerfectBurst_BM,Assembly-CSharp",
"effectTime" : 0
}
],"Good":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNoteGoodBurst_BM,Assembly-CSharp",
"effectTime" : 0
}
],"Bad":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNoteBadBurst_BM,Assembly-CSharp",
"effectTime" : 0
}
],"Miss":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNoteMissTransparent_BM,Assembly-CSharp",
"effectTime" : 0.2
}
],"AfterJudge":[
]
},
"attachedElementGuid" : {
"value" : "08d68fa3-1a80-45aa-8a21-783f99e87fe7"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.Tap_BM,Assembly-CSharp",
"exactJudgeTime" : 6,
"elementName" : "New Tap",
"tags" : [
],
"elementGuid" : {
"value" : "9c0c4cb2-55b3-49a1-8cb1-b3012ce78464"
},
"attachedElementGuid" : {
"value" : "99019f51-009c-49d9-95a0-b82e1d81ef56"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
"isOverridingDuration" : false,
"startTime" : -32767,
"endTime" : 32767,
"attachedElementGuid" : {
"value" : "9c0c4cb2-55b3-49a1-8cb1-b3012ce78464"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.NoteAudioSubmodule_BM,Assembly-CSharp",
"generalJudgeAudioList" : [
"DefaultTap"
],
"perfectAudioList" : [
],
"goodAudioList" : [
],
"badAudioList" : [
],
"missAudioList" : [
],
"holdStartAudioList" : [
],
"holdEndAudioList" : [
],
"attachedElementGuid" : {
"value" : "9c0c4cb2-55b3-49a1-8cb1-b3012ce78464"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.NoteJudgeSubmodule_BM,Assembly-CSharp",
"judgeUnitList" : [
{
"__type" : "Ichni.RhythmGame.Beatmap.TouchAreaJudgeUnit_BM,Assembly-CSharp",
"areaRadius" : 500
}
],
"attachedElementGuid" : {
"value" : "9c0c4cb2-55b3-49a1-8cb1-b3012ce78464"
}
},{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNoteVisual_BM,Assembly-CSharp",
"isHighlighted" : false,
"themeBundleName" : "departure_to_multiverse",
"objectName" : "DTM_NoteVisualTap",
"elementName" : "New Note Visual",
"tags" : [
],
"elementGuid" : {
"value" : "a8116ee7-8b13-4485-b079-75662791d7ec"
},
"attachedElementGuid" : {
"value" : "9c0c4cb2-55b3-49a1-8cb1-b3012ce78464"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
"originalPosition" : {
"x" : 0,
"y" : 0,
"z" : 0
},
"originalEulerAngles" : {
"x" : 0,
"y" : 0,
"z" : 0
},
"originalScale" : {
"x" : 1,
"y" : 1,
"z" : 1
},
"attachedElementGuid" : {
"value" : "a8116ee7-8b13-4485-b079-75662791d7ec"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
"isOverridingDuration" : false,
"startTime" : -32767,
"endTime" : 32767,
"attachedElementGuid" : {
"value" : "a8116ee7-8b13-4485-b079-75662791d7ec"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp",
"originalBaseColor" : {
"r" : 1,
"g" : 1,
"b" : 1,
"a" : 1
},
"emissionEnabled" : false,
"originalEmissionColor" : {
"r" : 0,
"g" : 0,
"b" : 0,
"a" : 1
},
"originalEmissionIntensity" : 0,
"attachedElementGuid" : {
"value" : "a8116ee7-8b13-4485-b079-75662791d7ec"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
"effectCollection" : {"Generate":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNoteGenerateExpand_BM,Assembly-CSharp",
"generateTime" : 0.8,
"effectTime" : 0.2
}
],"GeneralJudge":[
],"StartHold":[
],"Holding":[
],"Perfect":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNotePerfectBurst_BM,Assembly-CSharp",
"effectTime" : 0
}
],"Good":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNoteGoodBurst_BM,Assembly-CSharp",
"effectTime" : 0
}
],"Bad":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNoteBadBurst_BM,Assembly-CSharp",
"effectTime" : 0
}
],"Miss":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNoteMissTransparent_BM,Assembly-CSharp",
"effectTime" : 0.2
}
],"AfterJudge":[
]
},
"attachedElementGuid" : {
"value" : "a8116ee7-8b13-4485-b079-75662791d7ec"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.Tap_BM,Assembly-CSharp",
"exactJudgeTime" : 6.5,
"elementName" : "New Tap",
"tags" : [
],
"elementGuid" : {
"value" : "5214a29e-723a-42c5-84b0-202068cf82d7"
},
"attachedElementGuid" : {
"value" : "99019f51-009c-49d9-95a0-b82e1d81ef56"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
"isOverridingDuration" : false,
"startTime" : -32767,
"endTime" : 32767,
"attachedElementGuid" : {
"value" : "5214a29e-723a-42c5-84b0-202068cf82d7"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.NoteAudioSubmodule_BM,Assembly-CSharp",
"generalJudgeAudioList" : [
"DefaultTap"
],
"perfectAudioList" : [
],
"goodAudioList" : [
],
"badAudioList" : [
],
"missAudioList" : [
],
"holdStartAudioList" : [
],
"holdEndAudioList" : [
],
"attachedElementGuid" : {
"value" : "5214a29e-723a-42c5-84b0-202068cf82d7"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.NoteJudgeSubmodule_BM,Assembly-CSharp",
"judgeUnitList" : [
{
"__type" : "Ichni.RhythmGame.Beatmap.TouchAreaJudgeUnit_BM,Assembly-CSharp",
"areaRadius" : 500
}
],
"attachedElementGuid" : {
"value" : "5214a29e-723a-42c5-84b0-202068cf82d7"
}
},{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNoteVisual_BM,Assembly-CSharp",
"isHighlighted" : false,
"themeBundleName" : "departure_to_multiverse",
"objectName" : "DTM_NoteVisualTap",
"elementName" : "New Note Visual",
"tags" : [
],
"elementGuid" : {
"value" : "f4333200-5012-4fd7-9a6e-dbf1f003c5a4"
},
"attachedElementGuid" : {
"value" : "5214a29e-723a-42c5-84b0-202068cf82d7"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
"originalPosition" : {
"x" : 0,
"y" : 0,
"z" : 0
},
"originalEulerAngles" : {
"x" : 0,
"y" : 0,
"z" : 0
},
"originalScale" : {
"x" : 1,
"y" : 1,
"z" : 1
},
"attachedElementGuid" : {
"value" : "f4333200-5012-4fd7-9a6e-dbf1f003c5a4"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
"isOverridingDuration" : false,
"startTime" : -32767,
"endTime" : 32767,
"attachedElementGuid" : {
"value" : "f4333200-5012-4fd7-9a6e-dbf1f003c5a4"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp",
"originalBaseColor" : {
"r" : 1,
"g" : 1,
"b" : 1,
"a" : 1
},
"emissionEnabled" : false,
"originalEmissionColor" : {
"r" : 0,
"g" : 0,
"b" : 0,
"a" : 1
},
"originalEmissionIntensity" : 0,
"attachedElementGuid" : {
"value" : "f4333200-5012-4fd7-9a6e-dbf1f003c5a4"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
"effectCollection" : {"Generate":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNoteGenerateExpand_BM,Assembly-CSharp",
"generateTime" : 0.8,
"effectTime" : 0.2
}
],"GeneralJudge":[
],"StartHold":[
],"Holding":[
],"Perfect":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNotePerfectBurst_BM,Assembly-CSharp",
"effectTime" : 0
}
],"Good":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNoteGoodBurst_BM,Assembly-CSharp",
"effectTime" : 0
}
],"Bad":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNoteBadBurst_BM,Assembly-CSharp",
"effectTime" : 0
}
],"Miss":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNoteMissTransparent_BM,Assembly-CSharp",
"effectTime" : 0.2
}
],"AfterJudge":[
]
},
"attachedElementGuid" : {
"value" : "f4333200-5012-4fd7-9a6e-dbf1f003c5a4"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.Tap_BM,Assembly-CSharp",
"exactJudgeTime" : 8,
"elementName" : "New Tap",
"tags" : [
],
"elementGuid" : {
"value" : "4e520654-523e-4219-88c2-1c29408ba4b9"
},
"attachedElementGuid" : {
"value" : "99019f51-009c-49d9-95a0-b82e1d81ef56"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
"isOverridingDuration" : false,
"startTime" : -32767,
"endTime" : 32767,
"attachedElementGuid" : {
"value" : "4e520654-523e-4219-88c2-1c29408ba4b9"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.NoteAudioSubmodule_BM,Assembly-CSharp",
"generalJudgeAudioList" : [
"DefaultTap"
],
"perfectAudioList" : [
],
"goodAudioList" : [
],
"badAudioList" : [
],
"missAudioList" : [
],
"holdStartAudioList" : [
],
"holdEndAudioList" : [
],
"attachedElementGuid" : {
"value" : "4e520654-523e-4219-88c2-1c29408ba4b9"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.NoteJudgeSubmodule_BM,Assembly-CSharp",
"judgeUnitList" : [
{
"__type" : "Ichni.RhythmGame.Beatmap.TouchAreaJudgeUnit_BM,Assembly-CSharp",
"areaRadius" : 500
}
],
"attachedElementGuid" : {
"value" : "4e520654-523e-4219-88c2-1c29408ba4b9"
}
},{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNoteVisual_BM,Assembly-CSharp",
"isHighlighted" : false,
"themeBundleName" : "departure_to_multiverse",
"objectName" : "DTM_NoteVisualTap",
"elementName" : "New Note Visual",
"tags" : [
],
"elementGuid" : {
"value" : "6aa5a5e8-f532-44d7-b2ca-965611ec9e26"
},
"attachedElementGuid" : {
"value" : "4e520654-523e-4219-88c2-1c29408ba4b9"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
"originalPosition" : {
"x" : 0,
"y" : 0,
"z" : 0
},
"originalEulerAngles" : {
"x" : 0,
"y" : 0,
"z" : 0
},
"originalScale" : {
"x" : 1,
"y" : 1,
"z" : 1
},
"attachedElementGuid" : {
"value" : "6aa5a5e8-f532-44d7-b2ca-965611ec9e26"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
"isOverridingDuration" : false,
"startTime" : -32767,
"endTime" : 32767,
"attachedElementGuid" : {
"value" : "6aa5a5e8-f532-44d7-b2ca-965611ec9e26"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp",
"originalBaseColor" : {
"r" : 1,
"g" : 1,
"b" : 1,
"a" : 1
},
"emissionEnabled" : false,
"originalEmissionColor" : {
"r" : 0,
"g" : 0,
"b" : 0,
"a" : 1
},
"originalEmissionIntensity" : 0,
"attachedElementGuid" : {
"value" : "6aa5a5e8-f532-44d7-b2ca-965611ec9e26"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
"effectCollection" : {"Generate":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNoteGenerateExpand_BM,Assembly-CSharp",
"generateTime" : 0.8,
"effectTime" : 0.2
}
],"GeneralJudge":[
],"StartHold":[
],"Holding":[
],"Perfect":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNotePerfectBurst_BM,Assembly-CSharp",
"effectTime" : 0
}
],"Good":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNoteGoodBurst_BM,Assembly-CSharp",
"effectTime" : 0
}
],"Bad":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNoteBadBurst_BM,Assembly-CSharp",
"effectTime" : 0
}
],"Miss":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNoteMissTransparent_BM,Assembly-CSharp",
"effectTime" : 0.2
}
],"AfterJudge":[
]
},
"attachedElementGuid" : {
"value" : "6aa5a5e8-f532-44d7-b2ca-965611ec9e26"
}
}
],
"attachedElementGuid" : {

View File

@@ -6,7 +6,7 @@
"creatorName" : "TR",
"editorVersion" : "0.1.0",
"createTime" : "2026\/7\/22 14:02:51",
"lastSaveTime" : "2026\/7\/24 23:09:22",
"lastSaveTime" : "2026\/7\/25 9:50:41",
"selectedThemeBundleList" : [
"basic","departure_to_multiverse"
],

View File

@@ -41,6 +41,7 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
public override void Adjust()
{
effectParticle = LeanPool.Spawn(noteVisual.effectPrefabList[0], noteVisual.judgeEffect.transform).GetComponent<ParticleSystem>();
if (EditorManager.instance.cameraManager.gameCamera != null)
effectParticle.transform.SetParent(EditorManager.instance.cameraManager.gameCamera.transform);
effectParticle.Play();