优化:

Signed-off-by: TRADER_FOER <lhf190@outlook.com>
This commit is contained in:
2026-06-29 22:17:57 +08:00
parent a6f24c4258
commit 5158c529f7
74 changed files with 935476 additions and 18854 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using UnityEngine;
namespace Ichni.RhythmGame.Beatmap
{
@@ -35,5 +36,15 @@ namespace Ichni.RhythmGame.Beatmap
{
(matchedElement as DisplacementTracker).targetDisplacement = GetElement(targetDisplacementGuid) as ICanBeTrackedDisplacement;
}
/// <summary>
/// 不应通过子模块路径到达此处——Tracker_BM 由 IExportOverride 在父级处理。
/// 如被执行说明数据流异常,报错以便排查。
/// </summary>
public void OnExport(BaseElement_BM parentBM)
{
Debug.LogError($"DisplacementTracker_BM 不应出现在导出子模块中!" +
$"应通过 IExportOverride.GetExportElement() 在父级处理。element: {elementName}");
}
}
}

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using UnityEngine;
namespace Ichni.RhythmGame.Beatmap
{
@@ -35,5 +36,15 @@ namespace Ichni.RhythmGame.Beatmap
{
(matchedElement as ScaleTracker).targetScale = GetElement(targetScaleGuid) as ICanBeTrackedScale;
}
/// <summary>
/// 不应通过子模块路径到达此处——Tracker_BM 由 IExportOverride 在父级处理。
/// 如被执行说明数据流异常,报错以便排查。
/// </summary>
public void OnExport(BaseElement_BM parentBM)
{
Debug.LogError($"ScaleTracker_BM 不应出现在导出子模块中!" +
$"应通过 IExportOverride.GetExportElement() 在父级处理。element: {elementName}");
}
}
}

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using UnityEngine;
namespace Ichni.RhythmGame.Beatmap
{
@@ -35,5 +36,15 @@ namespace Ichni.RhythmGame.Beatmap
{
(matchedElement as SwirlTracker).targetSwirl = GetElement(targetSwirlGuid) as ICanBeTrackedSwirl;
}
/// <summary>
/// 不应通过子模块路径到达此处——Tracker_BM 由 IExportOverride 在父级处理。
/// 如被执行说明数据流异常,报错以便排查。
/// </summary>
public void OnExport(BaseElement_BM parentBM)
{
Debug.LogError($"SwirlTracker_BM 不应出现在导出子模块中!" +
$"应通过 IExportOverride.GetExportElement() 在父级处理。element: {elementName}");
}
}
}

View File

@@ -30,7 +30,64 @@ namespace Ichni.RhythmGame.Beatmap
return Vector3Interferometer.GenerateElement(elementName, Guid.NewGuid(), tags, false,
parent as AnimationBase, InterferomType, InterferomValueVector3);
}
/// <summary>
/// 导出预处理:将自己的干涉仪效果烘焙到父元素的动画数据中。
/// </summary>
public void OnExport(BaseElement_BM parentBM)
{
// 将干涉仪值按分量应用到父元素的 FlexibleFloat_BM 数据上
if (parentBM is Swirl_BM swirl)
{
ApplyToFlexibleFloat(swirl.eulerAngleX, 0);
ApplyToFlexibleFloat(swirl.eulerAngleY, 1);
ApplyToFlexibleFloat(swirl.eulerAngleZ, 2);
}
else if (parentBM is Scale_BM scale)
{
ApplyToFlexibleFloat(scale.scaleX, 0);
ApplyToFlexibleFloat(scale.scaleY, 1);
ApplyToFlexibleFloat(scale.scaleZ, 2);
}
else if (parentBM is Displacement_BM disp)
{
ApplyToFlexibleFloat(disp.positionX, 0);
ApplyToFlexibleFloat(disp.positionY, 1);
ApplyToFlexibleFloat(disp.positionZ, 2);
}
}
private void ApplyToFlexibleFloat(FlexibleFloat_BM flex, int axis)
{
if (flex == null) return;
float value = InterferomValueVector3[axis];
foreach (var anim in flex.animatedFloatList)
{
switch (InterferomType)
{
case InterferomType.Additive:
anim.startValue += value;
anim.endValue += value;
break;
case InterferomType.Multiplicative:
anim.startValue *= value;
anim.endValue *= value;
break;
case InterferomType.Override:
anim.startValue = value;
anim.endValue = value;
break;
}
}
}
}
public interface ICanNotInExport { }
public interface ICanNotInExport
{
/// <summary>
/// 导出时预处理:将自身效果烘焙到 parentBM 上,或执行其他必要变换。
/// 调用后该元素将被从导出结果中移除。
/// </summary>
void OnExport(BaseElement_BM parentBM);
}
}

View File

@@ -56,10 +56,27 @@ namespace Ichni.RhythmGame.Beatmap
}
}
// 导出时跳过不应出现在最终结果中的主元素(如干涉仪 BM、Tracker BM
// 这些元素的效果已在父级 GetExportElement() 中烘焙完毕
if (forExport && elementToAdd is ICanNotInExport)
{
continue;
}
elementList.Add(elementToAdd);
List<BaseElement_BM> submodules = gameElement.submoduleList.ConvertAll(s => s.matchedBM);
submodules.RemoveAll(s => s == null);
// 导出时ICanNotInExport 子模块先执行导出策略(如将干涉仪效果烘焙到父元素),再移除
if (forExport)
{
foreach (var sub in submodules.OfType<ICanNotInExport>())
{
sub.OnExport(elementToAdd);
}
submodules.RemoveAll(s => s is ICanNotInExport);
}
// 当使用了替代元素时,将其 Guid 附给子模块
if (elementToAdd != gameElement.matchedBM)
{

View File

@@ -13,14 +13,16 @@ namespace Ichni.RhythmGame
#region [UI映射] Hierarchy & UI Mapping
//与游戏物体连接的Tab
public HierarchyTab connectedTab;
public Action RefreshAction;
public class EnableType : IBaseElement
{
public Type type;
public bool enable;
public BaseElement_BM matchedBM { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
}
public List<EnableType> enableTypes;
#endregion
@@ -30,6 +32,7 @@ namespace Ichni.RhythmGame
{
if (connectedTab != null) connectedTab.tabButtonText.text = this.elementName;
gameObject.name = elementName;
RefreshAction?.Invoke();
}
/// <summary>
@@ -65,7 +68,7 @@ namespace Ichni.RhythmGame
Destroy(gameObject); //销毁
}
#endregion
#region [] Inspector UI
/// <summary>
@@ -134,7 +137,7 @@ namespace Ichni.RhythmGame
#endregion
#region [] Utility Nodes Retrieving
/// <summary>
/// 获取所有子GameElement
/// </summary>
@@ -171,7 +174,7 @@ namespace Ichni.RhythmGame
{
if (et.enable) enabledTypes.Add(et.type);
}
return childElementList.FindAll(child =>
child != null && enabledTypes.Any(t => t.IsAssignableFrom(child.GetType()))
);

View File

@@ -54,8 +54,17 @@ namespace Ichni.RhythmGame
#endregion
#region [] Tool Methods
public Action PasteAction = null;
private void PasteTrackList()
{
if (PasteAction == null)
{
PasteAction = () =>
{
PasteTrackList();
};
}
List<Track> trackList = (parentElement as ElementFolder).trackList;
trackSwitch = new FlexibleInt();
trackPercent = new FlexibleFloat();
@@ -66,6 +75,8 @@ namespace Ichni.RhythmGame
trackList.IndexOf(track)));
trackPercent.animations.Add(new AnimatedFloat(trackTimeSubmodule.trackStartTime,
trackTimeSubmodule.trackEndTime, 0, 1, trackTimeSubmodule.animationCurveType));
track.RefreshAction -= PasteAction;
track.RefreshAction += PasteAction;
}
}
#endregion

View File

@@ -193,8 +193,12 @@ namespace Ichni.RhythmGame
Refresh();
SaveBM();
parentElement.SaveBM();
return new Displacement_BM(elementName, elementGuid, tags, parentElement.matchedBM as GameElement_BM,
var result = new Displacement_BM(elementName, elementGuid, tags, parentElement.matchedBM as GameElement_BM,
positionX.ConvertToBM(), positionY.ConvertToBM(), positionZ.ConvertToBM());
// 将 Tracker 自身的干涉仪效果烘焙到导出数据中
((IHaveVector3Interferometer)this).ApplyVector3InterferometersBM(
result.positionX, result.positionY, result.positionZ);
return result;
}
#endregion

View File

@@ -184,8 +184,12 @@ namespace Ichni.RhythmGame
Refresh();
SaveBM();
parentElement.SaveBM();
return new Scale_BM(elementName, elementGuid, tags, parentElement.matchedBM as GameElement_BM,
var result = new Scale_BM(elementName, elementGuid, tags, parentElement.matchedBM as GameElement_BM,
scaleX.ConvertToBM(), scaleY.ConvertToBM(), scaleZ.ConvertToBM());
// 将 Tracker 自身的干涉仪效果烘焙到导出数据中
((IHaveVector3Interferometer)this).ApplyVector3InterferometersBM(
result.scaleX, result.scaleY, result.scaleZ);
return result;
}
#endregion
}

View File

@@ -184,8 +184,12 @@ namespace Ichni.RhythmGame
Refresh();
SaveBM();
parentElement.SaveBM();
return new Swirl_BM(elementName, elementGuid, tags, parentElement.matchedBM as GameElement_BM,
var result = new Swirl_BM(elementName, elementGuid, tags, parentElement.matchedBM as GameElement_BM,
eulerAngleX.ConvertToBM(), eulerAngleY.ConvertToBM(), eulerAngleZ.ConvertToBM());
// 将 Tracker 自身的干涉仪效果烘焙到导出数据中
((IHaveVector3Interferometer)this).ApplyVector3InterferometersBM(
result.eulerAngleX, result.eulerAngleY, result.eulerAngleZ);
return result;
}
#endregion
}

View File

@@ -80,7 +80,8 @@ namespace Ichni.RhythmGame
var export = new BeatmapContainer_BM(gameElementList, true);
if (export.elementList.Any(i => i is ICanNotInExport))
{
Debug.LogError("Export Error!");
Debug.LogError($"导出失败elementList 仍包含 ICanNotInExport 元素。" +
$"这些元素本应在 BeatmapContainer_BM 构造时被过滤。");
}
return export;
}

View File

@@ -43,7 +43,7 @@ namespace Ichni.RhythmGame
{
".mp3" => LoadMP3(songLocation),
".ogg" => ES3.LoadAudio(songLocation, AudioType.OGGVORBIS),
".wav" => ES3.LoadAudio(songLocation, AudioType.WAV),
".wav" => LoadWav(songLocation),
_ => throw new Exception("Unsupported audio format: " + extension)
};
@@ -75,6 +75,84 @@ namespace Ichni.RhythmGame
position => { mpegFile = new MpegFile(filepath); });
return ac;
}
/// <summary>手动解码 WAV 文件为 PCM AudioClip。
/// 支持 8/16/24/32-bit PCM 以及 32-bit IEEE floatformatTag=3
/// Unity 的 AudioType.WAV 不支持 32-bit WAV导出版本 GetData 返回全零),
/// 所以需要自己解析 WAV 头 + 转换采样到 float PCM。</summary>
private AudioClip LoadWav(string filepath)
{
string filename = Path.GetFileNameWithoutExtension(filepath);
using var stream = File.OpenRead(filepath);
using var reader = new BinaryReader(stream);
// ── RIFF 头 ──
if (new string(reader.ReadChars(4)) != "RIFF")
throw new Exception("Not a valid WAV file");
reader.ReadInt32(); // file size
if (new string(reader.ReadChars(4)) != "WAVE")
throw new Exception("Not a valid WAV file");
int channels = 0, sampleRate = 0, bitsPerSample = 0;
short formatTag = 1; // 1 = PCM, 3 = IEEE float
float[] samples = null;
// ── 逐 chunk 解析 ──
while (stream.Position < stream.Length - 8)
{
string chunkId = new string(reader.ReadChars(4));
int chunkSize = reader.ReadInt32();
long chunkEnd = stream.Position + chunkSize;
switch (chunkId)
{
case "fmt ":
formatTag = reader.ReadInt16();
channels = reader.ReadInt16();
sampleRate = reader.ReadInt32();
reader.ReadInt32(); // avgBytesPerSec
reader.ReadInt16(); // blockAlign
bitsPerSample = reader.ReadInt16();
break;
case "data":
int bytesPerSample = bitsPerSample / 8;
int totalFloats = chunkSize / bytesPerSample;
samples = new float[totalFloats];
for (int i = 0; i < totalFloats; i++)
{
if (formatTag == 3 && bitsPerSample == 32) // IEEE float
samples[i] = reader.ReadSingle();
else if (bitsPerSample == 32) // 32-bit PCM
samples[i] = reader.ReadInt32() / 2147483648f;
else if (bitsPerSample == 24) // 24-bit PCM
{
int s = reader.ReadByte() | (reader.ReadByte() << 8) | (reader.ReadByte() << 16);
if ((s & 0x800000) != 0) s |= ~0xFFFFFF; // sign extend
samples[i] = s / 8388607f;
}
else if (bitsPerSample == 16) // 16-bit PCM
samples[i] = reader.ReadInt16() / 32767f;
else if (bitsPerSample == 8) // 8-bit PCM (unsigned)
samples[i] = (reader.ReadByte() - 128) / 128f;
}
break;
}
// 跳到 chunk 末尾(含 word alignment padding
stream.Position = chunkEnd;
if ((chunkSize & 1) != 0) stream.Position++;
}
if (samples == null)
throw new Exception("No data chunk found in WAV file");
int totalSamples = samples.Length / channels;
AudioClip ac = AudioClip.Create(filename, totalSamples, channels, sampleRate, false);
ac.SetData(samples, 0);
return ac;
}
#endregion
#region [] Inspector

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 05e37226c302f0640b9424fe2d671d7b
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: 714058dc1be1f9e4ea56ea612bdb5fc9
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 0365df55a85e0734eb9097c57c44581d
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: a0313b3577fd0c64a87eaa080d5dfc25
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -486,7 +486,7 @@
},{
"__type" : "Ichni.RhythmGame.Beatmap.CrossTrackPoint_BM,Assembly-CSharp",
"trackSwitch" : {
"value" : 2,
"value" : 5,
"animations" : [
{
"value" : 0,
@@ -510,7 +510,7 @@
]
},
"trackPercent" : {
"value" : 0.05160826,
"value" : 0.676872551,
"animations" : [
{
"startValue" : 0,
@@ -200326,105 +200326,6 @@
"attachedElementGuid" : {
"value" : "1b22ef16-46af-4cc0-8471-9516249caa14"
}
},{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMStarrySkybox_BM,Assembly-CSharp",
"skyColorR" : 0,
"skyColorG" : 0,
"skyColorB" : 1,
"skyColorA" : 1,
"horizonR" : 0,
"horizonG" : 1,
"horizonB" : 1,
"horizonA" : 1,
"horizonStrength" : 2,
"horizonSkyHeight" : 0.7,
"useStarMap" : true,
"starDensity" : 30.0000362,
"starSize" : 50.078064,
"starColorR" : 1,
"starColorG" : 1,
"starColorB" : 1,
"starColorA" : 1,
"preventStarsInFrontOfSun" : true,
"starMapTextureName" : "None",
"haveSun" : false,
"sunMaskTextureName" : "None",
"sunMaskSize" : 0.07891946,
"sunMaskSpherize" : 16.4190655,
"sunDiscSize" : 1,
"sunColorOneR" : 1,
"sunColorOneG" : 1,
"sunColorOneB" : 1,
"sunColorOneA" : 1,
"sunColorTwoR" : 1,
"sunColorTwoG" : 1,
"sunColorTwoB" : 1,
"sunColorTwoA" : 1,
"sunGradientStrength" : 0,
"sunGradientHeight" : 1.23,
"fogHeight" : 1,
"fogPower" : 0.5,
"fogContrast" : 5,
"isStatic" : false,
"themeBundleName" : "departure_to_multiverse",
"objectName" : "DTM_StarrySkybox",
"elementName" : "New Environment Object",
"tags" : [
],
"elementGuid" : {
"value" : "5c47cca5-cb0c-47b7-972f-17f372b2c0a5"
},
"attachedElementGuid" : {
"value" : "1b22ef16-46af-4cc0-8471-9516249caa14"
}
},{
"__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" : "5c47cca5-cb0c-47b7-972f-17f372b2c0a5"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
"isOverridingDuration" : false,
"startTime" : -32767,
"endTime" : 32767,
"attachedElementGuid" : {
"value" : "5c47cca5-cb0c-47b7-972f-17f372b2c0a5"
}
},{
"__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" : "5c47cca5-cb0c-47b7-972f-17f372b2c0a5"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.BasicEnvironmentObject_BM,Assembly-CSharp",
"shadowThreshold" : 0,

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,2 @@
ÀîqXóQzv”«y]¬±GÈ»¹ŒžìDg¯ð½¡€'$ÄFÌ^ćHCöŽM>'•4W)G‡ïÖ¦Û˜o¦¦Mü¶1˜å_7Ï_Á¦_î*ïhrñ<È8GÙÍDzm¯Ž©È—ú°ßQ±UÝÙ±¯²®@Šêjs3ò£¨Ý>¬¿<C2AC>û*ä=FÞÁ ” ŽErR—"Nr½
S:@å#9vÍL.ØÃÆè,:Ðƒí¦¨V½rUK1á/”§º4N˜N

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 90e55cce139c75745a8ba6fd59b40409
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: 459f5040a1e050348bf9d29385908b0e
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,13 @@
{
"CommandScripts" : {
"__type" : "Ichni.RhythmGame.Beatmap.CommandScripts_BM,Assembly-CSharp",
"value" : {
"commandList" : [
],
"attachedElementGuid" : {
"value" : "00000000-0000-0000-0000-000000000000"
}
}
}
}

View File

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

View File

@@ -0,0 +1,23 @@
{
"ProjectInformation" : {
"__type" : "Ichni.RhythmGame.Beatmap.ProjectInformation_BM,Assembly-CSharp",
"value" : {
"projectName" : "AC hard",
"creatorName" : "TRADER",
"editorVersion" : "0.1.0",
"createTime" : "2026\/2\/15 10:43:24",
"lastSaveTime" : "2026\/6\/29 2:16:15",
"selectedThemeBundleList" : [
"basic","departure_to_multiverse"
],
"tagManager" : {
"tagMatchers" : [
]
},
"attachedElementGuid" : {
"value" : "00000000-0000-0000-0000-000000000000"
}
}
}
}

View File

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

View File

@@ -0,0 +1,14 @@
{
"SongInformation" : {
"__type" : "Ichni.RhythmGame.Beatmap.SongInformation_BM,Assembly-CSharp",
"value" : {
"songName" : "alunite cas.wav",
"bpm" : 200,
"delay" : 0,
"offset" : -0.02,
"attachedElementGuid" : {
"value" : "00000000-0000-0000-0000-000000000000"
}
}
}
}

View File

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

View File

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

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 12de96a22cd764d48a0b2caf487942c2
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: 8481989e6404fea47ba80405969d3b59
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -0,0 +1,13 @@
{
"CommandScripts" : {
"__type" : "Ichni.RhythmGame.Beatmap.CommandScripts_BM,Assembly-CSharp",
"value" : {
"commandList" : [
],
"attachedElementGuid" : {
"value" : "00000000-0000-0000-0000-000000000000"
}
}
}
}

View File

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

View File

@@ -0,0 +1,23 @@
{
"ProjectInformation" : {
"__type" : "Ichni.RhythmGame.Beatmap.ProjectInformation_BM,Assembly-CSharp",
"value" : {
"projectName" : "Your Shadow EZ",
"creatorName" : "Trader",
"editorVersion" : "0.1.0",
"createTime" : "2026\/6\/29 18:47:14",
"lastSaveTime" : "2026\/6\/29 21:59:46",
"selectedThemeBundleList" : [
"basic","departure_to_multiverse"
],
"tagManager" : {
"tagMatchers" : [
]
},
"attachedElementGuid" : {
"value" : "00000000-0000-0000-0000-000000000000"
}
}
}
}

View File

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

View File

@@ -0,0 +1,14 @@
{
"SongInformation" : {
"__type" : "Ichni.RhythmGame.Beatmap.SongInformation_BM,Assembly-CSharp",
"value" : {
"songName" : "Your Shadow.wav",
"bpm" : 180,
"delay" : 0,
"offset" : 0,
"attachedElementGuid" : {
"value" : "00000000-0000-0000-0000-000000000000"
}
}
}
}

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
ManifestFileVersion: 0
UnityVersion: 6000.3.7f1
CRC: 2438471808
CRC: 3121674823
HashAppended: 0
AssetBundleManifest:
AssetBundleInfos:
@@ -8,15 +8,15 @@ AssetBundleManifest:
Name: basic
Dependencies: {}
Info_1:
Name: metropolis_on_orbit
Dependencies: {}
Info_2:
Name: departure_to_multiverse
Dependencies:
Dependency_0: shapes
Info_2:
Name: metropolis_on_orbit
Dependencies: {}
Info_3:
Name: unifiedraytracing
Dependencies: {}
Info_4:
Name: shapes
Dependencies: {}
Info_4:
Name: unifiedraytracing
Dependencies: {}

View File

@@ -1,16 +1,16 @@
ManifestFileVersion: 0
UnityVersion: 6000.3.7f1
CRC: 596612539
CRC: 582250975
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: 84cb6374cbf58b2b278a486ceccc33d8
Hash: 13d126ae7dd6d3da0aa7a461ca13670e
TypeTreeHash:
serializedVersion: 2
Hash: 51a9c20dab19416e261c53882aece497
IncrementalBuildHash:
serializedVersion: 2
Hash: 89114e17dccffbc3a51842b810fa96c4
Hash: 52cebab8000e947422055163300814fe
HashAppended: 0
ClassTypes:
- Class: 1

View File

@@ -1,16 +1,16 @@
ManifestFileVersion: 0
UnityVersion: 6000.3.7f1
CRC: 638149554
CRC: 3204532266
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: 80c1888ee1bc27b52530951d8b4101d1
Hash: c7fbde481e2809eded56f7e9b27ff2ce
TypeTreeHash:
serializedVersion: 2
Hash: 0c8f2af2122906b6fb7d5b5413f3c41f
Hash: 7a6d86b025ea71ec726e6e1a0727198e
IncrementalBuildHash:
serializedVersion: 2
Hash: 89096bf86a967d160e9f7512ca3c952f
Hash: a624e8f6439714fcfd7480ae59ef7d0e
HashAppended: 0
ClassTypes:
- Class: 1
@@ -31,6 +31,12 @@ ClassTypes:
Script: {instanceID: 0}
- Class: 64
Script: {instanceID: 0}
- Class: 74
Script: {instanceID: 0}
- Class: 91
Script: {instanceID: 0}
- Class: 95
Script: {instanceID: 0}
- Class: 96
Script: {instanceID: 0}
- Class: 114
@@ -39,6 +45,8 @@ ClassTypes:
Script: {fileID: 11500000, guid: 0def5156137c6d14082064fa7b5d5247, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 77ab80dc0820f9d4a8cd9fddbbc89057, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: b73aa7982dc9e4261b2ff45db0112d48, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: b37c44f04f3075045aef6be2c0506551, type: 3}
- Class: 114
@@ -107,4 +115,4 @@ Assets:
- Assets/ThemeBundles/DepartureToMultiverse/Prefabs/DTM_NoteVisualStay.prefab
- Assets/ThemeBundles/DepartureToMultiverse/Textures/Skybox/DTM_NoiseStar0.png
Dependencies:
- D:/Projects/IchniCreatorStudio/Assets/StreamingAssets/ThemeBundles/Windows64/shapes
- C:/ichniEditor-Source/IchniCreatorStudio/Assets/StreamingAssets/ThemeBundles/Windows64/shapes

View File

@@ -1,16 +1,16 @@
ManifestFileVersion: 0
UnityVersion: 6000.3.7f1
CRC: 710694427
CRC: 1233728374
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: cd11002ecefa9c68466817cddc848dac
Hash: 53b0e2c2ceb475465673db262b413819
TypeTreeHash:
serializedVersion: 2
Hash: 2059feeebcfd643174e01ec401e33f9c
IncrementalBuildHash:
serializedVersion: 2
Hash: 3004808577d6b30419ecd70193bf605a
Hash: 65c06be21750950eb290914e3969973c
HashAppended: 0
ClassTypes:
- Class: 1

View File

@@ -10,7 +10,7 @@ Hashes:
Hash: bc9f87c7e64ff656997db0f2b2a91703
IncrementalBuildHash:
serializedVersion: 2
Hash: 87a218d1ec15b08d97b6180b944afca3
Hash: 9d54c70c3cd81a791e67665a159682b8
HashAppended: 0
ClassTypes:
- Class: 28

View File

@@ -11,6 +11,7 @@ GameObject:
- component: {fileID: 5365034608843891105}
- component: {fileID: 8311872776517609736}
- component: {fileID: 8033154349789972278}
- component: {fileID: 6407084951632886441}
m_Layer: 0
m_Name: DTM_RegularGridFloor
m_TagString: Untagged
@@ -90,3 +91,54 @@ MeshRenderer:
m_SortingOrder: 0
m_MaskInteraction: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!114 &6407084951632886441
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8220859051912764878}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b73aa7982dc9e4261b2ff45db0112d48, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ichni.RhythmGame.EnvironmentObject
serializationData:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects: []
SerializedBytesString:
Prefab: {fileID: 0}
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes:
- Name: RefreshAction
Entry: 6
Data:
- Name: enableTypes
Entry: 6
Data:
- Name: elementGuid
Entry: 2
Data: 00000000000000000000000000000000
- Name: submoduleList
Entry: 7
Data: 0|System.Collections.Generic.List`1[[Ichni.RhythmGame.SubmoduleBase,
Assembly-CSharp]], mscorlib
- Name:
Entry: 12
Data: 0
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
connectedTab: {fileID: 0}
elementName:
tags: []
parentElement: {fileID: 0}
childElementList: []
themeBundleName:
objectName:
isStatic: 0