Substantial Object生成调整

可以正确的生成NoteVisual
This commit is contained in:
SoulliesOfficial
2025-02-22 01:56:33 -05:00
parent f941ca7dbc
commit 935cbbb029
37 changed files with 11095 additions and 154 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
</state>
</component>

BIN
Assets/.DS_Store vendored

Binary file not shown.

8
Assets/000_assets.meta Normal file
View File

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

481
Assets/000_assets/M_tap_01 1.mat Executable file
View File

@@ -0,0 +1,481 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: M_tap_01 1
m_Shader: {fileID: 4800000, guid: 4af258f019782954c9c32cd616f51c3b, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords:
- _DISSOLVE_TEX
- _VTO_TEX
m_InvalidKeywords:
- _CADDTEXUVT_ON
- _CUSTOMDATADIS_ON
- _DISSOLVEAR_ON
- _DISSOLVEPLUSTEXAR_ON
- _DISSOLVEPLUSTEXUVCLIP_ON
- _DISSOLVETEXAR_ON
- _DISSOLVETEXUVCLIP_ON
- _DISTORTMASKTEXAR_ON
- _DISTORTTEXAR_ON
- _DISTORTUINTENSITY_ON
- _DISTORTVINTENSITY_ON
- _FACE_Y
- _IFADDTEXCOLOR_ON
- _IFBEINGDISTORTED_ON
- _IFDISSOLVECOLOR_ON
- _MAINTEXUVCLIP_ON
- _MASKALPHARA_ON
- _MASKPLUSAR_ON
- _MASKTEXAR_ON
- _MASKTEXUVCLIP_ON
- _REFACTIONMASKTEXAR_ON
- _REFACTIONTEXAR_ON
- _VTOAR_ON
- _VTOFACTORCUSTOM_ON
- _VTOTEXAR_ON
- _VTOTEXUVCLIP_ON
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses:
- Distortion
- AfterDistortion
m_LockedProperties: _MainTex_ar
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _AddTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BaseMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DisslovePlusTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DissloveTex:
m_Texture: {fileID: 2800000, guid: 342297fdd4488f949a644a20f8b2e259, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DissolvePlusTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DissolveTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DistortMaskTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DistortTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MaskPlusTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MaskTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _RefactionMaskTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _RefactionTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _VTOMaskTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _VTOTex:
m_Texture: {fileID: 2800000, guid: 5392668a037c8bf49b4479948ee1f3fd, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_Lightmaps:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_LightmapsInd:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_ShadowMasks:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _AddRotate: 0
- _AddTexAR: 0
- _AddTexBlend: 0
- _AddTexC: 0
- _AddTexCV: 0
- _AddTexUspeed: 0
- _AddTexVspeed: 0
- _AlphaAdd: 0
- _AlphaClip: 0
- _AlphaCutoff: 0.5
- _AlphaToMask: 0
- _Blend: 0
- _BlendMode: 0
- _BlendModePreserveSpecular: 1
- _BumpScale: 1
- _CAddTexUV: 0
- _CAddTexUVT: 1
- _CenterU: 0.5
- _CenterV: 0.5
- _ClearCoatMask: 0
- _ClearCoatSmoothness: 0
- _Comparison: 8
- _Cull: 2
- _CullMode: 0
- _Cullmode: 2
- _CustomDataToZero: 1
- _CustomDissolve: 0
- _CustomDissolvePlusTexUOffset: 0
- _CustomDissolvePlusTexVOffset: 0
- _CustomDissolveTexUOffset: 0
- _CustomDissolveTexVOffset: 0
- _CustomDistort: 0
- _CustomDistortFactor: 0
- _CustomMainTexUOffset: 0
- _CustomMainTexVOffset: 0
- _CustomMaskTexUOffset: 0
- _CustomMaskTexVOffset: 0
- _CustomRefactionFactor: 0
- _CustomVTO: 0
- _CustomdataDis: 1
- _CustomdataDisT: 0
- _CustomdataMainTexUV: 0
- _CustomdataMaskUV: 0
- _Cutoff: 0.5
- _DIssloveFactor: 0.599
- _DIssloveSoft: 0
- _DIssloveWide: 0.1
- _DIssolve_rotat: 0
- _DepthFade: 1
- _DepthfadeFactor: 1
- _Depthfadeon: 0
- _DetailAlbedoMapScale: 1
- _DetailNormalMapScale: 1
- _DisTex_Uspeed: 0
- _DisTex_Vspeed: 0
- _DissolveAR: 1
- _DissolveC: 0
- _DissolveCV: 0
- _DissolveFactor: 0
- _DissolveFactorC: 1
- _DissolveFactorC1: 0
- _DissolveOffsetUC1: 1
- _DissolveOffsetVC1: 1
- _DissolvePlusAR: 0
- _DissolvePlusC: 0
- _DissolvePlusCV: 0
- _DissolvePlusIntensity: 0.5
- _DissolvePlusR: 0
- _DissolvePlusTexAR: 1
- _DissolvePlusTexDetail: 0
- _DissolvePlusTexRotator: 0
- _DissolvePlusTexUClamp: 0
- _DissolvePlusTexUMirror: 0
- _DissolvePlusTexUOffsetC: 1
- _DissolvePlusTexUSpeed: 0
- _DissolvePlusTexUVClip: 1
- _DissolvePlusTexVClamp: 0
- _DissolvePlusTexVMirror: 0
- _DissolvePlusTexVOffsetC: 1
- _DissolvePlusTexVSpeed: 0
- _DissolveSoft: 0.1
- _DissolveTexAR: 1
- _DissolveTexDetail: 0
- _DissolveTexDivide: 1
- _DissolveTexExp: 10
- _DissolveTexRotator: 0
- _DissolveTexUClamp: 0
- _DissolveTexUMirror: 0
- _DissolveTexUOffsetC: 1
- _DissolveTexUSpeed: 0
- _DissolveTexUVClip: 1
- _DissolveTexVClamp: 0
- _DissolveTexVMirror: 0
- _DissolveTexVOffsetC: 1
- _DissolveTexVSpeed: 0
- _DissolveWide: 0.05
- _DistortDissolveTex: 0
- _DistortFactor: 0
- _DistortFactorC: 1
- _DistortFactorC1: 1
- _DistortMainTex: 0
- _DistortMask: 0
- _DistortMaskTex: 0
- _DistortMaskTexAR: 1
- _DistortMaskTexC: 0
- _DistortMaskTexCV: 0
- _DistortMaskTexR: 0
- _DistortRemap: 0
- _DistortTexAR: 1
- _DistortTexDetail: 0
- _DistortTexRotator: 0
- _DistortTexUMirror: 0
- _DistortTexUSpeed: 0
- _DistortTexVMirror: 0
- _DistortTexVSpeed: 0
- _DistortTex_Uspeed: 0
- _DistortTex_Vspeed: 0
- _DistortUIntensity: 1
- _DistortVIntensity: 1
- _Dst: 10
- _DstBlend: 0
- _DstBlendAlpha: 0
- _EnvironmentReflections: 1
- _FDepth: 0
- _FDissolvePlusTex: 0
- _FDissolveTex: 0
- _FDistortTex: 0
- _FFnl: 0
- _FMaskTex: 0
- _FNLfanxiangkaiguan: 0
- _Face: 1
- _Fail: 0
- _FnlPower: 1
- _FnlScale: 0
- _GlossMapScale: 0
- _Glossiness: 0
- _GlossyReflections: 0
- _IfAddTex: 0
- _IfAddTexAlpha: 0
- _IfAddTexColor: 1
- _IfBeingDistorted: 1
- _IfDissolveColor: 1
- _IfDissolveOffsetC: 0
- _IfDissolvePlus: 0
- _IfFNLAlpha: 0
- _IfFlowmap: 0
- _IfMaskColor: 0
- _IfMaskPlusTex: 0
- _IfRefaction: 0
- _IfRefactionMask: 0
- _IfVTO: 0
- _MainAlpha: 1
- _MainOffsetUC1: 0
- _MainOffsetVC1: 0
- _MainRGBA: 14
- _MainTexAR: 0
- _MainTexCAFator: 0
- _MainTexDesaturate: 0
- _MainTexDetail: 0
- _MainTexRotator: 0
- _MainTexUClamp: 0
- _MainTexUMirror: 0
- _MainTexUOffsetC: 1
- _MainTexUSpeed: 0
- _MainTexUVClip: 1
- _MainTexVClamp: 0
- _MainTexVMirror: 0
- _MainTexVOffsetC: 1
- _MainTexVSpeed: 0
- _MainTex_Uspeed: 0
- _MainTex_Vspeed: 0
- _MainTex_ar: 0
- _MainTex_rotat: 0
- _MaintexC: 0
- _MaintexCV: 0
- _MaskAlphaRA: 1
- _MaskC: 0
- _MaskCV: 0
- _MaskOffsetUC1: 0
- _MaskOffsetVC1: 0
- _MaskPlusAR: 1
- _MaskPlusC: 0
- _MaskPlusCV: 0
- _MaskPlusR: 0
- _MaskPlusUspeed: 0
- _MaskPlusVspeed: 0
- _MaskTexAR: 1
- _MaskTexDetail: 0
- _MaskTexRotator: 0
- _MaskTexUClamp: 0
- _MaskTexUMirror: 0
- _MaskTexUOffsetC: 1
- _MaskTexUSpeed: 0
- _MaskTexUVClip: 1
- _MaskTexVClamp: 0
- _MaskTexVMirror: 0
- _MaskTexVOffsetC: 1
- _MaskTexVSpeed: 0
- _Mask_Uspeed: 0
- _Mask_Vspeed: 0
- _Mask_rotat: 0
- _Mask_scale: 1
- _Metallic: 0
- _OcclusionStrength: 1
- _Parallax: 0.005
- _Pass: 0
- _QueueControl: -1
- _QueueOffset: 0
- _ReFnl: 0
- _ReceiveShadows: 1
- _RefactionFactor: 0
- _RefactionFactorC: 1
- _RefactionMaskTexAR: 1
- _RefactionMaskTexDetail: 0
- _RefactionMaskTexRotator: 0
- _RefactionMaskTexUClamp: 0
- _RefactionMaskTexUMirror: 0
- _RefactionMaskTexUSpeed: 0
- _RefactionMaskTexUVClip: 0
- _RefactionMaskTexVClamp: 0
- _RefactionMaskTexVMirror: 0
- _RefactionMaskTexVSpeed: 0
- _RefactionRemap: 0
- _RefactionTexAR: 1
- _RefactionTexDetail: 0
- _RefactionTexRotator: 0
- _RefactionTexUMirror: 0
- _RefactionTexUSpeed: 0
- _RefactionTexVMirror: 0
- _RefactionTexVSpeed: 0
- _Reference: 0
- _SB: 0
- _SBCompare: 0
- _SceenTex: 0
- _Scr: 5
- _Smoothness: 0.5
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _SrcBlendAlpha: 1
- _Surface: 0
- _TextureUScale: 1
- _TextureUValue: 0
- _TextureVScale: 1
- _TextureVValue: 0
- _UVPolar: 0
- _VTOAR: 1
- _VTOC: 0
- _VTOCV: 0
- _VTOFactor: 0
- _VTOFactorC1: 1
- _VTOFactorCustom: 1
- _VTOR: 0
- _VTORemap: 0
- _VTOScale: 1
- _VTOScaleC: 1
- _VTOTexAR: 1
- _VTOTexDetail: 0
- _VTOTexRotator: 0
- _VTOTexUClamp: 0
- _VTOTexUMirror: 0
- _VTOTexUSpeed: 0
- _VTOTexUVClip: 1
- _VTOTexVClamp: 0
- _VTOTexVMirror: 0
- _VTOTexVSpeed: 0
- _VTOTex_Uspeed: 0
- _VTOTex_Vspeed: 0
- _WorkflowMode: 1
- _ZTest: 4
- _ZWrite: 1
- _Ztest: 4
- _Zwrite: 0
- __dirty: 1
- _fnl_power: 3.45
- _fnl_sacle: 1
- _softFacotr: 0
- _sot_sting_A: 0
m_Colors:
- _AddTexBlendModeVec4: {r: 1, g: 0, b: 0, a: 0}
- _AddTexColor: {r: 0, g: 0, b: 0, a: 0}
- _BackFaceColor: {r: 1, g: 1, b: 1, a: 0}
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _DIssloveColor: {r: 1, g: 1, b: 1, a: 1}
- _Dir: {r: 0, g: 0, b: 0, a: 0}
- _DissolveColor: {r: 1, g: 1, b: 1, a: 1}
- _DissolveFactorC2Vec4: {r: 0, g: 0, b: 1, a: 0}
- _DissolveOffsetUC2Vec4: {r: 1, g: 0, b: 0, a: 0}
- _DissolveOffsetVC2Vec4: {r: 0, g: 1, b: 0, a: 0}
- _DistortFactorC2Vec4: {r: 0, g: 0, b: 1, a: 0}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _FnlColor: {r: 1, g: 1, b: 1, a: 1}
- _MainColor: {r: 0.0050000013, g: 0.032580644, b: 0.1, a: 1}
- _MainOffsetUC2Vec4: {r: 1, g: 0, b: 0, a: 0}
- _MainOffsetVC2Vec4: {r: 0, g: 1, b: 0, a: 0}
- _MainTexRefine: {r: 1, g: 1, b: 1, a: 0}
- _MaskOffsetUC2Vec4: {r: 0, g: 0, b: 1, a: 0}
- _MaskOffsetVC2Vec4: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
- _VTOFactorC2Vec4: {r: 0, g: 0, b: 0, a: 1}
- _fnl_color: {r: 3.4680061, g: 12.21937, b: 12.844468, a: 1}
m_BuildTextureStacks: []
--- !u!114 &3905949624757751178
MonoBehaviour:
m_ObjectHideFlags: 11
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 7

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: ed3350df76a990c4ba0848b24f43a95d
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 309440712cd69174087f4d2526ad1502
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

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

BIN
Assets/000_assets/tex/0_white.tga Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -0,0 +1,144 @@
fileFormatVersion: 2
guid: 5392668a037c8bf49b4479948ee1f3fd
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 2
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 8192
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 8192
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 8192
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 8192
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Windows Store Apps
maxTextureSize: 8192
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

View File

@@ -0,0 +1,127 @@
fileFormatVersion: 2
guid: 342297fdd4488f949a644a20f8b2e259
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 12
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -140,9 +140,6 @@ MonoBehaviour:
- Name: elementGuid
Entry: 2
Data: 00000000000000000000000000000000
- Name: matchedBM
Entry: 6
Data:
- Name: submoduleList
Entry: 7
Data: 0|System.Collections.Generic.List`1[[Ichni.RhythmGame.SubmoduleBase,
@@ -156,21 +153,10 @@ MonoBehaviour:
- Name:
Entry: 8
Data:
- Name: timeDurationSubmodule
Entry: 6
Data:
- Name: transformSubmodule
Entry: 6
Data:
- Name: colorSubmodule
Entry: 6
Data:
- Name: PathNode+colorSubmodule
Entry: 6
Data:
elementName:
tags: []
parentElement: {fileID: 0}
connectedTab: {fileID: 0}
childElementList: []
track: {fileID: 0}
node:
@@ -181,3 +167,5 @@ MonoBehaviour:
size: 0
tangent: {x: 0, y: 0, z: 0}
tangent2: {x: 0, y: 0, z: 0}
pathNodeSphere: {fileID: 2852814640559356108}
isShowingSphere: 0

View File

@@ -211,7 +211,7 @@ namespace Ichni.Editor
float x = xs + (xe - xs) / loop * i;
float y = ys + (ye - ys) / loop * i;
float z = zs + (ze - zs) / loop * i;
PathNode j = PathNode.GenerateElement("PathNode" + i.ToString(), Guid.NewGuid(), new List<string>(), true, track);
PathNode j = PathNode.GenerateElement("PathNode" + i.ToString(), Guid.NewGuid(), new List<string>(), true, track, true);
j.transformSubmodule.originalPosition = new Vector3(x, y, z);
}

View File

@@ -45,7 +45,6 @@ namespace Ichni.RhythmGame
List<EffectBase> effectList = new List<EffectBase>();
foreach (var effectBM in effect.Value)
{
Debug.Log(attachedGameElement.GetType().ToString());
effectList.Add(effectBM.ConvertToGameType(attachedGameElement));
}
effectCollection.Add(effect.Key, effectList);

View File

@@ -2,6 +2,7 @@ using System;
using System.Collections;
using System.Collections.Generic;
using Dreamteck.Splines;
using Ichni.Editor;
using Ichni.RhythmGame.Beatmap;
using Lean.Pool;
using Unity.VisualScripting;
@@ -52,6 +53,18 @@ namespace Ichni.RhythmGame
{
matchedBM = new Tap_BM(elementName, elementGuid, tags, parentElement.matchedBM as GameElement_BM, exactJudgeTime);
}
public override void SetUpInspector()
{
base.SetUpInspector();
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Generate");
var generateNoteVisualButton = inspector.GenerateButton(this, container, "Generate Note Visual", () =>
{
TemporaryObject.GenerateElement("New Note Visual", Guid.NewGuid(), new List<string>(), true, this);
});
}
}
namespace Beatmap

View File

@@ -21,10 +21,22 @@ namespace Ichni.RhythmGame
GameObject themeBundleObject = ThemeBundleManager.instance.GetObject<GameObject>(themeBundleName, objectName);
SubstantialObject substantialObject = Instantiate(themeBundleObject, parentElement.transform).GetComponent<SubstantialObject>();
substantialObject.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
substantialObject.themeBundleName = themeBundleName;
substantialObject.objectName = objectName;
substantialObject.FirstSetUpObject(isFirstGenerated);
return substantialObject;
}
/// <summary>
/// 初次生成继承自SubstantialObject的对象时生成方法必然使用SubstantialObject中的GenerateElement方法。
/// 因此对于需要进行特殊处理的子类需要重写FirstSetUpObject方法。
/// 在读取Beatmap时生成物体则使用子类本身的GenerateElement方法。
/// </summary>
public virtual void FirstSetUpObject(bool isFirstGenerated)
{
}
protected override void SetDefaultSubmodules()
{
transformSubmodule = new TransformSubmodule(this);

View File

@@ -54,7 +54,7 @@ namespace Ichni.RhythmGame
{
Delete();
inspectorMain.ClearInspector();
SubstantialObject.GenerateElement(elementName, elementGuid, tags, false, themeBundleName, objectName, parentElement);
SubstantialObject.GenerateElement(elementName, elementGuid, tags, true, themeBundleName, objectName, parentElement);
});
if (themeBundleName == String.Empty || objectName == String.Empty)

View File

@@ -14,18 +14,20 @@ namespace Ichni.RhythmGame
public partial class PathNode : GameElement, IHaveTransformSubmodule, IHaveTimeDurationSubmodule, IHaveColorSubmodule
{
public Track track;
public int index => track.trackPathSubmodule.pathNodeList.IndexOf(this);
public SplinePoint node;
public int index => track.trackPathSubmodule.pathNodeList.IndexOf(this);
public TransformSubmodule transformSubmodule { get; set; }
public TimeDurationSubmodule timeDurationSubmodule { get; set; }
public ColorSubmodule colorSubmodule { get; set; }
public bool haveEmission => false;
[Title("Editor独有参数")]
[SerializeField] [HideInPlayMode]
private GameObject pathNodeSphere;
public bool isShowingSphere;
public static PathNode GenerateElement(string elementName, Guid id, List<string> tags, bool isFirstGenerated,
Track track)
Track track, bool isShowingSphere)
{
PathNode pathNode = Instantiate(EditorManager.instance.basePrefabs.pathNode, track.transform)
.GetComponent<PathNode>();
@@ -33,6 +35,8 @@ namespace Ichni.RhythmGame
pathNode.Initialize(elementName, id, tags, isFirstGenerated, track);
pathNode.track = track;
pathNode.isShowingSphere = isShowingSphere;
pathNode.SetPathNodeSphere(isShowingSphere);
track.trackPathSubmodule.pathNodeList.Add(pathNode);
return pathNode;
@@ -78,7 +82,13 @@ namespace Ichni.RhythmGame
{
public override void SaveBM()
{
matchedBM = new Beatmap.PathNode_BM(elementName, elementGuid, tags, parentElement.matchedBM as GameElement_BM);
matchedBM = new Beatmap.PathNode_BM(elementName, elementGuid, tags, parentElement.matchedBM as GameElement_BM, isShowingSphere);
}
public void SetPathNodeSphere(bool isShowing)
{
isShowingSphere = isShowing;
pathNodeSphere.SetActive(isShowing);
}
public override void SetUpInspector()
@@ -89,6 +99,8 @@ namespace Ichni.RhythmGame
var container = inspector.GenerateContainer("Path Node");
var indexText = inspector.GenerateHintText(this, container, "Index: " + index);
var isShowingSphereToggle = inspector.GenerateToggle(this, container, "Is Showing Sphere", nameof(isShowingSphere));
isShowingSphereToggle.AddListenerFunction(SetPathNodeSphere);
}
}
@@ -96,26 +108,28 @@ namespace Ichni.RhythmGame
{
public class PathNode_BM : GameElement_BM
{
public bool isShowingSphere;
public PathNode_BM()
{
}
public PathNode_BM(string elementName, Guid elementGuid, List<string> tags, GameElement_BM attachedElement)
public PathNode_BM(string elementName, Guid elementGuid, List<string> tags, GameElement_BM attachedElement,
bool isShowingSphere)
: base(elementName, elementGuid, tags, attachedElement)
{
this.isShowingSphere = isShowingSphere;
}
public override void ExecuteBM()
{
matchedElement = PathNode.GenerateElement(elementName, elementGuid, tags, false,
GetElement(attachedElementGuid) as Track);
GetElement(attachedElementGuid) as Track, isShowingSphere);
}
public override GameElement DuplicateBM(GameElement parent)
{
return PathNode.GenerateElement(elementName, elementGuid, tags, false, parent as Track);
return PathNode.GenerateElement(elementName, elementGuid, tags, false, parent as Track, isShowingSphere);
}
}
}

View File

@@ -75,35 +75,35 @@ namespace Ichni.RhythmGame
Inspector inspectorMain = EditorManager.instance.uiManager.inspector;
base.SetUpInspector();
var container = inspector.GenerateContainer("Track");
var trackPathButton = inspector.GenerateButton(this, container, "Track Path",
var trackSubmodulesContainer = inspector.GenerateContainer("Track Submodules"); //次级模块
var trackPathButton = inspector.GenerateButton(this, trackSubmodulesContainer, "Track Path",
() =>
{
trackPathSubmodule = new TrackPathSubmodule(this, TrackSpaceType.CatmullRom,
TrackSamplingType.TimeDistributed, false);
inspectorMain.SetInspector(this);
});
var trackTimeMovableButton = inspector.GenerateButton(this, container, "Track Time Movable",
var trackTimeMovableButton = inspector.GenerateButton(this, trackSubmodulesContainer, "Track Time Movable",
() =>
{
trackTimeSubmodule = new TrackTimeSubmoduleMovable(this, 0, 1, 1, AnimationCurveType.Linear);
inspectorMain.SetInspector(this);
});
var trackTimeStaticButton = inspector.GenerateButton(this, container, "Track Time Static",
var trackTimeStaticButton = inspector.GenerateButton(this, trackSubmodulesContainer, "Track Time Static",
() =>
{
trackTimeSubmodule = new TrackTimeSubmoduleStatic(this, 1, AnimationCurveType.Linear);
inspectorMain.SetInspector(this);
});
var trackRendererAutoOrientButton = inspector.GenerateButton(this, container, "Track Renderer Auto Orient",
var trackRendererAutoOrientButton = inspector.GenerateButton(this, trackSubmodulesContainer, "Track Renderer Auto Orient",
() =>
{
trackRendererSubmodule = new TrackRendererSubmoduleAutoOrient(this);
inspectorMain.SetInspector(this);
});
var trackRendererPathGeneratorButton = inspector.GenerateButton(this, container,
var trackRendererPathGeneratorButton = inspector.GenerateButton(this, trackSubmodulesContainer,
"Track Renderer Path Generator",
() =>
{
@@ -131,21 +131,70 @@ namespace Ichni.RhythmGame
trackRendererSubmodule.SetUpInspector();
}
var displacementButton = inspector.GenerateButton(this, container, "Displacement",
var generateContainer = inspector.GenerateContainer("Generate Elements"); //物体生成
var pathNodeButton = inspector.GenerateButton(this, generateContainer, "Path Node",
() =>
{
PathNode.GenerateElement("New Path Node", Guid.NewGuid(), new List<string>(), true, this, true);
}); //路径点
var trackPercentPointButton = inspector.GenerateButton(this, generateContainer, "Track Percent Point",
() =>
{
TrackPercentPoint.GenerateElement("New Track Percent Point", Guid.NewGuid(), new List<string>(),
true, this, new FlexibleFloat());
}); //百分比点
var trackHeadPointButton = inspector.GenerateButton(this, generateContainer, "Track Head Point",
() =>
{
TrackHeadPoint.GenerateElement("New Track Head Point", Guid.NewGuid(), new List<string>(),
true, this);
}); //头部点必须先有TrackTimeSubmoduleMovable
if (trackTimeSubmodule is not TrackTimeSubmoduleMovable) trackHeadPointButton.button.interactable = false;
var tapButton = inspector.GenerateButton(this, generateContainer, "Tap",
() =>
{
Tap.GenerateElement("New Tap", Guid.NewGuid(), new List<string>(), true, this, 0f);
}); //Note Tap
var stayButton = inspector.GenerateButton(this, generateContainer, "Stay",
() =>
{
Stay.GenerateElement("New Stay", Guid.NewGuid(), new List<string>(), true, this, 0f);
}); //Note Stay
// var holdButton = inspector.GenerateButton(this, generateContainer, "Hold",
// () =>
// {
// Hold.GenerateElement("New Hold", Guid.NewGuid(), new List<string>(), true, this, 0f);
// }); //Note Hold
var flickButton = inspector.GenerateButton(this, generateContainer, "Flick",
() =>
{
Flick.GenerateElement("New Flick", Guid.NewGuid(), new List<string>(), true, this, 0f,
new List<Vector2>());
}); //Note Flick
var displacementButton = inspector.GenerateButton(this, generateContainer, "Displacement",
() =>
{
Displacement.GenerateElement("New Displacement", Guid.NewGuid(), new List<string>(), true, this,
new FlexibleFloat(), new FlexibleFloat(), new FlexibleFloat());
});
}); //位移
var swirlButton = inspector.GenerateButton(this, container, "Swirl",
var swirlButton = inspector.GenerateButton(this, generateContainer, "Swirl",
() =>
{
Swirl.GenerateElement("New Swirl", Guid.NewGuid(), new List<string>(), true, this,
new FlexibleFloat(), new FlexibleFloat(), new FlexibleFloat());
});
}); //旋转
var QuickCopyButton = inspector.GenerateButton(this, container, "QuickCopy", () =>
var toolsContainerTrack = inspector.GenerateContainer("Track Tools"); //轨道(整体)快捷工具
var quickCopyButton = inspector.GenerateButton(this, toolsContainerTrack, "QuickCopy", () =>
{
IHaveInspection qcWindow = inspectorMain.GenerateSecondaryWindow(this, elementName + "'s Quick Copy");
var qcContainer = qcWindow.GenerateContainer();
@@ -163,9 +212,72 @@ namespace Ichni.RhythmGame
bool includeAnimation = includeAnimationToggle.toggle.isOn;
QuickCopy(positionOffset, timeOffset, includeAnimation, iteration);
});
}); //快速复制
var wholeTrackMoveButton = inspector.GenerateButton(this, toolsContainerTrack, "Whole Track Move", () =>
{
IHaveInspection wholeMoveWindow = inspectorMain.GenerateSecondaryWindow(this, elementName + "'s Whole Track Move");
var wmContainer = wholeMoveWindow.GenerateContainer();
var xField = wholeMoveWindow.GenerateGetterInputField(wmContainer, "X offset", "0");
var yField = wholeMoveWindow.GenerateGetterInputField(wmContainer, "Y offset", "0");
var zField = wholeMoveWindow.GenerateGetterInputField(wmContainer, "Z offset", "0");
wholeMoveWindow.GenerateButton(this, wmContainer, "Move", () =>
{
Vector3 positionOffset = new Vector3(xField.GetResult<float>(), yField.GetResult<float>(), zField.GetResult<float>());
WholeTrackMove(positionOffset);
});
}); //整体移动
var wholeTrackSwirlButton = inspector.GenerateButton(this, toolsContainerTrack, "Whole Track Swirl", () =>
{
IHaveInspection wholeSwirlWindow = inspectorMain.GenerateSecondaryWindow(this, elementName + "'s Whole Track Swirl");
var wsContainer = wholeSwirlWindow.GenerateContainer();
var angleField = wholeSwirlWindow.GenerateGetterInputField(wsContainer, "Angle", "0");
var centerXField = wholeSwirlWindow.GenerateGetterInputField(wsContainer, "Center X", "0");
var centerYField = wholeSwirlWindow.GenerateGetterInputField(wsContainer, "Center Y", "0");
var centerZField = wholeSwirlWindow.GenerateGetterInputField(wsContainer, "Center Z", "0");
var axisDirXField = wholeSwirlWindow.GenerateGetterInputField(wsContainer, "Axis Direction X", "0");
var axisDirYField = wholeSwirlWindow.GenerateGetterInputField(wsContainer, "Axis Direction Y", "0");
var axisDirZField = wholeSwirlWindow.GenerateGetterInputField(wsContainer, "Axis Direction Z", "0");
wholeSwirlWindow.GenerateButton(this, wsContainer, "Swirl", () =>
{
float angle = angleField.GetResult<float>();
Vector3 center = new Vector3(centerXField.GetResult<float>(), centerYField.GetResult<float>(), centerZField.GetResult<float>());
Vector3 axisDirection = new Vector3(axisDirXField.GetResult<float>(), axisDirYField.GetResult<float>(), axisDirZField.GetResult<float>());
WholeTrackSwirl(angle, center, axisDirection);
});
}); //整体旋转
var wholeTrackFlipButton = inspector.GenerateButton(this, toolsContainerTrack, "Whole Track Flip", () =>
{
IHaveInspection wholeFlipWindow = inspectorMain.GenerateSecondaryWindow(this, elementName + "'s Whole Track Flip");
var wfContainer = wholeFlipWindow.GenerateContainer();
var axisStartXField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis Start X", "0");
var axisStartYField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis Start Y", "0");
var axisStartZField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis Start Z", "0");
var axisEndXField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis End X", "0");
var axisEndYField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis End Y", "0");
var axisEndZField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis End Z", "0");
wholeFlipWindow.GenerateButton(this, wfContainer, "Flip", () =>
{
Vector3 axisStart = new Vector3(axisStartXField.GetResult<float>(), axisStartYField.GetResult<float>(), axisStartZField.GetResult<float>());
Vector3 axisEnd = new Vector3(axisEndXField.GetResult<float>(), axisEndYField.GetResult<float>(), axisEndZField.GetResult<float>());
WholeTrackFlip(axisStart, axisEnd);
});
}); //整体翻转
var toolsContainerPathNode = inspector.GenerateContainer("Path Node Tools"); //路径点快捷工具
var setAllPathNodeSphereButton = inspector.GenerateButton(this, toolsContainerPathNode,
"Set All Path Node Sphere", () =>
{
bool firstPathNodeSphere = trackPathSubmodule.pathNodeList[0].isShowingSphere;
SetAllPathNodeSphere(!firstPathNodeSphere);
});
container.SetDeviver(1);
var setOnlyStartEndPathNodeSphereEnabledButton = inspector.GenerateButton(this, toolsContainerPathNode,
"Only Start & End Path Node's sphere enabled", SetOnlyStartEndPathNodeSphereEnabled);
trackSubmodulesContainer.SetDeviver(1);
}
}

View File

@@ -85,7 +85,7 @@ namespace Ichni.RhythmGame
isClosedToggle.AddListenerFunction(_ => ClosePath());
var generatePathNodeButton = inspector.GenerateButton(this, container, "Generate Path Node", () =>
{
PathNode.GenerateElement("New Path Node", Guid.NewGuid(), new List<string>(), true, track);
PathNode.GenerateElement("New Path Node", Guid.NewGuid(), new List<string>(), true, track, true);
});
}
}

View File

@@ -4,7 +4,6 @@ using Dreamteck.Splines;
using Ichni.Editor;
using Unity.VisualScripting;
using UnityEngine;
using Inspector = Unity.VisualScripting.Inspector;
namespace Ichni.RhythmGame
{

View File

@@ -16,8 +16,8 @@ namespace Ichni.RhythmGame
/// <param name="iteration">迭代次数即产生几个粘贴的Track</param>
private void QuickCopy(Vector3 unitPositionOffset, float unitTimeOffset, bool includeAnimations = true, int iteration = 1)
{
if(iteration <= 0) return;
if (iteration <= 0) return;
CopyPasteDeleteModule cpd = EditorManager.instance.operationManager.CopyPasteDeleteModule;
cpd.CopyElement(this);
for (int i = 1; i <= iteration; i++)
@@ -26,31 +26,34 @@ namespace Ichni.RhythmGame
Track newTrack = cpd.pastedElementList[0] as Track;
Vector3 positionOffset = unitPositionOffset * i;
float timeOffset = unitTimeOffset * i;
//对Track的所有有效的Submodule和子GameElement进行偏移
if (newTrack.trackTimeSubmodule is TrackTimeSubmoduleMovable movable)
{
movable.trackStartTime += timeOffset;
movable.trackEndTime += timeOffset;
}
//以下:对Track的所有有效的Submodule和子GameElement进行偏移 TODO: 需要思考是否有统一时间偏移的方法?
//PathNode位置偏移
newTrack.trackPathSubmodule.pathNodeList.ForEach(pn =>
{
pn.transformSubmodule.originalPosition += positionOffset;
pn.transformSubmodule.Refresh();
});
//TrackTimeSubmoduleMovable时间偏移
if (newTrack.trackTimeSubmodule is TrackTimeSubmoduleMovable movable)
{
movable.trackStartTime += timeOffset;
movable.trackEndTime += timeOffset;
}
//获取所有newTrack及之下所有layer的GameElement
List<GameElement> allNewGameElements = newTrack.GetAllGameElementsFromThis();
List<TrackPercentPoint> percentPoints = allNewGameElements
.FindAll(x => x is TrackPercentPoint).Cast<TrackPercentPoint>().ToList();
//TrackPercentPoint,时间偏移
List<TrackPercentPoint> percentPoints = allNewGameElements.FindAll(x => x is TrackPercentPoint).Cast<TrackPercentPoint>().ToList();
percentPoints.ForEach(pp =>
{
pp.trackPercent.animations.ForEach(anim => anim.ApplyTimeOffset(timeOffset));
});
//Note时间偏移
List<NoteBase> notes = allNewGameElements.FindAll(x => x is NoteBase).Cast<NoteBase>().ToList();
notes.ForEach(note =>
{
@@ -58,19 +61,97 @@ namespace Ichni.RhythmGame
note.Refresh();
});
//Animation时间偏移可以根据需要选择是否偏移
if (includeAnimations)
{
List<AnimationBase> animations = allNewGameElements
.FindAll(x => x.GetType().IsSubclassOf(typeof(AnimationBase))).Cast<AnimationBase>().ToList();
animations.ForEach(anim =>
{
anim.ApplyTimeOffset(timeOffset);
});
.FindAll(x => x is AnimationBase).Cast<AnimationBase>().ToList();
animations.ForEach(anim => { anim.ApplyTimeOffset(timeOffset); });
}
}
cpd.pastedElementList.Clear();
}
/// <summary>
/// Track整体移动
/// </summary>
/// <param name="positionOffset">坐标偏移量</param>
private void WholeTrackMove(Vector3 positionOffset)
{
trackPathSubmodule.pathNodeList.ForEach(pn =>
{
pn.transformSubmodule.originalPosition += positionOffset;
pn.transformSubmodule.Refresh();
});
}
/// <summary>
/// Track整体旋转
/// </summary>
/// <param name="angle">旋转角度,单位:度,方向:顺时针</param>
/// <param name="center">旋转中心</param>
/// <param name="axisDirection">旋转轴方向</param>
private void WholeTrackSwirl(float angle, Vector3 center, Vector3 axisDirection)
{
if (axisDirection == Vector3.zero)
{
LogWindow.Log("Axis direction cannot be zero!", Color.red);
return;
}
trackPathSubmodule.pathNodeList.ForEach(pn =>
{
Vector3 originalPosition = pn.transformSubmodule.originalPosition;
Vector3 rotatedPosition = Quaternion.AngleAxis(angle, axisDirection) * (originalPosition - center) + center;
pn.transformSubmodule.originalPosition = rotatedPosition;
pn.transformSubmodule.Refresh();
});
}
/// <summary>
/// Track整体翻转
/// </summary>
/// <param name="axisStart">翻转轴起点</param>
/// <param name="axisEnd">翻转轴终点</param>
private void WholeTrackFlip(Vector3 axisStart, Vector3 axisEnd)
{
trackPathSubmodule.pathNodeList.ForEach(pn =>
{
Vector3 originalPosition = pn.transformSubmodule.originalPosition;
Vector3 flippedPosition = Vector3.Reflect(originalPosition - axisStart, axisEnd - axisStart) + axisStart;
pn.transformSubmodule.originalPosition = flippedPosition;
pn.transformSubmodule.Refresh();
});
}
/// <summary>
/// 仅开启起点和终点的PathNode的Sphere显示中间的PathNode不显示
/// </summary>
private void SetOnlyStartEndPathNodeSphereEnabled()
{
if (trackPathSubmodule.pathNodeList.Count < 2)
{
LogWindow.Log("PathNode amount is less than 2!", Color.red);
return;
}
trackPathSubmodule.pathNodeList[0].SetPathNodeSphere(true);
trackPathSubmodule.pathNodeList[^1].SetPathNodeSphere(true);
for (int i = 1; i < trackPathSubmodule.pathNodeList.Count - 1; i++)
{
trackPathSubmodule.pathNodeList[i].SetPathNodeSphere(false);
}
}
/// <summary>
/// 批量开启或关闭所有PathNode的Sphere显示
/// </summary>
/// <param name="isShowing"></param>
private void SetAllPathNodeSphere(bool isShowing)
{
trackPathSubmodule.pathNodeList.ForEach(pn => pn.SetPathNodeSphere(isShowing));
}
}
}

View File

@@ -85,45 +85,5 @@ namespace Ichni
songInformation.SetUpInspector();
cameraManager.SetUpInspector();
}
private void CreateNew()
{
projectManager.GenerateProject("TestProject");
var f0 = ElementFolder.GenerateElement("Folder", Guid.NewGuid(), new List<string>(), true, null);
var dis0 = Displacement.GenerateElement("Displacement-0",Guid.NewGuid(), new List<string>(),true, f0,
new FlexibleFloat(),
new FlexibleFloat(new List<AnimatedFloat>(){new (0,2,0,10, AnimationCurveType.Linear)}),
new FlexibleFloat());
var dis1 = Displacement.GenerateElement("Displacement-1", Guid.NewGuid(), new List<string>(), true, f0,
new FlexibleFloat(new List<AnimatedFloat>()
{
new(0, 0.5f, 0, -4, AnimationCurveType.OutQuad),
new(0.5f, 1, -4, 0, AnimationCurveType.InQuad),
new(1, 1.5f, 0, 4, AnimationCurveType.OutQuad),
new(1.5f, 2, 4, 0, AnimationCurveType.InQuad),
}),
new FlexibleFloat(new List<AnimatedFloat>(){new (0,2,0,-10, AnimationCurveType.Linear)}),
new FlexibleFloat());
var t0 = Track.GenerateElement("Track", Guid.NewGuid(), new List<string>(), true, f0);
t0.trackPathSubmodule = new TrackPathSubmodule(t0, Track.TrackSpaceType.Linear, Track.TrackSamplingType.TimeDistributed, false);
t0.submoduleList.Add(t0.trackPathSubmodule);
t0.trackTimeSubmodule = new TrackTimeSubmoduleMovable(t0, 0, 2, 1, AnimationCurveType.OutQuad);
t0.submoduleList.Add(t0.trackTimeSubmodule);
var pp0 = TrackPercentPoint.GenerateElement("TrackPercentPoint-0", Guid.NewGuid(), new List<string>(), true, t0,
new FlexibleFloat(new List<AnimatedFloat>() { new(0, 2, 0, 1, AnimationCurveType.OutQuad) }));
var tr0 = Trail.GenerateElement("Trail-0", Guid.NewGuid(), new List<string>(), true, pp0, 5);
// t0.trackRendererSubmodule = new TrackRendererSubmoduleAutoOrient(t0);
var p0 = PathNode.GenerateElement("PathNode-0", Guid.NewGuid(), new List<string>(), true, t0);
p0.transformSubmodule = new TransformSubmodule(p0, new Vector3(-5, 5, 10), Vector3.zero, Vector3.one);
p0.colorSubmodule = new ColorSubmodule(p0, Color.white);
var p1 = PathNode.GenerateElement("PathNode-1", Guid.NewGuid(), new List<string>(), true, t0);
p1.transformSubmodule = new TransformSubmodule(p1, new Vector3(5, -5, 10), Vector3.zero, Vector3.one);
p1.colorSubmodule = new ColorSubmodule(p1, Color.red);
var n0 = Tap.GenerateElement("Note-0", Guid.NewGuid(), new List<string>(), true, t0, 1f);
var n0v = BasicNoteVisual.GenerateElement("Note-0-V", Guid.NewGuid(), new List<string>(), true, n0,
"basic", "BasicNoteTap3D");
}
}
}

View File

@@ -273,6 +273,7 @@
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp",
"isShowingSphere" : true,
"elementName" : "PathNode-0",
"tags" : [
@@ -332,6 +333,7 @@
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.PathNode_BM,Assembly-CSharp",
"isShowingSphere" : true,
"elementName" : "PathNode-1",
"tags" : [
@@ -505,9 +507,6 @@
{
"__type" : "Ichni.RhythmGame.ThemeBundles.Basic.Beatmap.BasicNoteGenerateExpand_BM,Assembly-CSharp",
"generateTime" : 1,
"attachedNoteID" : {
"value" : "c5134d2c-c175-458c-99ff-07523169ec21"
},
"effectTime" : 0.1
}
],"GeneralJudge":[
@@ -517,33 +516,21 @@
],"Perfect":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.Basic.Beatmap.BasicNotePerfectBurst_BM,Assembly-CSharp",
"attachedNoteID" : {
"value" : "c5134d2c-c175-458c-99ff-07523169ec21"
},
"effectTime" : 0.1
}
],"Good":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.Basic.Beatmap.BasicNoteGoodBurst_BM,Assembly-CSharp",
"attachedNoteID" : {
"value" : "c5134d2c-c175-458c-99ff-07523169ec21"
},
"effectTime" : 0.1
}
],"Bad":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.Basic.Beatmap.BasicNoteBadExpand_BM,Assembly-CSharp",
"attachedNoteID" : {
"value" : "c5134d2c-c175-458c-99ff-07523169ec21"
},
"effectTime" : 0.1
}
],"Miss":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.Basic.Beatmap.BasicNoteMissPale_BM,Assembly-CSharp",
"attachedNoteID" : {
"value" : "c5134d2c-c175-458c-99ff-07523169ec21"
},
"effectTime" : 0.2
}
]
@@ -626,6 +613,55 @@
"attachedElementGuid" : {
"value" : "90851003-b06b-4fee-8bd3-910abdbe53b1"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.Tap_BM,Assembly-CSharp",
"exactJudgeTime" : 0.5,
"elementName" : "New Tap",
"tags" : [
],
"elementGuid" : {
"value" : "49905a7f-456c-491d-a607-0aebebd5ab7f"
},
"attachedElementGuid" : {
"value" : "04f7a1d6-76f2-4b15-9632-494515114d5d"
}
},{
"__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" : "49905a7f-456c-491d-a607-0aebebd5ab7f"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
"isOverridingDuration" : false,
"startTime" : -32767,
"endTime" : 32767,
"attachedElementGuid" : {
"value" : "49905a7f-456c-491d-a607-0aebebd5ab7f"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.NoteJudgeSubmodule_BM,Assembly-CSharp",
"judgeUnitList" : [
],
"attachedElementGuid" : {
"value" : "49905a7f-456c-491d-a607-0aebebd5ab7f"
}
}
]
}

View File

@@ -1,5 +1,5 @@
ManifestFileVersion: 0
CRC: 1529963868
CRC: 1057476443
AssetBundleManifest:
AssetBundleInfos:
Info_0:

View File

@@ -1,15 +1,15 @@
ManifestFileVersion: 0
CRC: 639174668
CRC: 1444715112
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: 26333e77a3a5ee29d85cfc010f962845
Hash: 6a31f70c38ba841b2847683946b57dbf
TypeTreeHash:
serializedVersion: 2
Hash: 625a8bf3466c7efbf901d88367e54446
Hash: 7c8fba77ff779a35ad42450f8316ace8
IncrementalBuildHash:
serializedVersion: 2
Hash: 26333e77a3a5ee29d85cfc010f962845
Hash: 6a31f70c38ba841b2847683946b57dbf
HashAppended: 0
ClassTypes:
- Class: 1
@@ -20,6 +20,8 @@ ClassTypes:
Script: {instanceID: 0}
- Class: 23
Script: {instanceID: 0}
- Class: 28
Script: {instanceID: 0}
- Class: 33
Script: {instanceID: 0}
- Class: 43
@@ -32,6 +34,10 @@ ClassTypes:
Script: {fileID: 11500000, guid: ea0771a0c87f746769a9ffd7286a0665, type: 3}
- Class: 115
Script: {instanceID: 0}
- Class: 198
Script: {instanceID: 0}
- Class: 199
Script: {instanceID: 0}
SerializeReferenceClassIdentifiers:
- AssemblyName: Sirenix.Serialization
ClassName: Sirenix.Serialization.SerializationData

View File

@@ -15,21 +15,24 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
BasicNoteVisual noteVisual = SubstantialObject.GenerateElement(elementName, id, tags,
isFirstGenerated, themeBundleName, objectName, parentElement).GetComponent<BasicNoteVisual>();
return noteVisual;
}
public override void FirstSetUpObject(bool isFirstGenerated)
{
NoteBase note = parentElement as NoteBase;
if(note == null) throw new System.Exception("NoteVisual只能生成在Note下。");
noteVisual.note = note;
note.noteVisual = noteVisual;
this.note = note;
note.noteVisual = this;
if (isFirstGenerated)
{
noteVisual.effectSubmodule.effectCollection["Generate"].Add(new BasicNoteGenerateExpand(noteVisual));
noteVisual.effectSubmodule.effectCollection["Perfect"].Add(new BasicNotePerfectBurst(noteVisual));
noteVisual.effectSubmodule.effectCollection["Good"].Add(new BasicNoteGoodBurst(noteVisual));
noteVisual.effectSubmodule.effectCollection["Bad"].Add(new BasicNoteBadExpand(noteVisual));
noteVisual.effectSubmodule.effectCollection["Miss"].Add(new BasicNoteMissPale(noteVisual));
effectSubmodule.effectCollection["Generate"].Add(new BasicNoteGenerateExpand(this));
effectSubmodule.effectCollection["Perfect"].Add(new BasicNotePerfectBurst(this));
effectSubmodule.effectCollection["Good"].Add(new BasicNoteGoodBurst(this));
effectSubmodule.effectCollection["Bad"].Add(new BasicNoteBadExpand(this));
effectSubmodule.effectCollection["Miss"].Add(new BasicNoteMissPale(this));
}
return noteVisual;
}
}

View File

@@ -35,7 +35,7 @@ ModelImporter:
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 5
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
@@ -90,7 +90,7 @@ ModelImporter:
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 0.049999997
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0

View File

@@ -0,0 +1,65 @@
using System.Collections;
using System.Collections.Generic;
using Ichni.Editor;
using Ichni.RhythmGame.Beatmap;
using Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap;
using UnityEngine;
namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
{
public class DTMNotePerfectBurst : NotePerfectEffect
{
private ParticleSystem effectParticle;
public DTMNotePerfectBurst(NoteVisualBase noteVisual)
{
this.note = noteVisual.note;
this.noteVisual = noteVisual;
this.effectParticle = noteVisual.effectPartList[0].GetComponent<ParticleSystem>();
this.effectTime = 0f;
}
public override void Recover()
{
effectParticle.Stop();
noteVisual.noteMain.SetActive(true);
}
public override void Adjust()
{
effectParticle.Play();
noteVisual.noteMain.SetActive(false);
}
public override EffectBase_BM ConvertToBM()
{
return new DTMNotePerfectBurst_BM(effectTime);
}
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Basic Note Perfect Burst");
}
}
namespace Beatmap
{
public class DTMNotePerfectBurst_BM : NotePerfectEffect_BM
{
public DTMNotePerfectBurst_BM()
{
}
public DTMNotePerfectBurst_BM(float effectTime) : base(effectTime)
{
}
public override EffectBase ConvertToGameType(GameElement attachedGameElement)
{
return new DTMNotePerfectBurst(attachedGameElement as NoteVisualBase);
}
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4979bd6148dc44f2c9444c1d3f663a2a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -9,31 +9,36 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
public partial class DTMNoteVisual : NoteVisualBase
{
public static DTMNoteVisual GenerateElement(string elementName, Guid id, List<string> tags,
bool isFirstGenerated, GameElement parentElement, string themeBundleName, string objectName)
bool isFirstGenerated, string themeBundleName, string objectName, GameElement parentElement)
{
DTMNoteVisual noteVisual = SubstantialObject.GenerateElement(elementName, id, tags,
isFirstGenerated, themeBundleName, objectName, parentElement).GetComponent<DTMNoteVisual>();
return noteVisual;
}
public override void FirstSetUpObject(bool isFirstGenerated)
{
NoteBase note = parentElement as NoteBase;
if (note == null) throw new System.Exception("NoteVisual只能生成在Note下。");
noteVisual.note = note;
note.noteVisual = noteVisual;
if(note == null) throw new System.Exception("NoteVisual只能生成在Note下。");
this.note = note;
note.noteVisual = this;
if (isFirstGenerated)
{
//noteVisual.effectSubmodule.effectCollection["Generate"].Add(new BasicNoteGenerateExpand(noteVisual.note));
//noteVisual.effectSubmodule.effectCollection["Perfect"].Add(new BasicNotePerfectBurst(noteVisual.note));
//noteVisual.effectSubmodule.effectCollection["Good"].Add(new BasicNoteGoodBurst(noteVisual.note));
//noteVisual.effectSubmodule.effectCollection["Bad"].Add(new BasicNoteBadExpand(noteVisual.note));
//noteVisual.effectSubmodule.effectCollection["Miss"].Add(new BasicNoteMissPale(noteVisual.note));
//effectSubmodule.effectCollection["Generate"].Add(new BasicNoteGenerateExpand(this));
effectSubmodule.effectCollection["Perfect"].Add(new DTMNotePerfectBurst(this));
//effectSubmodule.effectCollection["Good"].Add(new BasicNoteGoodBurst(this));
//effectSubmodule.effectCollection["Bad"].Add(new BasicNoteBadExpand(this));
//effectSubmodule.effectCollection["Miss"].Add(new BasicNoteMissPale(this));
}
return noteVisual;
}
}
public partial class DTMNoteVisual
{
public override void SaveBM()
{
matchedBM = new Beatmap.DTMNoteVisual_BM(elementName, elementGuid, tags,
@@ -60,13 +65,13 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
public override void ExecuteBM()
{
matchedElement = DTMNoteVisual.GenerateElement(elementName, elementGuid, tags, false,
GetElement(attachedElementGuid), themeBundleName, objectName);
themeBundleName, objectName, GetElement(attachedElementGuid));
}
public override GameElement DuplicateBM(GameElement parent)
{
return DTMNoteVisual.GenerateElement(elementName, elementGuid, tags, false, parent, themeBundleName,
objectName);
return DTMNoteVisual.GenerateElement(elementName, elementGuid, tags, false, themeBundleName,
objectName, parent);
}
}
}