Merge branch 'develop' into fearure/Yarn_FP

This commit is contained in:
Ovid
2025-01-24 06:18:13 +08:00
28 changed files with 2365 additions and 1241 deletions
@@ -140,6 +140,7 @@ namespace RainbowArt.CleanFlatUI
for(int i = 0; i < fgList.Count; i++)
{
RectTransform rectTrans = fgList[i];
Image image=rectTrans.transform.GetChild(0).GetComponent<Image>();
if(i < currentValue)
{
rectTrans.gameObject.SetActive(true);
@@ -147,10 +148,19 @@ namespace RainbowArt.CleanFlatUI
else
{
rectTrans.gameObject.SetActive(false);
}
}
if(i<16)
{
image.color=Color.Lerp(Color.green, Color.yellow, i/16f);
}
else
{
image.color = Color.Lerp(Color.yellow, Color.red, (i - 16) / 16f);
}
}
}
void UpdateText()
{
if (text != null && text.gameObject.activeSelf != hasText)
@@ -159,8 +169,10 @@ namespace RainbowArt.CleanFlatUI
}
if (hasText && (text != null))
{
float val = (float)currentValue / (float)maxValue;
text.text = Mathf.FloorToInt(val * 100) + "%";
//float val = (float)currentValue / (float)maxValue;
//text.text = Mathf.FloorToInt(val * 100) + "%";
text.text=currentValue*500+" 马力";
}
}
}
@@ -419,18 +419,18 @@ MonoBehaviour:
HideSetupWizard: 1
LastEventReferenceScanVersion: 131621
Platforms:
- {fileID: 9010303474896345012}
- {fileID: 6330521338056678831}
- {fileID: 3979222738758991920}
- {fileID: -1580684736993228498}
- {fileID: 1100827045814593625}
- {fileID: 6477534247104662684}
- {fileID: -785679389004310805}
- {fileID: 1132312529069990576}
- {fileID: -6421979802148699356}
- {fileID: 5613685733850034091}
- {fileID: -2493609972237370556}
- {fileID: -1580684736993228498}
- {fileID: -785679389004310805}
- {fileID: -712030531834803398}
- {fileID: 1100827045814593625}
- {fileID: 1132312529069990576}
- {fileID: 3979222738758991920}
- {fileID: 5613685733850034091}
- {fileID: 6330521338056678831}
- {fileID: 6477534247104662684}
- {fileID: 9010303474896345012}
MigratedPlatforms: 0500000000000000060000000a0000000800000009000000120000000c000000150000000b0000000200000001000000
--- !u!114 &1100827045814593625
MonoBehaviour:
@@ -794,16 +794,16 @@ MonoBehaviour:
HasValue: 0
displaySortOrder: 0
childIdentifiers:
- 0f8eb3f400726694eb47beb1a9f94ce8
- 46fbfdf3fc43db0458918377fd40293e
- 2fea114e74ecf3c4f920e1d5cc1c4c40
- e7a046c753c3c3d4aacc91f6597f310d
- 52eb9df5db46521439908db3a29a1bbb
- 2c5177b11d81d824dbb064f9ac8527da
- b7716510a1f36934c87976f3a81dbf3d
- c88d16e5272a4e241b0ef0ac2e53b73d
- de700ef3f37a49b58a57ae3addf01ad9
- 46fbfdf3fc43db0458918377fd40293e
- 52eb9df5db46521439908db3a29a1bbb
- fd7c55dab0fce234b8c25f6ffca523c1
- 2fea114e74ecf3c4f920e1d5cc1c4c40
- 2c5177b11d81d824dbb064f9ac8527da
- 0f8eb3f400726694eb47beb1a9f94ce8
- c88d16e5272a4e241b0ef0ac2e53b73d
- e7a046c753c3c3d4aacc91f6597f310d
codecChannels:
Value: []
HasValue: 0
Binary file not shown.
@@ -0,0 +1,242 @@
fileFormatVersion: 2
guid: 64008f2c27d35ac409386015a6bb5887
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: b2a9591990af98743ba3ff7cf1000886, type: 3}
textureImporterSettings:
alphaSource: 1
mipMapMode: 0
enableMipMap: 1
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
convertToNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
swizzle: 50462976
isReadable: 0
streamingMipmaps: 1
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
nPOTScale: 1
sRGBTexture: 1
spriteMode: 2
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 500
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 0
flipbookColumns: 0
ignorePngGamma: 0
cookieMode: 0
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
normalMap: 0
textureFormat: 0
maxTextureSize: 0
lightmap: 0
compressionQuality: 0
linearTexture: 0
grayScaleToAlpha: 0
rGBM: 0
cubemapConvolutionSteps: 0
cubemapConvolutionExponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
applyGammaDecoding: 0
spriteImportData:
- name:
originalName:
pivot: {x: 0, y: 0}
alignment: 0
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 0
y: 0
width: 0
height: 0
spriteID:
spriteBone: []
spriteOutline: []
vertices: []
spritePhysicsOutline: []
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 0, y: 0}
spritePosition: {x: 0, y: 0}
mosaicSpriteImportData: []
rigSpriteImportData:
- name: "\u56FE\u5C42 2"
originalName:
pivot: {x: 0.5, y: 0.5}
alignment: 0
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 4
y: 4
width: 1823
height: 1127
spriteID: bebac499b546daf4893c5ecd0bf27294
spriteBone: []
spriteOutline: []
vertices: []
spritePhysicsOutline: []
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 4, y: 4}
spritePosition: {x: 0, y: 0}
characterData:
bones: []
parts: []
dimension: {x: 0, y: 0}
characterGroups: []
pivot: {x: 0, y: 0}
boneReadOnly: 0
sharedRigSpriteImportData: []
sharedRigCharacterData:
bones: []
parts: []
dimension: {x: 0, y: 0}
characterGroups: []
pivot: {x: 0, y: 0}
boneReadOnly: 0
platformSettings:
- name: DefaultTexturePlatform
overridden: 0
ignorePlatformSupport: 0
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
forceMaximumCompressionQuality_BC6H_BC7: 0
crunchedCompression: 0
allowsAlphaSplitting: 0
androidETC2FallbackOverride: 0
- name: Standalone
overridden: 0
ignorePlatformSupport: 0
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
forceMaximumCompressionQuality_BC6H_BC7: 0
crunchedCompression: 0
allowsAlphaSplitting: 0
androidETC2FallbackOverride: 0
- name: Server
overridden: 0
ignorePlatformSupport: 0
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
forceMaximumCompressionQuality_BC6H_BC7: 0
crunchedCompression: 0
allowsAlphaSplitting: 0
androidETC2FallbackOverride: 0
- name: Android
overridden: 0
ignorePlatformSupport: 0
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
forceMaximumCompressionQuality_BC6H_BC7: 0
crunchedCompression: 0
allowsAlphaSplitting: 0
androidETC2FallbackOverride: 0
- name: WebGL
overridden: 0
ignorePlatformSupport: 0
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
forceMaximumCompressionQuality_BC6H_BC7: 0
crunchedCompression: 0
allowsAlphaSplitting: 0
androidETC2FallbackOverride: 0
mosaicLayers: 1
characterMode: 1
documentPivot: {x: 0, y: 0}
documentAlignment: 7
importHiddenLayers: 0
layerMappingOption: 2
generatePhysicsShape: 0
paperDollMode: 0
keepDupilcateSpriteName: 1
skeletonAssetReferenceID:
padding: 4
spriteSizeExpand: 0
spriteCategoryList:
categories: []
spritePackingTag:
resliceFromLayer: 0
mosaicPSDLayers: []
rigPSDLayers:
- name: "\u56FE\u5C42 2"
spriteName: "\u56FE\u5C42 2"
isGroup: 0
parentIndex: -1
spriteID: bebac499b546daf4893c5ecd0bf27294
layerID: 8
mosaicPosition: {x: 4, y: 4}
flatten: 0
isImported: 1
isVisible: 1
- name: "\u56FE\u5C42 1"
spriteName: "\u56FE\u5C42 1"
isGroup: 0
parentIndex: -1
spriteID: 079b5602caf6ad6459a584388bf71067
layerID: 2
mosaicPosition: {x: 4, y: 4}
flatten: 0
isImported: 0
isVisible: 0
sharedRigPSDLayers: []
pSDLayerImportSetting: []
importFileNodeState: 1
platformSettingsDirtyTick: 0
spriteSizeExpandChanged: 0
generateGOHierarchy: 0
textureAssetName:
prefabAssetName:
spriteLibAssetName:
skeletonAssetName:
secondarySpriteTextures: []
@@ -0,0 +1,212 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!213 &21300000
Sprite:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: "\u53D8\u901F\u7BB1\u5531\u7247\u9F7F\u8F6E"
m_Rect:
serializedVersion: 2
x: 3962
y: 5054
width: 130
height: 130
m_Offset: {x: 0, y: 0}
m_Border: {x: 0, y: 0, z: 0, w: 0}
m_PixelsToUnits: 215
m_Pivot: {x: 0.5, y: 0.5}
m_Extrude: 1
m_IsPolygon: 0
m_AtlasName:
m_PackingTag:
m_RenderDataKey:
149a798e8f987264f82beb4f4052eb5e: -611960561148999933
m_AtlasTags: []
m_SpriteAtlas: {fileID: 0}
m_RD:
serializedVersion: 3
texture: {fileID: -8328923581568760697, guid: 149a798e8f987264f82beb4f4052eb5e, type: 3}
alphaTexture: {fileID: 0}
secondaryTextures: []
m_SubMeshes:
- serializedVersion: 2
firstByte: 0
indexCount: 6
topology: 0
baseVertex: 0
firstVertex: 0
vertexCount: 4
localAABB:
m_Center: {x: 0, y: 0, z: 0}
m_Extent: {x: 0, y: 0, z: 0}
m_IndexBuffer: 000001000200020001000300
m_VertexData:
serializedVersion: 3
m_VertexCount: 4
m_Channels:
- stream: 0
offset: 0
format: 0
dimension: 3
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 1
offset: 0
format: 0
dimension: 2
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 1
offset: 8
format: 0
dimension: 4
- stream: 1
offset: 24
format: 10
dimension: 4
m_DataSize: 208
_typelessdata: 6bca9abe6bca9a3e000000006bca9a3e6bca9a3e000000006bca9abe6bca9abe000000006bca9a3e6bca9abe0000000000a0773f0000223f0000803f0000000000000000000000000000000000000000000000000000000000c07f3f0000223f0000803f0000000000000000000000000000000000000000000000000000000000a0773f00f01d3f0000803f0000000000000000000000000000000000000000000000000000000000c07f3f00f01d3f0000803f00000000000000000000000000000000000000000000000000000000
m_Bindpose: []
textureRect:
serializedVersion: 2
x: 3962
y: 5054
width: 130
height: 130
textureRectOffset: {x: 0, y: 0}
atlasRectOffset: {x: -1, y: -1}
settingsRaw: 0
uvTransform: {x: 215, y: 4027, z: 215, w: 5119}
downscaleMultiplier: 1
m_AtlasRD:
serializedVersion: 3
texture: {fileID: -8328923581568760697, guid: 149a798e8f987264f82beb4f4052eb5e, type: 3}
alphaTexture: {fileID: 0}
secondaryTextures: []
m_SubMeshes:
- serializedVersion: 2
firstByte: 0
indexCount: 6
topology: 0
baseVertex: 0
firstVertex: 0
vertexCount: 4
localAABB:
m_Center: {x: 0, y: 0, z: 0}
m_Extent: {x: 0, y: 0, z: 0}
m_IndexBuffer: 000001000200020001000300
m_VertexData:
serializedVersion: 3
m_VertexCount: 4
m_Channels:
- stream: 0
offset: 0
format: 0
dimension: 3
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 1
offset: 0
format: 0
dimension: 2
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 1
offset: 8
format: 0
dimension: 4
- stream: 1
offset: 24
format: 10
dimension: 4
m_DataSize: 208
_typelessdata: 6bca9abe6bca9a3e000000006bca9a3e6bca9a3e000000006bca9abe6bca9abe000000006bca9a3e6bca9abe0000000000a0773f0000223f0000803f0000000000000000000000000000000000000000000000000000000000c07f3f0000223f0000803f0000000000000000000000000000000000000000000000000000000000a0773f00f01d3f0000803f0000000000000000000000000000000000000000000000000000000000c07f3f00f01d3f0000803f00000000000000000000000000000000000000000000000000000000
m_Bindpose: []
textureRect:
serializedVersion: 2
x: 3962
y: 5054
width: 130
height: 130
textureRectOffset: {x: 0, y: 0}
atlasRectOffset: {x: -1, y: -1}
settingsRaw: 0
uvTransform: {x: 215, y: 4027, z: 215, w: 5119}
downscaleMultiplier: 1
m_PhysicsShape: []
m_Bones: []
m_SpriteID: db22083879843b843b69dc1550fe5bfc
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f33b33323f3c1314dbd795a207653ce0
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 21300000
userData:
assetBundleName:
assetBundleVariant:
+50
View File
@@ -0,0 +1,50 @@
%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: FadeRing
m_Shader: {fileID: 4800000, guid: bb8f232219e0a3a488c321b63e85281f, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _AlphaTex:
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}
- _MaskTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _NormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _EnableExternalAlpha: 0
- _Progress: 0.137
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _Flip: {r: 1, g: 1, b: 1, a: 1}
- _RendererColor: {r: 1, g: 1, b: 1, a: 1}
m_BuildTextureStacks: []
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 2d5f7d9c99f43ce4b8ec277a4ab03080
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
+64
View File
@@ -0,0 +1,64 @@
Shader "Unlit/CircleProgressBar"
{
Properties
{
_MainTex("Texture", 2D) = "white" {}
_Progress("Progress",Range(0,1)) = 0.5
}
SubShader
{
Tags
{
"RenderType"="Transparent"
}
Blend SrcAlpha OneMinusSrcAlpha
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
sampler2D _MainTex;
float4 _MainTex_ST;
float _Progress;
v2f vert(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
return o;
}
fixed4 frag(v2f i) : SV_Target
{
float4 col = tex2D(_MainTex, i.uv);
float4 final = step(1 - col.r, _Progress);
float3 ramp = lerp(float3(0, 1, 0), float3(1, 0, 0), _Progress);
final.rgb = final.rgb * ramp;
final.a = col.a;
if (1 - col.r > _Progress)
{
final.a = 0;
}
return final;
}
ENDCG
}
}
}
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: bb8f232219e0a3a488c321b63e85281f
ShaderImporter:
externalObjects: {}
defaultTextures: []
nonModifiableTextures: []
userData:
assetBundleName:
assetBundleVariant:
@@ -316,53 +316,79 @@ me: 那来吧。在调整之前…<br>让我看看,你现在能跑多快。
shitou: 收到~
shitou: 呜——!
石头加起速来,引擎轰鸣着达到了跑到了某个速度。#auto_next
<<wait 3>>
<<step_on_gas 0.6 4>>
//石头加起速来,引擎轰鸣着达到了跑到了某个速度。#auto_next
//<<wait 3>>
me: 9800转…好高啊。
shitou: 嘿嘿,医生,我要跑得双倍快才行哩!
me: 双倍快?
shitou: 对!我要比大家都快一倍!这样我才能跑双倍的货~
<<hide_dialog>>
<<wait 0.5>>
me: ……你是想跑到20000转吗?那样要赶上火车了。
shitou: 哈哈,我真能变成火车…那就……太酷啦!
shitou: 开玩笑~医生!这只是一种比喻~<br>我只要能跑到12000转就够啦!
<<hide_dialog>>
<<wait 0.5>>
me: 那么…加压应该是可以做到的。
me:拉动左边的拉绳,就可以提升涡轮部分的转速了
<<active_engine_pull>>
//【加压按钮可用】#auto_next
//<<wait 1.5>>
【加压按钮可用】#auto_next
<<wait 1.5>>
// ->加压
->加压
// <<complete_task TaskManager 为动力模块进行增压>>
<<complete_task TaskManager 为动力模块进行增压>>
// 你向气阀内压入气体,石头的速度变得更高了。#auto_next
// <<wait 1>>
你向气阀内压入气体,石头的速度变得更高了。#auto_next
<<wait 1>>
// <<task_moveOut TaskManager>>
<<task_moveOut TaskManager>>
// <<wait 1>>
<<wait 1>>
//<<wait 1.5>>
//me: 嗯…看起来一切正常?没有缺齿轮之类的报告……
//shitou: 正常?不可能,医生。我明显感觉它有问题。
//me: 虽然我不知道你说的会是什么问题…<br>但这确实是最有可能掉出齿轮的地方。
//<<wait 0.5>>
//me: 来都来了……<br>以防万一,最好让它跑一次;<br>确认它在运行状态下是没问题的。
//<<hide_dialog>>
//<<wait 0.5>>
//<<MessageBoxSetText 正在运行自检……>>
//<<wait 0.1>>
//<<MessageBoxSetText 请将转速提高至2500RPM以进行自检!>>
//<<wait 0.5>>
//me: ……
//me: 2500,哇哦。
//shitou: 怎么了,医生?找到问题了?
//me: 不是。正常机体的动力系统只能跑到500RPM…<br>而且还得是在劳累或者激动的情况下。
//me: 但你能跑到2500RPM。这是一般机体的…5倍。<br>通常转到这个速度,就意味着机体要接近报废了。
//me: 不过也不奇怪,毕竟你是需要跑货的。<br>……你简直就是一台人形货车了。
//shitou: 嗨!我要是能天天跑到2500就好了!<br>可惜城里的红绿灯实在是太多了。
//me: 你现在就有机会了。<br>我需要手动把你提到2500RPM,来完整测试引擎的运行能力。
//shitou: 要开跑了吗,医生?太好啦!我最喜欢跑货了!<br>…哎呀,可惜!要是我状态完美,能边跑边唱……
//me: 这是治疗,不是赛车。<br>让它跑起来是为了确认它到底有没有问题。
//shitou: 不过医生…如果里面缺一个齿轮,不会有问题吗?<br>比如把其他的齿轮也甩飞出来之类的……
//me: 按理来说不会…至少手册说不会。
===
title: 调速后测速
tags:
colorID: 8
group: 插入触发
position: -158,370
---
shitou: 哇~好快啊,从来没有过的感觉!
<<hide_dialog>>
<<wait 0.5>>
<<shake_camera 0.2 0.3 20>>
石头的速度忽然掉了下来,逐渐回到怠速。
<<wait 0.5>>
<<step_on_gas 0.2 0.3>>
shitou: 啊!
shitou: 医生…我怎么…动不了了!
<<hide_dialog>>
<<wait 0.5>>
@@ -372,30 +398,24 @@ me: 听起来像是变速箱里的声音……我这就看看。
<<task_moveIn TaskManager>>
->打开变速箱盖
<<switch_fix_system_to Gear>>
<<open_gear_cover>>
<<hide_dialog>>
<<wait 1>>
你打开引擎的变速箱盖…#auto_next
<<wait 1>>
<<shake_camera 0.2 0.3 20>>
me: 哎呀……有几个齿轮松脱了。
<<complete_task TaskManager 检查变速箱的异响>>
<<hide_dialog>>
<<wait 1>>
<<open_gear_panel>>
<<wait 0.5>>
->拿起齿轮
<<show_obj 变速箱唱片齿轮>>
me: 这些齿轮表面有一部分竟然是塑胶的…<br>…看起来强度很低啊。
【拿起齿轮端详(show obj)】
<<wait 0.5>>
<<hide_obj>>
<<hide_dialog>>
<<wait 0.5>>
me: 齿轮箱里看起来也有一些不属于这里的结构…这根杆子是什么?
shitou: 噢~?你说的是我的~唱片机吗?
me: 唱片机……?这里不应该是变速箱吗……
@@ -414,31 +434,26 @@ me: 无论如何,我先把这些脱落的齿轮装回去吧。
//shitou: 噢?你说的是*那些*齿轮吗?
//me: 什么是*那些*齿轮?
//shitou: 嘿嘿。快把它放回去,让我演示给你看!
->放回去
<<hide_dialog>>
<<wait 1>>
<<close_gear_panel>>
// <<close_gear_panel>>
<<complete_task TaskManager 恢复变速箱的齿轮>>
<<task_moveOut TaskManager>>
<<wait 0.5>>
me: 好了。石头,再试试吧,跑起来。
shitou: 该播放音乐了吗?医生!
// <<switch_fix_system_to Engine>>
<<step_on_gas 0.6 3>>
<<hide_dialog>>
<<wait 0.5>>
shitou: 该播放音乐了吗?医生!
// 石头加起速来,引擎轰鸣着达到了跑到了某个速度。#auto_next
// <<wait 2>>
石头加起速来,引擎轰鸣着达到了跑到了某个速度。#auto_next
<<wait 2>>
<<move_needle>>
<<wait 1>>
<<play_loop_audio disc>>
那根奇怪的杆子转了下来,搭在一张唱片上。#auto_next
<<wait 2>>
me: 原来如此……
shitou: 医生,这可是我的得意改装!我一直!就喜欢音乐!可惜我~五音不全,而且引擎太吵,我听不到外边的音乐!
@@ -452,24 +467,24 @@ me: 这倒是…很巧妙的改造。
<<hide_dialog>>
<<wait 1>>
me: 但是,有一个问题……
shitou: 好了,现在可以~马力全开!
me: 等等石头,那些齿轮...
<<hide_dialog>>
<<wait 0.2>>
<<step_on_gas 0.75 3>>
shitou: 哇,感觉充满力量!要来了!
<<step_on_gas 0.9 3>>
<<pause_loop_audio>>
<<random_play_interaction tv_in>>
<<shake_camera 0.4 0.3 20>>
石头的速度又掉了下来,逐渐回到怠速。#auto_next
<<step_on_gas 0.2 0.5>>
<<wait 1>>
shitou: 哎呀,医生!我又动不了了!
me: 这就是我说的问题。刚才已经发生过一次了……
me: 我先给你安回去吧…但你别再加速了。不然还得飞出来。
你将齿轮装了回去。(自动)#auto_next
<<close_gear_cover>>
<<wait 1>>
<<fade_in 1>>
<<switch_fix_system_to "Clinic">>
<<character_fade_in_new>>
@@ -525,21 +540,17 @@ me: 啊…那倒不贵。不过是一些铁块罢了。
shitou: 哈哈哈!那太好了,那还等什么?医生,我们来吧。
<<fade_in 1>>
<<switch_fix_system_to "Engine">>
<<switch_fix_system_to "Gear">>
<<fade_out 1>>
<<open_gear_cover>>
me: 让我找找…镍铬齿轮…
<<open_gear_panel>>
<<add_task TaskManager 更换镍铬齿轮>>
<<task_moveIn TaskManager>>
<<hide_dialog>>
<<wait 0.5>>
->将镍铬齿轮替换上去
<<hide_dialog>>
<<wait 1>>
<<close_gear_panel>>
@@ -556,32 +567,5 @@ me: 好了…再播…跑一次吧。
<<wait 2>>
shitou: 呜呼!医生~我感觉~我像在飞一样!
//<<wait 1.5>>
//me: 嗯…看起来一切正常?没有缺齿轮之类的报告……
//shitou: 正常?不可能,医生。我明显感觉它有问题。
//me: 虽然我不知道你说的会是什么问题…<br>但这确实是最有可能掉出齿轮的地方。
//<<wait 0.5>>
//me: 来都来了……<br>以防万一,最好让它跑一次;<br>确认它在运行状态下是没问题的。
//<<hide_dialog>>
//<<wait 0.5>>
//<<MessageBoxSetText 正在运行自检……>>
//<<wait 0.1>>
//<<MessageBoxSetText 请将转速提高至2500RPM以进行自检!>>
//<<wait 0.5>>
//me: ……
//me: 2500,哇哦。
//shitou: 怎么了,医生?找到问题了?
//me: 不是。正常机体的动力系统只能跑到500RPM…<br>而且还得是在劳累或者激动的情况下。
//me: 但你能跑到2500RPM。这是一般机体的…5倍。<br>通常转到这个速度,就意味着机体要接近报废了。
//me: 不过也不奇怪,毕竟你是需要跑货的。<br>……你简直就是一台人形货车了。
//shitou: 嗨!我要是能天天跑到2500就好了!<br>可惜城里的红绿灯实在是太多了。
//me: 你现在就有机会了。<br>我需要手动把你提到2500RPM,来完整测试引擎的运行能力。
//shitou: 要开跑了吗,医生?太好啦!我最喜欢跑货了!<br>…哎呀,可惜!要是我状态完美,能边跑边唱……
//me: 这是治疗,不是赛车。<br>让它跑起来是为了确认它到底有没有问题。
//shitou: 不过医生…如果里面缺一个齿轮,不会有问题吗?<br>比如把其他的齿轮也甩飞出来之类的……
//me: 按理来说不会…至少手册说不会。
<<jump 分析检查结果>>
===
===
File diff suppressed because it is too large Load Diff
@@ -135,6 +135,18 @@ namespace AibisDream
return false;
}
}
/// <summary>
/// 跳到下一句
/// </summary>
public void JumpLine()
{
if (!DialogCanvasManager.GetCurView().TrySkipLine())
{
AudioManager.Instance.StopVoice();
DialogCanvasManager.GetCurView().NextStep();
}
}
#region
-25
View File
@@ -68,30 +68,5 @@ namespace AibisDream
var options = DialogOption.GeneOptions(dialogueOptions, onOptionSelected);
DialogCanvasManager.GetCurView().ShowOptions(options);
}
private void Update()
{
if (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space))
{
JumpLine();
}
}
/// <summary>
/// 跳到下一句
/// </summary>
private void JumpLine()
{
if (_isInCommand)
{
return;
}
if (!DialogCanvasManager.GetCurView().TrySkipLine())
{
AudioManager.Instance.StopVoice();
DialogCanvasManager.GetCurView().NextStep();
}
}
}
}
@@ -1,5 +1,4 @@
using System;
using AibisDream.FixSystem;
using UnityEngine;
namespace AibisDream.Framework
@@ -47,14 +46,6 @@ namespace AibisDream.Framework
{
public void OnUpdate()
{
if (Input.GetKeyDown(KeyCode.K))
{
MonoCenter.Mono.StartCoroutine(CameraKit.Instance.TransCameraAsync(new Vector3(5f, 5f, -10), 5, 5f));
}
if (Input.GetKeyDown(KeyCode.A))
{
}
}
}
+3 -3
View File
@@ -8,7 +8,8 @@ namespace AibisDream
{
NextYarn,
PlugIn,
PlugOut
PlugOut,
Menu
}
public enum DialogEventEnum
@@ -17,8 +18,7 @@ namespace AibisDream
LineShowed,
LineEnd,
OptionShow,
OptionSelected,
Command
OptionSelected
}
public enum InteractionEventEnum
+10 -16
View File
@@ -34,11 +34,6 @@ namespace AibisDream
_trigger.Register(EventTriggerType.Drag, OnDrag);
}
public float GetCurOil()
{
return Mathf.Abs((transform.localPosition.y - _initPos.y) / maxDistance);
}
private void Update()
{
if (_isDragging)
@@ -58,15 +53,10 @@ namespace AibisDream
// 如果拖拽点在下方,限速移动
else
{
if (Mathf.Abs(_dragPoint.y - transform.position.y) / Time.deltaTime >
_engineSystem.engineConfig.pullMaxSpeed)
{
curY = transform.position.y - _engineSystem.engineConfig.pullMaxSpeed * Time.deltaTime;
}
else
{
curY = _dragPoint.y;
}
curY = _dragPoint.y;
var pullDelta = Mathf.Abs(curY - transform.position.y) / maxDistance;
// 将增量同步给Engine
_engineSystem.AddAirPress(pullDelta);
}
transform.position = new Vector3(transform.position.x, curY, transform.position.y);
@@ -75,7 +65,8 @@ namespace AibisDream
private void OnDrag(BaseEventData data)
{
// 这里是一些阻碍拖动的情况
if (!IsActive) return;
// 正常情况下不会出错
if (data is not PointerEventData pointerData) return;
@@ -85,6 +76,9 @@ namespace AibisDream
private void OnBeginDrag(BaseEventData data)
{
// 这里是一些阻碍拖动的情况
if (!IsActive) return;
// 正常情况下不会出错
if (data is not PointerEventData pointerData) return;
// 设置拖拽目标点
@@ -112,7 +106,7 @@ namespace AibisDream
_dragPoint = new Vector3(transform.position.x, dragY, transform.position.z);
}
public bool IsActive => true;
public bool IsActive => _engineSystem.isPullActive;
public bool IsAvailable => _engineSystem.isAvailable;
+30 -83
View File
@@ -1,8 +1,10 @@
using System;
using System.Collections;
using AibisDream.FixSystem;
using AibisDream.Framework;
using AibisDream.Utility;
using Cinemachine;
using DG.Tweening;
using UnityEngine;
using UnityEngine.Events;
@@ -10,15 +12,16 @@ namespace AibisDream
{
public class EngineSystem : MonoBehaviour
{
private CordPull _cordPull;
private StaticGear _centerGear;
[Header("系统配置")] public EngineConfig engineConfig;
[Header("系统数据")] public EngineData engineData;
public bool isAvailable;
public bool isPullActive;
private bool _isSuccess;
[HideInInspector] public UnityEvent<float> updateSpeedEvent = new();
public float curSpeed;
public float targetSpeed=0.95f;
[HideInInspector] public UnityEvent<float, float> updateSpeedEvent = new();
[SerializeField] private float coverMoveDuration = 5f;
@@ -27,10 +30,9 @@ namespace AibisDream
private void Awake()
{
FixSystemCenter.SystemDic.Register(this);
_cordPull = transform.Find("拉绳").GetComponent<CordPull>();
_centerGear = transform.Find("中央齿轮").GetComponent<StaticGear>();
_centerGear.initSpeed = engineConfig.gearSpeed;
// 注册相机
var virtualCam = transform.Find("Engine Camera").GetComponentInChildren<ICinemachineCamera>();
CameraKit.Instance.RegisterCamera(CameraEnum.Engine, virtualCam);
@@ -38,36 +40,41 @@ namespace AibisDream
private void Start()
{
// 初始化数据
engineData = new EngineData
{
config = engineConfig
};
_centerGear.StartRotate();
}
public IEnumerator StepOnGas(float targetSpeed, float duration)
{
// 逐渐加速
yield return DOTween.To(() => curSpeed, x => { curSpeed = x; }, targetSpeed, duration).WaitForCompletion();
}
public void AddAirPress(float speedDelta)
{
curSpeed = CommonUtil.Limit(curSpeed + speedDelta / engineConfig.pullCount, 1, 0);
}
private void OnDestroy()
{
CameraKit.Instance.UnRegisterCamera(CameraEnum.Engine);
}
public void Update()
private void Update()
{
// 收集数据
engineData.curOil = _cordPull.GetCurOil();
// 更新数据
engineData.CalcSpeed();
// 传递速度
updateSpeedEvent.Invoke(engineData.GetRealSpeed());
if (engineData.CheckSuccess())
updateSpeedEvent.Invoke(curSpeed, GetSpeedScale());
if (curSpeed >= targetSpeed && !_isSuccess)
{
Debug.Log("引擎成功");
_isSuccess = true;
isPullActive = false;
DialogController.Instance?.StartDialogNode("EngineSuccess");
}
}
private float GetSpeedScale()
{
return 1 + curSpeed * engineConfig.speedRate;
}
/// <summary>
/// 开启系统交互
/// </summary>
@@ -88,70 +95,10 @@ namespace AibisDream
[Serializable]
public struct EngineConfig
{
[Header("油门倍率")] public float oilRate;
[Header("阻力倍率")] public float resistance;
[Header("齿轮基础速度")] public float gearSpeed;
[Header("齿轮速度倍率")] public float speedRate;
[Header("成功所需时间")] public float targetDuration;
[Header("拉满几次到全速")] public float pullCount;
[Header("拉绳最大速度")] public float pullMaxSpeed;
[Header("拉绳回缩速度")] public float returnSpeed;
}
[Serializable]
public struct EngineData
{
public EngineConfig config;
public float curSpeed;
public float curOil;
public float curAcceleration;
public bool isSuccess;
public float reachTargetTime;
public void CalcSpeed()
{
if (curOil != 0)
{
curAcceleration = curAcceleration < 0 ? 0 : curAcceleration;
curAcceleration = CommonUtil.Limit(curOil * config.oilRate * Time.deltaTime + curAcceleration, 100, 0);
}
else
{
curAcceleration = -config.resistance * (1f + curSpeed);
}
curSpeed = CommonUtil.Limit(curSpeed + curAcceleration * Time.deltaTime, 1, 0);
}
public bool CheckSuccess()
{
// 已经成功就不用校验了
if (isSuccess) return false;
if (curSpeed >= 0.95f)
{
reachTargetTime += Time.deltaTime;
}
else
{
reachTargetTime = 0;
}
// 如果速度达标时间足够就判断成功
if (!(reachTargetTime >= config.targetDuration)) return false;
isSuccess = true;
return true;
}
/// <summary>
/// 获取处理后的速度
/// </summary>
/// <returns>速度</returns>
public float GetRealSpeed()
{
return 1 + curSpeed * config.speedRate;
}
}
}
@@ -1,4 +1,5 @@
using System.Collections;
using AibisDream.FixSystem;
using UnityEngine;
using Yarn.Unity;
@@ -6,6 +7,8 @@ namespace AibisDream
{
public static class EngineYarnCommand
{
private static EngineSystem EngineSystem => FixSystemCenter.SystemDic.Get<EngineSystem>();
// 打开引擎盖
[YarnCommand("open_engine_cover")]
public static IEnumerator OpenEngineCover()
@@ -21,5 +24,26 @@ namespace AibisDream
Debug.LogWarning("关闭引擎盖命令已废弃,请尽快删除");
yield break;
}
/// <summary>
/// 踩油门
/// </summary>
/// <param name="targetSpeed">目标速度</param>
/// <param name="duration">用时</param>
/// <returns>协程</returns>
[YarnCommand("step_on_gas")]
public static IEnumerator StepOnGas(float targetSpeed, float duration)
{
return EngineSystem.StepOnGas(targetSpeed, duration);
}
/// <summary>
/// 激活拉绳
/// </summary>
[YarnCommand("active_engine_pull")]
public static void ActivePull()
{
EngineSystem.isPullActive = true;
}
}
}
@@ -1,25 +1,30 @@
using UnityEngine;
using UnityEngine;
using RainbowArt.CleanFlatUI;
namespace AibisDream
{
public class SpeedDashboard : MonoBehaviour
{
private Transform _pointer;
[SerializeField] private float leftRot;
[SerializeField] private float rightRot;
private Material _material;
private EngineSystem _engineSystem;
protected void OnStart()
{
_pointer = transform.Find("Pointer");
private ProgressBarGridCircular progress;
private static readonly int Progress1 = Shader.PropertyToID("_Progress");
private void Awake()
{
_engineSystem = transform.parent.GetComponent<EngineSystem>();
_material = _engineSystem.transform.Find("心脏引擎").GetComponent<SpriteRenderer>().material;
progress=FindObjectOfType<ProgressBarGridCircular>();
_engineSystem.updateSpeedEvent.AddListener(OnSpeedChange);
}
protected void UpdateDashboard(EngineData data)
private void OnSpeedChange(float originSpeed, float speedScale)
{
var targetRot = (rightRot - leftRot) * data.curSpeed + leftRot;
_pointer.eulerAngles = new Vector3(0, 0, -targetRot);
_material.SetFloat("_VibrateFade", originSpeed);
progress.CurrentValue=Mathf.RoundToInt(originSpeed * 50);
//_material.SetFloat(Progress1, originSpeed);
}
}
}
}
@@ -1,11 +1,3 @@
fileFormatVersion: 2
guid: 73c497ccb39448718a07911a5e674d5f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 4d9cead340d34293bf0fd9631aede238
timeCreated: 1737626210
+2 -6
View File
@@ -22,12 +22,8 @@ namespace AibisDream
.SetEase(Ease.Linear)
.SetLoops(-1, LoopType.Incremental);
}
/// <summary>
/// 为旋转加速
/// </summary>
/// <param name="speed">速度倍率</param>
private void UpdateSpeedScale(float speed)
private void UpdateSpeedScale(float originSpeed, float speed)
{
_rotateTween.timeScale = speed;
}
@@ -39,6 +39,8 @@ namespace AibisDream
private bool _isTargetReached;
private bool _isDiscReady;
public float initSpeed = 1;
private void Awake()
{
Init();
@@ -65,6 +67,10 @@ namespace AibisDream
var panelShafts = _panel.GetComponentsInChildren<Shaft>();
_shaftGraph = new ShaftGraph(shafts, panelShafts);
var engine = FixSystemCenter.SystemDic.Get<EngineSystem>();
_shaftGraph.StartRotate(initSpeed);
engine.updateSpeedEvent.AddListener(_shaftGraph.Accelerate);
_panel.gameObject.SetActive(false);
}
+1 -8
View File
@@ -23,9 +23,6 @@ namespace AibisDream
[SerializeField] private Gear childGear;
// 初始角速度
[SerializeField] private float initialSpeed;
// 目标角速度
[SerializeField] private float targetSpeed;
@@ -70,8 +67,7 @@ namespace AibisDream
// 如果带齿轮,要根据齿轮类型生成
childGear = InitGear(initRadius, initSprite, isInitGearBroken, isInitGearDisc);
speed = initialSpeed;
childGear.UpdateRotation(speed, _speedScale);
}
@@ -274,7 +270,6 @@ namespace AibisDream
isInitGearBroken = levelData.isGearBroken;
isInitGearDisc = levelData.isDisc;
discIdx = levelData.discIdx;
initialSpeed = levelData.initialSpeed;
targetSpeed = levelData.targetSpeed;
initRadius = levelData.radius;
}
@@ -291,7 +286,6 @@ namespace AibisDream
isGearBroken = isInitGearBroken,
isDisc = isInitGearDisc,
discIdx = discIdx,
initialSpeed = initialSpeed,
targetSpeed = targetSpeed,
radius = initRadius
};
@@ -315,7 +309,6 @@ namespace AibisDream
// 关卡数据
public ShaftType shaftType;
public float initialSpeed;
public float targetSpeed;
public bool hasChildGear;
public float radius;
+18 -12
View File
@@ -43,6 +43,24 @@ namespace AibisDream
UpdateSpeed();
}
/// <summary>
/// 初始化速度
/// </summary>
/// <param name="initSpeed">初始速度</param>
public void StartRotate(float initSpeed)
{
_vertexArray[_rootIdx].speed = initSpeed;
UpdateSpeed();
}
public void Accelerate(float originSpeed, float speed)
{
foreach (var shaft in _vertexArray)
{
if (shaft.HasChildGear()) shaft.UpdateSpeedScale(speed);
}
}
private int FindDriverIdx()
{
for (int i = 0; i < _vertexSize; i++)
@@ -261,17 +279,5 @@ namespace AibisDream
return isShaftAvailable;
}
/// <summary>
/// 通过引擎系统加速
/// </summary>
/// <param name="curSpeed">当前速度</param>
private void Accelerate(float curSpeed)
{
foreach (var shaft in _vertexArray)
{
if (shaft.HasChildGear()) shaft.UpdateSpeedScale(1 + curSpeed);
}
}
}
}
+36 -2
View File
@@ -15,13 +15,13 @@ namespace AibisDream
public Sprite nextTalk, talking, option, interactive, holding, disable, eye;
private Image _cursor;
private RectTransform _cursorCanvas;
#region
private Coroutine _switchCoroutine;
private CursorState _curState = CursorState.Default;
private bool _isTalking;
[HideInInspector] public bool isInMenu;
#endregion
@@ -59,12 +59,18 @@ namespace AibisDream
private void InitRefs()
{
_cursor = transform.Find("Cursor").GetComponent<Image>();
_cursorCanvas = GetComponent<RectTransform>();
}
private void RegisterEvent()
{
// 此处监听所有可能对鼠标状态产生影响的事件
RegisterDialogEvent();
RegisterTriggerEvent();
RegisterMenu();
}
private void RegisterDialogEvent()
{
// 对话相关
_unRegisters.Add(EnumEventSystem.Global.Register<DialogEventEnum, DialogLine>(DialogEventEnum.LineStart,
OnLineStart));
@@ -74,7 +80,10 @@ namespace AibisDream
_unRegisters.Add(
EnumEventSystem.Global.Register<DialogEventEnum, DialogLine>(DialogEventEnum.OptionSelected,
OnOptionSelect));
}
private void RegisterTriggerEvent()
{
// 交互相关
_unRegisters.Add(EnumEventSystem.Global.Register(InteractionEventEnum.Start, OnInteractiveStart));
_unRegisters.Add(EnumEventSystem.Global.Register(InteractionEventEnum.End, OnInteractiveEnd));
@@ -89,6 +98,22 @@ namespace AibisDream
EnumEventSystem.Global.Register<TriggerEnum, IInteraction>(TriggerEnum.PointerUp, OnPointerUp));
}
private void RegisterMenu()
{
_unRegisters.Add(EnumEventSystem.Global.Register<EventEnum, bool>(EventEnum.Menu, OnMenuChange));
}
private void Update()
{
if (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space))
{
if (_isTalking && !isInMenu)
{
DialogController.Instance.JumpLine();
}
}
}
private void LateUpdate()
{
// // 将虚拟指针与鼠标位置同步
@@ -190,6 +215,15 @@ namespace AibisDream
#endregion
#region
private void OnMenuChange(bool isMenuOpen)
{
isInMenu = isMenuOpen;
}
#endregion
#region
/// <summary>
@@ -162,6 +162,7 @@ namespace AibisDream
{
var logObj = transform.Find("Dialogue Log").gameObject;
logObj.SetActive(!logObj.activeSelf);
EnumEventSystem.Global.Send(EventEnum.Menu, logObj.activeSelf);
}
#endregion