谱面改进
This commit is contained in:
@@ -213,7 +213,7 @@ Material:
|
||||
- _Dst: 10
|
||||
- _DstBlend: 0
|
||||
- _DstBlendAlpha: 0
|
||||
- _EdgeValue: 0.76990294
|
||||
- _EdgeValue: 0.9431098
|
||||
- _EnvironmentReflections: 1
|
||||
- _FNLfanxiangkaiguan: 0
|
||||
- _Face: 1
|
||||
@@ -258,7 +258,7 @@ Material:
|
||||
- _Mask_scale: 1
|
||||
- _Metallic: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Opacity: 0.23009706
|
||||
- _Opacity: 0.05689019
|
||||
- _Parallax: 0.005
|
||||
- _Pass: 0
|
||||
- _QueueOffset: 0
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,143 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 801a03839a65e3042abae742e903cb62
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
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: 1
|
||||
wrapV: 1
|
||||
wrapW: 0
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
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: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
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: 4
|
||||
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: 4
|
||||
buildTarget: Android
|
||||
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: 4
|
||||
buildTarget: iOS
|
||||
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: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/FR2_Cache.asset
LFS
BIN
Assets/FR2_Cache.asset
LFS
Binary file not shown.
@@ -75,18 +75,17 @@ MonoBehaviour:
|
||||
parentElement: {fileID: 0}
|
||||
childElementList: []
|
||||
trackListFolder: {fileID: 0}
|
||||
nowAttachedTrack: {fileID: 0}
|
||||
trackPositioner: {fileID: -320456605675426144}
|
||||
trackSwitch:
|
||||
value: 0
|
||||
animations: []
|
||||
trackPercent:
|
||||
value: 0
|
||||
currentAnimationIndex: 0
|
||||
animations: []
|
||||
isSwitchingReturnType: 0
|
||||
lastReturnType: 0
|
||||
returnType: 0
|
||||
nowAttachedTrack: {fileID: 0}
|
||||
trackPositioner: {fileID: -320456605675426144}
|
||||
--- !u!114 &-320456605675426144
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
Nïqsª¡L¨^bHTnZq£ý8ÿdÈ•}⋇Oô¢Ó¯´èVUù0ùŠ®¸m†òÓg”‘¹µËû½Í«æ7¼Qö&Í;_£@–ÃüyÏÀþN²ç‰%3#W¾¢$ò†Ä<E280A0>þ"O"–¹0‡ÅzüÜ}¢E<C2A2>'¡ÿÐg;«ú4ʦÿp IßêöøÎÐv®·ë·HÞßZ¡Ûkç<>ÕŽO;Ùž¬(i<>D-Öðσþ„eÁZðÏÆ<C38F>`|{Æ‹z_‚Ší~
|
||||
0"ª§ƒ.µü|cIØ{òXçlqEg]ußMè'ÙËK–Y§ƒh½uÊ^¬jûœ„Dh3DGמ³FòNSjfC™ §%,æ¤&Í<>YÚçd©¥¯‡+騄0Sí8#Ð[Q¾¶äûËF{!Ý[¸ü²ÍVP‘ÉOÓÉ»Œ0.¬ü#ñÞ=žNh0Œ$ÙΕ`È?0ƒ¶"«j®ÐιÉö©àžèÖ¢¬òÏUnæO•·`ÿ<>KÀË[ì<>:â¯Æ-ÚõÒò
|
||||
@@ -1 +1 @@
|
||||
2ŸQº6<EFBFBD>5üñ9Å•JšrEeyµ[¯êéÿ$R~¼©62Véš‘aâ«E¤|û~²<1F>Å ›ÕùÐ)<29>j_ÇÂn'¶C@ùÓ`hw(È„mëTqËÄŠ.E4_'³-(+5F”î8ƒòMðBÌði4†]Dž¬½Uíø¥ôi<C3B4>ü™½á¸ˆ»Z7YkñÈèPœ‘…éO&|S-•g´Æ[Ö~hhRÐH¬ðßÕæ)a•š·Ô¶¼,Œ`b±¨ièŠ|ÊO׆é„Åš °ƒú½Å\¿dÜÀŒ¤ï’auTWJ¤h¶Sµ™ðÉNÛ¬ÆpR¼l=<3D>î‰OJõ¨à÷-›øa !ã|¯Ûy}¥C÷ã<C3B7>oÚÍQâ—„Ø®ŒE`)[Al ÔKºëÄ~Þ–Ž?4c<34>Aϯد}Ojd†P€¡ª[øúÃú0å.ã¸û÷êð œôÆ`àÞåd,¼˜ˆ“~mò§! sœ0LÄ<4C>yó¥µAz‘¯
|
||||
¼¶DufäÔ†ˆs\Ò§n*à´åß~K1ПÚüiY——©àÇ&-Y<>rÓPgܯˆÄ-?“ãùàxú£µ'o“¦ ع<C398>Uñ?GYD7úc÷u$ó”ˆcåŽ<C3A5>Û«æ-¢ýðÙAZÂ(cا*ëϤ=g)†,X7Y<17>6³És¨ýÙ~‚ڛÈ<E280BA>™vÄÊÔ6G»g]ŠÊ,ÛwÛ<77>ž!ÛuÄׇ4 :MÊïicÏ'ð“øÁÜ‘«R\DpÒ3Àç¯# R3<52>‹ya_ñ6=W÷V` ìo¢ ¥¡¹üó«ŠÎ<C5A0>Ÿ¥µ@Ìu×þÏËž•oQ‰³µäÿ<C3A4>†d.
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,2 +1,2 @@
|
||||
‡3&Hx¥©'A_€iØ’üÆ€ÿ½¸±
|
||||
ú Knüq׬.¿^X:þ¿"°Õÿ?àFopù¯qЗG‘ª;
|
||||
etmžÔ#A*2`p*ŹÍ»&‘0‚pn´Ęq;ÄigÂcZž“`‹Ňbľ„Ię|˝ŹÝÍ4>Ě3·ćű<C487>ů‡“·ÓT›´îú®94<08>/<{ľľ^ŇzŹŕŻC…~9î°ŰZĽHjÇIDç –WdóăGÄFĐ,}µÁouČWR3ę D㨠¨S¨ůěĚ®$ďr>Ťs€v84o–±3Ĺł
|
||||
ŹÖéě.•Ö<E280A2>qÁLÓiŤ2]¸=řÖ–Ů
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2d07768ea909cfb498ad7d94654ddb43
|
||||
guid: 8483718c446c7ed45b3b86df1288ce1d
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@@ -1 +1 @@
|
||||
~ Ç¿¸ã˜Ðm¹–B¬
|
||||
.<2E>¯ôc8KŒ³o+0oÑÆb.T@\ùQdᮤ@¾`.ÇA ÞKcÁ›\2ÎÜ„–Ó*lŸ–S~§ÚX½ÁðqABýwûN7·åéE2¨<ÏöåðЇÀÝ…¶Fw²Õâ{‚:oc™˜P‚v³šÜ˜½U<C2BD><55>·®S–¥íI9Î+qt<71>RCÙì/ú°z(NDÃó<15>MØ)–qô5'<27>P&ðg br‚Ð<E2809A>MÜiO,¹R<è·†hˆE^
|
||||
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6db0530f3f252ea49a8632143147055a
|
||||
guid: cad57e5cfb75195408117eab9d49cb5b
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
Binary file not shown.
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 026dad72b6da4aa4084dc964e0318385
|
||||
guid: f30fbeb27fd2d4447a921b871b5290f3
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
Binary file not shown.
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cabf01a814316254195299c0ec98c034
|
||||
guid: 368abe1a7c6070948b31ad33bdbcc8b7
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
BIN
Assets/Resources/Chapter0.asset
LFS
BIN
Assets/Resources/Chapter0.asset
LFS
Binary file not shown.
@@ -10146,6 +10146,16 @@ MonoBehaviour:
|
||||
valueGuidInternal:
|
||||
WwiseObjectReference: {fileID: 11400000, guid: d277bb13d318c414999deb758c16baac,
|
||||
type: 2}
|
||||
HighPassFilter:
|
||||
idInternal: 0
|
||||
valueGuidInternal:
|
||||
WwiseObjectReference: {fileID: 11400000, guid: 2506771a66ac1e84f80022e7212bfc01,
|
||||
type: 2}
|
||||
LowPassFilter:
|
||||
idInternal: 0
|
||||
valueGuidInternal:
|
||||
WwiseObjectReference: {fileID: 11400000, guid: 2ad6d003174f1ae4387341238ade2cb4,
|
||||
type: 2}
|
||||
songTimeSegment: 0
|
||||
pauseTimeSegment: 0
|
||||
judgeOffset: 0
|
||||
|
||||
@@ -5,6 +5,7 @@ namespace Ichni.RhythmGame.Beatmap
|
||||
public class HighPassFilterEffect_BM: EffectBase_BM
|
||||
{
|
||||
public float peak;
|
||||
public bool useEQ;
|
||||
public AnimationCurve intensityCurve;
|
||||
|
||||
public HighPassFilterEffect_BM()
|
||||
@@ -12,17 +13,17 @@ namespace Ichni.RhythmGame.Beatmap
|
||||
|
||||
}
|
||||
|
||||
public HighPassFilterEffect_BM(float effectTime, float peak, AnimationCurve intensityCurve)
|
||||
public HighPassFilterEffect_BM(float effectTime, float peak, bool useEQ, AnimationCurve intensityCurve)
|
||||
{
|
||||
this.effectTime = 0;
|
||||
this.effectTime = effectTime;
|
||||
this.peak = peak;
|
||||
this.useEQ = useEQ;
|
||||
this.intensityCurve = intensityCurve;
|
||||
}
|
||||
|
||||
public override EffectBase ConvertToGameType(GameElement attachedGameElement)
|
||||
{
|
||||
return new HighPassFilterEffect(effectTime, peak, intensityCurve);
|
||||
return new HighPassFilterEffect(effectTime, peak, useEQ, intensityCurve);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ namespace Ichni.RhythmGame.Beatmap
|
||||
public class LowPassFilterEffect_BM: EffectBase_BM
|
||||
{
|
||||
public float bottom;
|
||||
public bool useEQ;
|
||||
public AnimationCurve intensityCurve;
|
||||
|
||||
public LowPassFilterEffect_BM()
|
||||
@@ -12,17 +13,17 @@ namespace Ichni.RhythmGame.Beatmap
|
||||
|
||||
}
|
||||
|
||||
public LowPassFilterEffect_BM(float effectTime, float bottom, AnimationCurve intensityCurve)
|
||||
public LowPassFilterEffect_BM(float effectTime, float bottom, bool useEQ, AnimationCurve intensityCurve)
|
||||
{
|
||||
this.effectTime = 0;
|
||||
this.effectTime = effectTime;
|
||||
this.bottom = bottom;
|
||||
this.useEQ = useEQ;
|
||||
this.intensityCurve = intensityCurve;
|
||||
}
|
||||
|
||||
public override EffectBase ConvertToGameType(GameElement attachedGameElement)
|
||||
{
|
||||
return new LowPassFilterEffect(effectTime, bottom, intensityCurve);
|
||||
return new LowPassFilterEffect(effectTime, bottom, useEQ, intensityCurve);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,8 +12,13 @@ namespace Ichni.RhythmGame
|
||||
#region [暴露属性字段与关联] Exposed Fields & References
|
||||
private TransformSubmodule targetTransformSubmodule;
|
||||
public FlexibleFloat positionX, positionY, positionZ;
|
||||
|
||||
public static HashSet<Displacement> ActiveDisplacements = new HashSet<Displacement>();
|
||||
#endregion
|
||||
|
||||
protected void OnEnable() { ActiveDisplacements.Add(this); }
|
||||
protected void OnDisable() { ActiveDisplacements.Remove(this); }
|
||||
|
||||
#region [生命周期与工厂] Lifecycle & Factory
|
||||
public static Displacement GenerateElement(string elementName, Guid id,
|
||||
List<string> tags, bool isFirstGenerated, GameElement animatedObject,
|
||||
@@ -45,21 +50,65 @@ namespace Ichni.RhythmGame
|
||||
positionY.UpdateFlexibleFloat(songTime);
|
||||
positionZ.UpdateFlexibleFloat(songTime);
|
||||
|
||||
if (forceUpdate || positionX.returnType is FlexibleReturnType.MiddleExecuting ||
|
||||
positionY.returnType is FlexibleReturnType.MiddleExecuting ||
|
||||
positionZ.returnType is FlexibleReturnType.MiddleExecuting)
|
||||
bool isMiddleExecuting = positionX.returnType is FlexibleReturnType.MiddleExecuting ||
|
||||
positionY.returnType is FlexibleReturnType.MiddleExecuting ||
|
||||
positionZ.returnType is FlexibleReturnType.MiddleExecuting;
|
||||
|
||||
bool isSwitching = positionX.isSwitchingReturnType || positionY.isSwitchingReturnType || positionZ.isSwitchingReturnType;
|
||||
|
||||
if (forceUpdate || isMiddleExecuting)
|
||||
{
|
||||
if(!forceUpdate) animationReturnType = FlexibleReturnType.MiddleExecuting;
|
||||
Vector3 currentPosition = new Vector3(positionX.value, positionY.value, positionZ.value);
|
||||
targetTransformSubmodule.positionOffset += currentPosition;
|
||||
targetTransformSubmodule.positionDirtyMark = true;
|
||||
|
||||
// 首帧合并退让保护
|
||||
bool shouldSkipFirstFrame = false;
|
||||
if (!forceUpdate && isSwitching)
|
||||
{
|
||||
foreach (var d in ActiveDisplacements)
|
||||
{
|
||||
if (d != this && d.targetTransformSubmodule == this.targetTransformSubmodule)
|
||||
{
|
||||
if (d.positionX.isSwitchingReturnType || d.positionY.isSwitchingReturnType || d.positionZ.isSwitchingReturnType)
|
||||
{
|
||||
shouldSkipFirstFrame = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!shouldSkipFirstFrame)
|
||||
{
|
||||
Vector3 currentPosition = new Vector3(positionX.value, positionY.value, positionZ.value);
|
||||
targetTransformSubmodule.positionOffset += currentPosition;
|
||||
targetTransformSubmodule.positionDirtyMark = true;
|
||||
}
|
||||
}
|
||||
else if (positionX.isSwitchingReturnType || positionY.isSwitchingReturnType || positionZ.isSwitchingReturnType)
|
||||
else if (isSwitching)
|
||||
{
|
||||
//animationReturnType = FlexibleReturnType.MiddleExecuting;
|
||||
//Vector3 currentPosition = new Vector3(positionX.value, positionY.value, positionZ.value);
|
||||
//targetTransformSubmodule.positionOffset += currentPosition;
|
||||
//targetTransformSubmodule.positionDirtyMark = true;
|
||||
// 最终帧补偿机制
|
||||
bool isAnyOtherExecuting = false;
|
||||
foreach (var d in ActiveDisplacements)
|
||||
{
|
||||
if (d != this && d.targetTransformSubmodule == this.targetTransformSubmodule)
|
||||
{
|
||||
if (d.positionX.returnType is FlexibleReturnType.MiddleExecuting ||
|
||||
d.positionY.returnType is FlexibleReturnType.MiddleExecuting ||
|
||||
d.positionZ.returnType is FlexibleReturnType.MiddleExecuting)
|
||||
{
|
||||
isAnyOtherExecuting = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!isAnyOtherExecuting)
|
||||
{
|
||||
animationReturnType = FlexibleReturnType.MiddleExecuting;
|
||||
Vector3 currentPosition = new Vector3(positionX.value, positionY.value, positionZ.value);
|
||||
targetTransformSubmodule.positionOffset += currentPosition;
|
||||
targetTransformSubmodule.positionDirtyMark = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -11,8 +11,14 @@ namespace Ichni.RhythmGame
|
||||
#region [暴露属性字段与关联] Exposed Fields & References
|
||||
public TransformSubmodule targetTransformSubmodule;
|
||||
public FlexibleFloat scaleX, scaleY, scaleZ;
|
||||
|
||||
// 静态跟踪全局激活的Scale组件,为了方便同物体的跨动画状态感应
|
||||
public static HashSet<Scale> ActiveScales = new HashSet<Scale>();
|
||||
#endregion
|
||||
|
||||
protected void OnEnable() { ActiveScales.Add(this); }
|
||||
protected void OnDisable() { ActiveScales.Remove(this); }
|
||||
|
||||
#region [生命周期与工厂] Lifecycle & Factory
|
||||
public static Scale GenerateElement(string elementName, Guid id,
|
||||
List<string> tags, bool isFirstGenerated, GameElement animatedObject,
|
||||
@@ -49,21 +55,65 @@ namespace Ichni.RhythmGame
|
||||
scaleY.UpdateFlexibleFloat(songTime);
|
||||
scaleZ.UpdateFlexibleFloat(songTime);
|
||||
|
||||
if (forceUpdate || scaleX.returnType is FlexibleReturnType.MiddleExecuting ||
|
||||
scaleY.returnType is FlexibleReturnType.MiddleExecuting ||
|
||||
scaleZ.returnType is FlexibleReturnType.MiddleExecuting)
|
||||
bool isMiddleExecuting = scaleX.returnType is FlexibleReturnType.MiddleExecuting ||
|
||||
scaleY.returnType is FlexibleReturnType.MiddleExecuting ||
|
||||
scaleZ.returnType is FlexibleReturnType.MiddleExecuting;
|
||||
|
||||
bool isSwitching = scaleX.isSwitchingReturnType || scaleY.isSwitchingReturnType || scaleZ.isSwitchingReturnType;
|
||||
|
||||
if (forceUpdate || isMiddleExecuting)
|
||||
{
|
||||
if(!forceUpdate) animationReturnType = FlexibleReturnType.MiddleExecuting;
|
||||
Vector3 currentScale = new Vector3(scaleX.value, scaleY.value, scaleZ.value);
|
||||
targetTransformSubmodule.scaleOffset += currentScale;
|
||||
targetTransformSubmodule.scaleDirtyMark = true;
|
||||
|
||||
// 检查是否是刚开始的第一帧,且有其它同类动画正在收尾(避免两帧叠加导致 ScaleX2)
|
||||
bool shouldSkipFirstFrame = false;
|
||||
if (!forceUpdate && isSwitching)
|
||||
{
|
||||
foreach (var s in ActiveScales)
|
||||
{
|
||||
if (s != this && s.targetTransformSubmodule == this.targetTransformSubmodule)
|
||||
{
|
||||
if (s.scaleX.isSwitchingReturnType || s.scaleY.isSwitchingReturnType || s.scaleZ.isSwitchingReturnType)
|
||||
{
|
||||
shouldSkipFirstFrame = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!shouldSkipFirstFrame)
|
||||
{
|
||||
Vector3 currentScale = new Vector3(scaleX.value, scaleY.value, scaleZ.value);
|
||||
targetTransformSubmodule.scaleOffset += currentScale;
|
||||
targetTransformSubmodule.scaleDirtyMark = true;
|
||||
}
|
||||
}
|
||||
else if (scaleX.isSwitchingReturnType || scaleY.isSwitchingReturnType || scaleZ.isSwitchingReturnType)
|
||||
else if (isSwitching)
|
||||
{
|
||||
//animationReturnType = FlexibleReturnType.MiddleExecuting;
|
||||
//Vector3 currentScale = new Vector3(scaleX.value, scaleY.value, scaleZ.value);
|
||||
//targetTransformSubmodule.scaleOffset += currentScale;
|
||||
//targetTransformSubmodule.scaleDirtyMark = true;
|
||||
// 【收尾保护】如果这个动画是附着物体的“最后的动画”的结束,额外更新彻底将其设为终定值
|
||||
bool isAnyOtherExecuting = false;
|
||||
foreach (var s in ActiveScales)
|
||||
{
|
||||
if (s != this && s.targetTransformSubmodule == this.targetTransformSubmodule)
|
||||
{
|
||||
if (s.scaleX.returnType is FlexibleReturnType.MiddleExecuting ||
|
||||
s.scaleY.returnType is FlexibleReturnType.MiddleExecuting ||
|
||||
s.scaleZ.returnType is FlexibleReturnType.MiddleExecuting)
|
||||
{
|
||||
isAnyOtherExecuting = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!isAnyOtherExecuting)
|
||||
{
|
||||
animationReturnType = FlexibleReturnType.MiddleExecuting; // 使系统认为有有效活动
|
||||
Vector3 currentScale = new Vector3(scaleX.value, scaleY.value, scaleZ.value);
|
||||
targetTransformSubmodule.scaleOffset += currentScale;
|
||||
targetTransformSubmodule.scaleDirtyMark = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -12,8 +12,13 @@ namespace Ichni.RhythmGame
|
||||
#region [暴露属性字段与关联] Exposed Fields & References
|
||||
private TransformSubmodule targetTransformSubmodule;
|
||||
public FlexibleFloat eulerAngleX, eulerAngleY, eulerAngleZ;
|
||||
|
||||
public static HashSet<Swirl> ActiveSwirls = new HashSet<Swirl>();
|
||||
#endregion
|
||||
|
||||
protected void OnEnable() { ActiveSwirls.Add(this); }
|
||||
protected void OnDisable() { ActiveSwirls.Remove(this); }
|
||||
|
||||
#region [生命周期与工厂] Lifecycle & Factory
|
||||
public static Swirl GenerateElement(string elementName, Guid id,
|
||||
List<string> tags, bool isFirstGenerated, GameElement animatedObject,
|
||||
@@ -43,22 +48,65 @@ namespace Ichni.RhythmGame
|
||||
eulerAngleY.UpdateFlexibleFloat(songTime);
|
||||
eulerAngleZ.UpdateFlexibleFloat(songTime);
|
||||
|
||||
if (forceUpdate || eulerAngleX.returnType is FlexibleReturnType.MiddleExecuting ||
|
||||
eulerAngleY.returnType is FlexibleReturnType.MiddleExecuting ||
|
||||
eulerAngleZ.returnType is FlexibleReturnType.MiddleExecuting)
|
||||
bool isMiddleExecuting = eulerAngleX.returnType is FlexibleReturnType.MiddleExecuting ||
|
||||
eulerAngleY.returnType is FlexibleReturnType.MiddleExecuting ||
|
||||
eulerAngleZ.returnType is FlexibleReturnType.MiddleExecuting;
|
||||
|
||||
bool isSwitching = eulerAngleX.isSwitchingReturnType || eulerAngleY.isSwitchingReturnType || eulerAngleZ.isSwitchingReturnType;
|
||||
|
||||
if (forceUpdate || isMiddleExecuting)
|
||||
{
|
||||
if(!forceUpdate) animationReturnType = FlexibleReturnType.MiddleExecuting;
|
||||
Vector3 currentEulerAngles = new Vector3(eulerAngleX.value, eulerAngleY.value, eulerAngleZ.value);
|
||||
targetTransformSubmodule.eulerAnglesOffset += currentEulerAngles;
|
||||
targetTransformSubmodule.eulerAnglesDirtyMark = true;
|
||||
|
||||
// 首帧合并退让保护
|
||||
bool shouldSkipFirstFrame = false;
|
||||
if (!forceUpdate && isSwitching)
|
||||
{
|
||||
foreach (var s in ActiveSwirls)
|
||||
{
|
||||
if (s != this && s.targetTransformSubmodule == this.targetTransformSubmodule)
|
||||
{
|
||||
if (s.eulerAngleX.isSwitchingReturnType || s.eulerAngleY.isSwitchingReturnType || s.eulerAngleZ.isSwitchingReturnType)
|
||||
{
|
||||
shouldSkipFirstFrame = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!shouldSkipFirstFrame)
|
||||
{
|
||||
Vector3 currentEulerAngles = new Vector3(eulerAngleX.value, eulerAngleY.value, eulerAngleZ.value);
|
||||
targetTransformSubmodule.eulerAnglesOffset += currentEulerAngles;
|
||||
targetTransformSubmodule.eulerAnglesDirtyMark = true;
|
||||
}
|
||||
}
|
||||
else if (eulerAngleX.isSwitchingReturnType || eulerAngleY.isSwitchingReturnType || eulerAngleZ.isSwitchingReturnType)
|
||||
else if (isSwitching)
|
||||
{
|
||||
//animationReturnType = FlexibleReturnType.MiddleExecuting;
|
||||
//Vector3 currentEulerAngles = new Vector3(eulerAngleX.value, eulerAngleY.value, eulerAngleZ.value);
|
||||
//targetTransformSubmodule.eulerAnglesOffset += currentEulerAngles;
|
||||
//Debug.Break();
|
||||
//targetTransformSubmodule.eulerAnglesDirtyMark = true;
|
||||
// 最终帧补偿机制
|
||||
bool isAnyOtherExecuting = false;
|
||||
foreach (var s in ActiveSwirls)
|
||||
{
|
||||
if (s != this && s.targetTransformSubmodule == this.targetTransformSubmodule)
|
||||
{
|
||||
if (s.eulerAngleX.returnType is FlexibleReturnType.MiddleExecuting ||
|
||||
s.eulerAngleY.returnType is FlexibleReturnType.MiddleExecuting ||
|
||||
s.eulerAngleZ.returnType is FlexibleReturnType.MiddleExecuting)
|
||||
{
|
||||
isAnyOtherExecuting = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!isAnyOtherExecuting)
|
||||
{
|
||||
animationReturnType = FlexibleReturnType.MiddleExecuting;
|
||||
Vector3 currentEulerAngles = new Vector3(eulerAngleX.value, eulerAngleY.value, eulerAngleZ.value);
|
||||
targetTransformSubmodule.eulerAnglesOffset += currentEulerAngles;
|
||||
targetTransformSubmodule.eulerAnglesDirtyMark = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -1,40 +1,92 @@
|
||||
using Ichni.RhythmGame.Beatmap;
|
||||
using Lean.Pool;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Ichni.RhythmGame
|
||||
{
|
||||
public class HighPassFilterEffect : EffectBase
|
||||
/// <summary>
|
||||
/// 高通滤波效果(Wwise RTPC 驱动版)。
|
||||
/// 在 Wwise 中需要创建名为 "Song_Highpass" 的 RTPC(范围 0~100),
|
||||
/// 并将其连接到 Music Bus 的 High-Pass Filter 参数(Built-in Parameter)。
|
||||
///
|
||||
/// BM 中存储的 peak 是 Unity AudioHighPassFilter.cutoffFrequency(Hz),
|
||||
/// 运行时使用对数公式转换为 Wwise RTPC(0~100),保持与 Unity 编辑器中一致的感知效果。
|
||||
/// 转换公式:rtpc = (ln(currentFreq) - ln(minFreq)) / (ln(maxFreq) - ln(minFreq)) * 100
|
||||
///
|
||||
/// 示例:3500 Hz → RTPC ≈ 76(与编辑器中 Unity HPF 3500Hz 感知等效)
|
||||
/// </summary>
|
||||
public partial class HighPassFilterEffect : EffectBase
|
||||
{
|
||||
#region [效果参数] Effect Parameters
|
||||
// peak:BM 中存储的目标截止频率(Hz),语义与 Unity AudioHighPassFilter.cutoffFrequency 一致
|
||||
public float peak;
|
||||
public bool useEQ;
|
||||
public AnimationCurve intensityCurve;
|
||||
|
||||
private const string RtpcName = "Song_Highpass";
|
||||
|
||||
// 人耳可听范围边界
|
||||
private const float MinFrequency = 20f; // 对应 RTPC = 0(无滤波)
|
||||
private const float MaxFrequency = 20000f; // 对应 RTPC = 100(完全截止)
|
||||
|
||||
// 幂次指数:调节频率到 RTPC 的曲线弯曲程度
|
||||
// 1.0 = 纯线性(效果太弱)
|
||||
// 0.5 = 接近对数(效果太强)
|
||||
// 0.65 = 推荐起点,可根据实际测试微调(向 1.0 调弱,向 0.5 调强)
|
||||
private const float PowerExponent = 0.25f;
|
||||
#endregion
|
||||
|
||||
|
||||
#region [初始化] Initialization
|
||||
public HighPassFilterEffect(float effectTime, float peak, AnimationCurve intensityCurve)
|
||||
public HighPassFilterEffect(float effectTime, float peak, bool useEQ, AnimationCurve intensityCurve)
|
||||
: base(effectTime)
|
||||
{
|
||||
this.effectTime = 0;
|
||||
this.effectTime = effectTime;
|
||||
this.peak = peak;
|
||||
this.useEQ = useEQ;
|
||||
this.intensityCurve = intensityCurve;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region [效果逻辑覆盖] Effect Pattern Overrides
|
||||
public override void Adjust()
|
||||
|
||||
#region [频率转换] Hz → Wwise RTPC
|
||||
/// <summary>
|
||||
/// 将频率值(Hz)通过幂次曲线映射到 Wwise HPF RTPC(0~100)。
|
||||
/// 10 Hz → 0(无滤波),22000 Hz → 100(完全截止)。
|
||||
/// 调整 PowerExponent 可改变曲线弯曲程度:越小越像对数(强),越接近 1 越线性(弱)。
|
||||
/// </summary>
|
||||
private static float FrequencyToRtpc(float frequencyHz)
|
||||
{
|
||||
/*MMF_Player effect = LeanPool.Spawn(GameManager.Instance.basePrefabs.highPassFilterEffect).GetComponent<MMF_Player>();
|
||||
effect.GetFeedbackOfType<MMF_AudioFilterHighPass>().effectTime = effectTime;
|
||||
effect.GetFeedbackOfType<MMF_AudioFilterHighPass>().RemapHighPassZero = 10;
|
||||
effect.GetFeedbackOfType<MMF_AudioFilterHighPass>().RemapHighPassOne = peak;
|
||||
effect.GetFeedbackOfType<MMF_AudioFilterHighPass>().ShakeHighPass = intensityCurve;
|
||||
effect.PlayFeedbacks();
|
||||
LeanPool.Despawn(effect.gameObject, effectTime);*/
|
||||
float clampedFreq = Mathf.Clamp(frequencyHz, MinFrequency, MaxFrequency);
|
||||
// 先归一化到 0~1(线性)
|
||||
float normalized = (clampedFreq - MinFrequency) / (MaxFrequency - MinFrequency);
|
||||
// 幂次变换:compressed = normalized^exponent,使曲线在低频段更灵敏
|
||||
float shaped = Mathf.Pow(normalized, PowerExponent);
|
||||
return Mathf.Clamp(shaped * 100f, 0f, 100f);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region [效果逻辑覆盖] Effect Pattern Overrides
|
||||
public override void PreExecute() { }
|
||||
|
||||
public override void Execute()
|
||||
{
|
||||
// 在 10Hz(无效果)与 peak Hz(最强截止)之间基于曲线插值
|
||||
float intensity = intensityCurve != null ? intensityCurve.Evaluate(effectProgressPercent) : 0f;
|
||||
float currentFreq = Mathf.Lerp(MinFrequency, peak, intensity);
|
||||
|
||||
// 对数映射到 Wwise RTPC
|
||||
float rtpcValue = FrequencyToRtpc(currentFreq);
|
||||
GameManager.Instance.songPlayer.HighPassFilter.SetValue(GameManager.Instance.songPlayer.gameObject, rtpcValue);
|
||||
}
|
||||
|
||||
public override void Adjust() { ResetEffect(); }
|
||||
public override void Recover() { ResetEffect(); }
|
||||
public override void Disrupt() { ResetEffect(); }
|
||||
|
||||
private void ResetEffect()
|
||||
{
|
||||
// RTPC = 0 → 10Hz → 无滤波
|
||||
GameManager.Instance.songPlayer.HighPassFilter.SetValue(GameManager.Instance.songPlayer.gameObject, 0f);
|
||||
Debug.Log("HighPassFilterEffect reset: RTPC set to 0 (10Hz, no filter)");
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,42 +1,89 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Ichni.RhythmGame.Beatmap;
|
||||
using Lean.Pool;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Ichni.RhythmGame
|
||||
{
|
||||
public class LowPassFilterEffect : EffectBase
|
||||
/// <summary>
|
||||
/// 低通滤波效果(Wwise RTPC 驱动版)。
|
||||
/// 在 Wwise 中需要创建名为 "Song_Lowpass" 的 RTPC(范围 0~100),
|
||||
/// 并将其连接到 Music Bus 的 Low-Pass Filter 参数(Built-in Parameter)。
|
||||
///
|
||||
/// BM 中存储的 bottom 是 Unity AudioLowPassFilter.cutoffFrequency(Hz),
|
||||
/// 运行时使用对数公式转换为 Wwise RTPC(0~100),保持与 Unity 编辑器中一致的感知效果。
|
||||
/// 转换公式:rtpc = (ln(maxFreq) - ln(currentFreq)) / (ln(maxFreq) - ln(minFreq)) * 100
|
||||
/// </summary>
|
||||
public partial class LowPassFilterEffect : EffectBase
|
||||
{
|
||||
#region [效果参数] Effect Parameters
|
||||
// bottom:BM 中存储的目标截止频率(Hz),语义与 Unity AudioLowPassFilter.cutoffFrequency 一致
|
||||
public float bottom;
|
||||
public bool useEQ;
|
||||
public AnimationCurve intensityCurve;
|
||||
|
||||
private const string RtpcName = "Song_Lowpass";
|
||||
|
||||
// 人耳可听范围边界
|
||||
private const float MinFrequency = 20f; // 对应 RTPC = 100(完全截止)
|
||||
private const float MaxFrequency = 20000f; // 对应 RTPC = 0(无滤波)
|
||||
|
||||
// 幂次指数:调节频率到 RTPC 的曲线弯曲程度
|
||||
// 1.0 = 纯线性(效果太弱)
|
||||
// 0.5 = 接近对数(效果太强)
|
||||
// 0.65 = 推荐起点,可根据实际测试微调(向 1.0 调弱,向 0.5 调强)
|
||||
private const float PowerExponent = 0.25f;
|
||||
#endregion
|
||||
|
||||
|
||||
#region [初始化] Initialization
|
||||
public LowPassFilterEffect(float effectTime, float bottom, AnimationCurve intensityCurve)
|
||||
public LowPassFilterEffect(float effectTime, float bottom, bool useEQ, AnimationCurve intensityCurve)
|
||||
: base(effectTime)
|
||||
{
|
||||
this.effectTime = 0;
|
||||
this.effectTime = effectTime;
|
||||
this.bottom = bottom;
|
||||
this.useEQ = useEQ;
|
||||
this.intensityCurve = intensityCurve;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region [效果逻辑覆盖] Effect Pattern Overrides
|
||||
public override void Adjust()
|
||||
|
||||
#region [频率转换] Hz → Wwise RTPC
|
||||
/// <summary>
|
||||
/// 将频率值(Hz)通过幂次曲线映射到 Wwise LPF RTPC(0~100)。
|
||||
/// 22000 Hz → 0(无滤波),趋近 10 Hz → 100(完全截止)。
|
||||
/// 调整 PowerExponent 可改变曲线弯曲程度:越小越像对数(强),越接近 1 越线性(弱)。
|
||||
/// </summary>
|
||||
private static float FrequencyToRtpc(float frequencyHz)
|
||||
{
|
||||
/*MMF_Player effect = LeanPool.Spawn(GameManager.Instance.basePrefabs.lowPassFilterEffect).GetComponent<MMF_Player>();
|
||||
effect.GetFeedbackOfType<MMF_AudioFilterLowPass>().effectTime = effectTime;
|
||||
effect.GetFeedbackOfType<MMF_AudioFilterLowPass>().RemapLowPassZero = 22000;
|
||||
effect.GetFeedbackOfType<MMF_AudioFilterLowPass>().RemapLowPassOne = bottom;
|
||||
effect.GetFeedbackOfType<MMF_AudioFilterLowPass>().ShakeLowPass = intensityCurve;
|
||||
effect.PlayFeedbacks();
|
||||
LeanPool.Despawn(effect.gameObject, effectTime);*/
|
||||
float clampedFreq = Mathf.Clamp(frequencyHz, MinFrequency, MaxFrequency);
|
||||
// 先归一化:频率大 = 房内线性值大(无滤波方向)
|
||||
float normalized = (clampedFreq - MinFrequency) / (MaxFrequency - MinFrequency);
|
||||
// 幂次变换,然后反转(频率越低 = RTPC 越高 = 截止越强)
|
||||
float shaped = Mathf.Pow(normalized, PowerExponent);
|
||||
return Mathf.Clamp((1f - shaped) * 100f, 0f, 100f);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region [效果逻辑覆盖] Effect Pattern Overrides
|
||||
public override void PreExecute() { }
|
||||
|
||||
public override void Execute()
|
||||
{
|
||||
// 在 22000Hz(无效果)与 bottom Hz(最强截止)之间基于曲线插值
|
||||
float intensity = intensityCurve != null ? intensityCurve.Evaluate(effectProgressPercent) : 0f;
|
||||
float currentFreq = Mathf.Lerp(MaxFrequency, bottom, intensity);
|
||||
|
||||
// 对数映射到 Wwise RTPC
|
||||
float rtpcValue = FrequencyToRtpc(currentFreq);
|
||||
GameManager.Instance.songPlayer.LowPassFilter.SetValue(GameManager.Instance.songPlayer.gameObject, rtpcValue);
|
||||
}
|
||||
|
||||
public override void Adjust() { ResetEffect(); }
|
||||
public override void Recover() { ResetEffect(); }
|
||||
public override void Disrupt() { ResetEffect(); }
|
||||
|
||||
private void ResetEffect()
|
||||
{
|
||||
// RTPC = 0 → 22000Hz → 无滤波
|
||||
GameManager.Instance.songPlayer.LowPassFilter.SetValue(GameManager.Instance.songPlayer.gameObject, 0f);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using AK.Wwise;
|
||||
using Sirenix.OdinInspector;
|
||||
using SLSUtilities.WwiseAssistance;
|
||||
using UnityEngine;
|
||||
@@ -21,6 +22,9 @@ namespace Ichni
|
||||
public Event ResumeMusicEvent; // 恢复播放背景音乐的事件
|
||||
public Event PauseMusicEvent; // 暂停播放背景音乐的事件
|
||||
public Event StopMusicEvent; // 停止播放背景音乐的事件
|
||||
|
||||
public RTPC HighPassFilter;
|
||||
public RTPC LowPassFilter;
|
||||
|
||||
private uint _playingId;
|
||||
public float songTimeSegment = 0;
|
||||
@@ -36,6 +40,7 @@ namespace Ichni
|
||||
InformationTransistor.instance.songSwitch.SetValue(gameObject);
|
||||
isLoading = true;
|
||||
isStarting = false;
|
||||
|
||||
}
|
||||
|
||||
private void Update()
|
||||
@@ -73,12 +78,31 @@ namespace Ichni
|
||||
|
||||
if (isPlaying)
|
||||
{
|
||||
// 获取底层 Wwise 的当前正确时间
|
||||
float currentSongSegment = PlaySegment() / 1000f - (judgeOffset / 1000f);
|
||||
|
||||
if (recordedSongSeg < currentSongSegment)
|
||||
// 1. 让游戏时间先基于引擎渲染帧线性平滑推进
|
||||
songTimeSegment += Time.deltaTime * Time.timeScale;
|
||||
|
||||
// 2. 计算当前平滑时间与底层实际音频时间的误差
|
||||
float difference = currentSongSegment - songTimeSegment;
|
||||
|
||||
// 3. 时间校准逻辑
|
||||
// 如果偏差非常大(例如超过 50ms),说明游戏发生过卡顿停顿,强行同步消除误差
|
||||
if (Mathf.Abs(difference) > 0.05f)
|
||||
{
|
||||
songTimeSegment = currentSongSegment;
|
||||
recordedSongSeg = currentSongSegment;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 如果在正常范围内,使用微调去柔和追击这个误差,避免肉眼看到跳变(Jitter)
|
||||
songTimeSegment += difference * 0.1f;
|
||||
}
|
||||
|
||||
// 保证时间不要神奇地倒退影响铺面逻辑
|
||||
if (songTimeSegment > recordedSongSeg)
|
||||
{
|
||||
recordedSongSeg = songTimeSegment;
|
||||
}
|
||||
}
|
||||
else if (isPausing)
|
||||
@@ -155,7 +179,7 @@ namespace Ichni
|
||||
int PlaySegment()
|
||||
{
|
||||
AkSegmentInfo segmentInfo = new AkSegmentInfo();
|
||||
AkSoundEngine.GetPlayingSegmentInfo(_playingId, segmentInfo,true);
|
||||
AkUnitySoundEngine.GetPlayingSegmentInfo(_playingId, segmentInfo,true);
|
||||
|
||||
return segmentInfo.iCurrentPosition;
|
||||
}
|
||||
|
||||
@@ -32,6 +32,21 @@ namespace AK
|
||||
static const AkUniqueID TOUCHTOSTART = 3357374771U;
|
||||
} // namespace EVENTS
|
||||
|
||||
namespace STATES
|
||||
{
|
||||
namespace NEW_STATE_GROUP
|
||||
{
|
||||
static const AkUniqueID GROUP = 2012657067U;
|
||||
|
||||
namespace STATE
|
||||
{
|
||||
static const AkUniqueID NEW_STATE = 2021425847U;
|
||||
static const AkUniqueID NONE = 748895195U;
|
||||
} // namespace STATE
|
||||
} // namespace NEW_STATE_GROUP
|
||||
|
||||
} // namespace STATES
|
||||
|
||||
namespace SWITCHES
|
||||
{
|
||||
namespace CHAPTER
|
||||
@@ -93,6 +108,8 @@ namespace AK
|
||||
static const AkUniqueID PREVIEW_HIGHPASS = 4043093737U;
|
||||
static const AkUniqueID PREVIEW_LOWPASS = 363065643U;
|
||||
static const AkUniqueID PREVIEW_VOLUME = 2183069388U;
|
||||
static const AkUniqueID SONG_EQ_FX_HIGHPASS = 1952074036U;
|
||||
static const AkUniqueID SONG_EQ_FX_LOWPASS = 2159946616U;
|
||||
static const AkUniqueID SONG_HIGHPASS = 2191510614U;
|
||||
static const AkUniqueID SONG_LOWPASS = 3534982690U;
|
||||
static const AkUniqueID SONG_VOLUME = 2936015903U;
|
||||
|
||||
Binary file not shown.
@@ -1,6 +1,6 @@
|
||||
ManifestFileVersion: 0
|
||||
UnityVersion: 6000.3.7f1
|
||||
CRC: 3651626393
|
||||
CRC: 2895117961
|
||||
HashAppended: 0
|
||||
AssetBundleManifest:
|
||||
AssetBundleInfos:
|
||||
|
||||
Binary file not shown.
@@ -1,16 +1,16 @@
|
||||
ManifestFileVersion: 0
|
||||
UnityVersion: 6000.3.7f1
|
||||
CRC: 3493843915
|
||||
CRC: 1469715876
|
||||
Hashes:
|
||||
AssetFileHash:
|
||||
serializedVersion: 2
|
||||
Hash: b83a70f98dab7639eabb8a7252d8a2ad
|
||||
Hash: aea9f9c02d44ccbc30ef1a729b282012
|
||||
TypeTreeHash:
|
||||
serializedVersion: 2
|
||||
Hash: 8b453097cf816e7e6fe791950bd1564f
|
||||
IncrementalBuildHash:
|
||||
serializedVersion: 2
|
||||
Hash: 6b1fc4a47cbe62f4b9b11bf69bc4aa5a
|
||||
Hash: 3ce5f6108ef84d1dc007dd85d000648a
|
||||
HashAppended: 0
|
||||
ClassTypes:
|
||||
- Class: 1
|
||||
|
||||
@@ -83,7 +83,7 @@ Material:
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 2800000, guid: f70c6f348e906194489ca94eceafce16, type: 3}
|
||||
m_Texture: {fileID: 2800000, guid: 801a03839a65e3042abae742e903cb62, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTexture:
|
||||
|
||||
@@ -5127,7 +5127,7 @@ ParticleSystem:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4577072593820393136}
|
||||
serializedVersion: 8
|
||||
lengthInSec: 100
|
||||
lengthInSec: 0.5
|
||||
simulationSpeed: 1
|
||||
stopAction: 0
|
||||
cullingMode: 0
|
||||
@@ -5202,7 +5202,7 @@ ParticleSystem:
|
||||
startLifetime:
|
||||
serializedVersion: 2
|
||||
minMaxState: 0
|
||||
scalar: 100
|
||||
scalar: 0.5
|
||||
minScalar: 5
|
||||
maxCurve:
|
||||
serializedVersion: 2
|
||||
@@ -5690,7 +5690,7 @@ ParticleSystem:
|
||||
m_RotationOrder: 4
|
||||
randomizeRotationDirection: 0
|
||||
gravitySource: 0
|
||||
maxNumParticles: 10
|
||||
maxNumParticles: 1
|
||||
customEmitterVelocity: {x: 0, y: 0, z: 0}
|
||||
size3D: 0
|
||||
rotation3D: 0
|
||||
@@ -6116,7 +6116,7 @@ ParticleSystem:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
cycleCount: 1
|
||||
cycleCount: 0
|
||||
repeatInterval: 0.01
|
||||
probability: 1
|
||||
SizeModule:
|
||||
@@ -10004,7 +10004,7 @@ GameObject:
|
||||
- component: {fileID: 4577072593858437035}
|
||||
- component: {fileID: 4577072593858437034}
|
||||
m_Layer: 0
|
||||
m_Name: Beam1_Blue
|
||||
m_Name: Main
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
@@ -14885,7 +14885,7 @@ ParticleSystem:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4577072594143320190}
|
||||
serializedVersion: 8
|
||||
lengthInSec: 100
|
||||
lengthInSec: 0.5
|
||||
simulationSpeed: 1
|
||||
stopAction: 0
|
||||
cullingMode: 0
|
||||
@@ -14960,7 +14960,7 @@ ParticleSystem:
|
||||
startLifetime:
|
||||
serializedVersion: 2
|
||||
minMaxState: 0
|
||||
scalar: 100
|
||||
scalar: 0.5
|
||||
minScalar: 5
|
||||
maxCurve:
|
||||
serializedVersion: 2
|
||||
@@ -15448,7 +15448,7 @@ ParticleSystem:
|
||||
m_RotationOrder: 4
|
||||
randomizeRotationDirection: 0
|
||||
gravitySource: 0
|
||||
maxNumParticles: 5
|
||||
maxNumParticles: 1
|
||||
customEmitterVelocity: {x: 0, y: 0, z: 0}
|
||||
size3D: 0
|
||||
rotation3D: 0
|
||||
@@ -15874,7 +15874,7 @@ ParticleSystem:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
cycleCount: 1
|
||||
cycleCount: 0
|
||||
repeatInterval: 0.01
|
||||
probability: 1
|
||||
SizeModule:
|
||||
@@ -20037,8 +20037,8 @@ ParticleSystem:
|
||||
startSize:
|
||||
serializedVersion: 2
|
||||
minMaxState: 3
|
||||
scalar: 0.8
|
||||
minScalar: 0.4
|
||||
scalar: 0.5
|
||||
minScalar: 0.3
|
||||
maxCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
@@ -20501,7 +20501,7 @@ ParticleSystem:
|
||||
sphericalDirectionAmount: 0
|
||||
randomPositionAmount: 0
|
||||
radius:
|
||||
value: 0.25
|
||||
value: 0.15
|
||||
mode: 0
|
||||
spread: 0
|
||||
speed:
|
||||
@@ -20620,7 +20620,7 @@ ParticleSystem:
|
||||
rateOverTime:
|
||||
serializedVersion: 2
|
||||
minMaxState: 0
|
||||
scalar: 8
|
||||
scalar: 4
|
||||
minScalar: 10
|
||||
maxCurve:
|
||||
serializedVersion: 2
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2506771a66ac1e84f80022e7212bfc01
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2c32e34ea99232f458493953716f7aa3
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2d99b9cf72001bb4b8f5662d3f5718b2
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2ad6d003174f1ae4387341238ade2cb4
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 60c1458d8e2ea0047a3fc10673df8ffc
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user