龙腾猫跃 4 سال پیش
والد
کامیت
f50e15ea05

BIN
Assets/Resources/Audio/DicePickup1.ogg


BIN
Assets/Resources/Audio/DicePickup2.ogg


BIN
Assets/Resources/Audio/bullet_explode.ogg


BIN
Assets/Resources/Audio/enemy_die.ogg


BIN
Assets/Resources/Audio/fire.ogg


BIN
Assets/Resources/Audio/hurt.ogg


BIN
Assets/Resources/Audio/reload.ogg


+ 1 - 1
Assets/Resources/Dice/DiceEntity.cs

@@ -22,7 +22,7 @@ public class DiceEntity : MonoBehaviour {
     private void OnCollisionEnter2D(Collision2D collision) {
         if (!collision.gameObject.CompareTag("Player") || pickedUp) return;
         pickedUp = true;
-        AudioM.Play("DicePickup1");
+        AudioM.Play("DicePickup1", 0.8f);
         // 关闭其他移动
         GetComponent<Collider2D>().enabled = false;
         GetComponent<Rigidbody2D>().gravityScale = 0;

+ 1 - 1
Assets/Resources/Entities/Bullet.cs

@@ -5,7 +5,7 @@ using UnityEngine;
 public class Bullet : MonoBehaviour {
 
     private void OnCollisionEnter2D(Collision2D collision) {
-        if (!collision.gameObject.CompareTag("Border")) AudioM.Play("bullet_explode");
+        if (!collision.gameObject.CompareTag("Border")) AudioM.Play("bullet_explode", 0.4f);
         transform.localScale = Vector3.zero; Destroy(gameObject, 1);
     }
 

+ 1 - 1
Assets/Resources/Entities/EnemyBase.cs

@@ -18,7 +18,7 @@ public abstract class EnemyBase : EntityBase {
         if (currentHp == -1) currentHp = hp;
         currentHp--;
         if (currentHp <= 0) {
-            AudioM.Play("enemy_die");
+            AudioM.Play("enemy_die", 0.5f);
             transform.localScale = Vector3.zero;
             Destroy(gameObject, 1); // 防止动画没播放完导致报错
         }

BIN
Assets/Resources/Entities/EnemyShooter.png


+ 61 - 8
Assets/Resources/Entities/EnemyShooter.prefab

@@ -77,12 +77,12 @@ SpriteRenderer:
   m_SortingLayerID: 0
   m_SortingLayer: 0
   m_SortingOrder: -1
-  m_Sprite: {fileID: 21300000, guid: cd71811f0a949ae42a359249609c18d2, type: 3}
+  m_Sprite: {fileID: 21300000, guid: e63e487c43608af499653c65c42a31f1, type: 3}
   m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_FlipX: 0
   m_FlipY: 0
   m_DrawMode: 0
-  m_Size: {x: 1, y: 1}
+  m_Size: {x: 1.28, y: 3.84}
   m_AdaptiveModeThreshold: 0.5
   m_SpriteTileMode: 0
   m_WasSpriteAssigned: 1
@@ -127,13 +127,13 @@ BoxCollider2D:
     border: {x: 0, y: 0, z: 0, w: 0}
     pivot: {x: 0.5, y: 0}
     oldSize: {x: 1, y: 3}
-    newSize: {x: 1, y: 1}
+    newSize: {x: 1.28, y: 3.84}
     adaptiveTilingThreshold: 0.5
     drawMode: 0
     adaptiveTiling: 0
   m_AutoTiling: 0
   serializedVersion: 2
-  m_Size: {x: 0.9, y: 1}
+  m_Size: {x: 1, y: 1}
   m_EdgeRadius: 0
 --- !u!114 &6371604957627978543
 MonoBehaviour:
@@ -176,6 +176,7 @@ GameObject:
   m_Component:
   - component: {fileID: 8597255516571522798}
   - component: {fileID: 8597255516571522797}
+  - component: {fileID: 419963461820179309}
   m_Layer: 14
   m_Name: ShooterBase
   m_TagString: Untagged
@@ -214,13 +215,65 @@ BoxCollider2D:
   m_Offset: {x: 0, y: 0.1}
   m_SpriteTilingProperty:
     border: {x: 0, y: 0, z: 0, w: 0}
-    pivot: {x: 0, y: 0}
-    oldSize: {x: 0, y: 0}
-    newSize: {x: 0, y: 0}
-    adaptiveTilingThreshold: 0
+    pivot: {x: 0.5, y: 0}
+    oldSize: {x: 1, y: 3}
+    newSize: {x: 1.28, y: 3.84}
+    adaptiveTilingThreshold: 0.5
     drawMode: 0
     adaptiveTiling: 0
   m_AutoTiling: 0
   serializedVersion: 2
   m_Size: {x: 0.9, y: 0.2}
   m_EdgeRadius: 0
+--- !u!212 &419963461820179309
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8597255516571522799}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 0
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_ReceiveGI: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 1
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: d01333111542a7d46b4b9fdda35a586a, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1.28, y: 3.84}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0

BIN
Assets/Resources/Entities/EnemyShooter1.png


+ 1 - 1
Assets/Resources/Entities/EnemyShooter.png.meta → Assets/Resources/Entities/EnemyShooter1.png.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: cd71811f0a949ae42a359249609c18d2
+guid: e63e487c43608af499653c65c42a31f1
 TextureImporter:
   internalIDToNameTable: []
   externalObjects: {}

BIN
Assets/Resources/Entities/EnemyShooter2.png


+ 134 - 0
Assets/Resources/Entities/EnemyShooter2.png.meta

@@ -0,0 +1,134 @@
+fileFormatVersion: 2
+guid: d01333111542a7d46b4b9fdda35a586a
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 11
+  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
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMasterTextureLimit: 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: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 7
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 128
+  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
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    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: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 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
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: WebGL
+    maxTextureSize: 2048
+    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: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1 - 1
Assets/Resources/Entities/EntityBase.cs

@@ -36,7 +36,7 @@ public abstract class EntityBase : MonoBehaviour {
         if (isLand) jumpWolf = jumpWolfTime;
         if (jumpBuffer > 0 && jumpWolf > 0 && jumping < 0) {
             // ²¥·ÅÒôЧ
-            AudioM.Play("jump");
+            AudioM.Play("jump", 0.6f);
 
             speedY = jumpForce;
             jumpBuffer = 0;

+ 3 - 3
Assets/Resources/Entities/Player.cs

@@ -44,7 +44,7 @@ public class Player : EntityBase {
         if (resistanceTime <= 0.001f) {
             resistanceTime = resistanceOnHurt;
             hp--;
-            AudioM.Play("hurt");
+            AudioM.Play("hurt", 0.6f);
             rb.velocity = Vector2.zero;
             DOTween.Kill("ScreenShake");
             Camera.current.DOShakePosition(0.4f, 0.5f, 25).SetId("ScreenShake");
@@ -86,7 +86,7 @@ public class Player : EntityBase {
         }
         // 装填
         if (InputM.GetKeyEvent(InputM.KeyType.Reload) && currentBullet < maxBullet && currentReloadDelay <= 0f) {
-            AudioM.Play("reload");
+            AudioM.Play("reload", 0.8f);
             currentReloadDelay = reloadDelay;
         } else if (currentReloadDelay > 0 && currentReloadDelay < Time.deltaTime) {
             currentReloadDelay = 0f; currentBullet = maxBullet;
@@ -95,7 +95,7 @@ public class Player : EntityBase {
         }
         // 开火
         if (InputM.GetKeyEvent(InputM.KeyType.Fire) && currentBullet > 0 && currentShootDelay <= 0f && currentReloadDelay <= 0f) {
-            AudioM.Play("fire");
+            AudioM.Play("fire", 0.25f);
             currentBullet--; currentShootDelay = shootDelay;
             Vector2 fromPos = transform.position + Vector3.up * 0.55f;
             Vector2 toPos = AspectUtility.cam.ScreenToWorldPoint(Input.mousePosition);

+ 20 - 20
Assets/Resources/System/StoryM.cs

@@ -159,57 +159,57 @@ public class StoryM : MonoBehaviour {
     IEnumerator Stage1() {
         arrowMax = 0; noDifficulty = false;
         yield return new WaitForSeconds(3f);
-        yield return StartCoroutine(WaitForStoryText("哦,哦!你好,欢迎欢迎", ""));
-        yield return StartCoroutine(WaitForStoryText("先来过个教程啥的吧", ""));
-        yield return StartCoroutine(WaitForStoryText("游戏的按键操作写在了右上角,应该是个人都看得懂", ""));
-        SetStoryText("你不如先拿它们俩试试按键吧!", "");
+        yield return StartCoroutine(WaitForStoryText("哦,哦!你好,欢迎欢迎", "Oh, oh! Hello there!"));
+        yield return StartCoroutine(WaitForStoryText("先来过个教程啥的吧", "Let's go through a quick tutrial before we start."));
+        yield return StartCoroutine(WaitForStoryText("游戏的按键操作写在了右上角,应该是个人都看得懂", "All control buttons are shown on the top-right corner. I bet nobody can't understand that."));
+        SetStoryText("你不如先拿它们俩试试按键吧!", "Now, let's try some buttons with these two cute guys!");
         Spawn(Spawner.EnemyType.Mover, 2);
-        yield return StartCoroutine(WaitUntilClear(0, 10f, "快点把它干掉,然后才好继续……", ""));
+        yield return StartCoroutine(WaitUntilClear(0, 10f, "快点把它干掉,然后才好继续……", "You have to defeat them to continue..."));
         stageCompleted = true;
     }
     IEnumerator Stage2() {
         arrowMax = 1; noDifficulty = false;
         Spawn(Spawner.EnemyType.Mover, 2);
-        yield return StartCoroutine(WaitForStoryText("哦,教程最后一条……", ""));
+        yield return StartCoroutine(WaitForStoryText("哦,教程最后一条……", "Oh, a final reminder before I leave..."));
         Spawn(Spawner.EnemyType.Mover, 2);
-        yield return StartCoroutine(WaitForStoryText("弹药不够的时候记得换弹", ""));
+        yield return StartCoroutine(WaitForStoryText("弹药不够的时候记得换弹!", "Don't forget to reload the weapon before you run out of ammo!"));
         Spawn(Spawner.EnemyType.Shooter, 1);
-        SetStoryText("加油,教程结束了!", "");
-        yield return StartCoroutine(WaitUntilClear(1, 10f, "仔细一看,这个角色的手上连枪都没有……", ""));
+        SetStoryText("加油,教程结束了!", "There you go, that's end of the tutrial!");
+        yield return StartCoroutine(WaitUntilClear(1, 10f, "仔细一看,这个角色的手上连枪都没有……", "Hmm... He does not even have a gun in his hand after a closer look."));
         if (Player.hp < 3) {
             Player.hp = 3;
             Spawn(Spawner.EnemyType.Mover, 1);
-            yield return StartCoroutine(WaitForStoryText("对了,教程结束得先给你回个血……", ""));
+            yield return StartCoroutine(WaitForStoryText("对了,教程结束得先给你回个血……", "Whoops, I almost forgot to heal you after the tutrial."));
         }
         stageCompleted = true;
     }
     IEnumerator Stage3() {
         arrowMax = 3; noDifficulty = false;
         Spawn(Spawner.EnemyType.Mover, 1);
-        yield return StartCoroutine(WaitForStoryText("说实话啊,我觉得这个游戏有点无聊", ""));
+        yield return StartCoroutine(WaitForStoryText("说实话啊,我觉得这个游戏有点无聊", "To be honest, I think this game is kind of boring..."));
         Spawn(Spawner.EnemyType.Mover, 1);
-        yield return StartCoroutine(WaitForStoryText("我看了看,这游戏往后的新内容就只剩一种换皮怪了!", ""));
+        yield return StartCoroutine(WaitForStoryText("我看了看,这游戏往后的新内容就只剩一种换皮怪了!", "Let's see... We only have one more skin for our monsters!"));
         Spawn(Spawner.EnemyType.Mover, 1);
-        yield return StartCoroutine(WaitForStoryText("然后就是“在无限的怪物中生存下来吧!”的无尽模式……", ""));
+        yield return StartCoroutine(WaitForStoryText("然后就是“在无限的怪物中生存下来吧!”的无尽模式……", "And then, all we have is endless mode of \"Survive with infinite monsters!\"....."));
         Spawn(Spawner.EnemyType.Mover, 1);
-        yield return StartCoroutine(WaitForStoryText("没有升级,没有装备,没有峰回路转的牛逼剧情", ""));
+        yield return StartCoroutine(WaitForStoryText("没有升级,没有装备,没有峰回路转的牛逼剧情", "No upgrade, no equipments, no twist to the plot or any boss to fight."));
         Spawn(Spawner.EnemyType.Shooter, 1);
-        yield return StartCoroutine(WaitForStoryText("并且最重要的是,“丢骰子”的主题呢?", ""));
-        yield return StartCoroutine(WaitForStoryText("骰子、骰子……哪儿有骰子……?", ""));
+        yield return StartCoroutine(WaitForStoryText("并且最重要的是,“丢骰子”的主题呢?", "And most importantly, where's our \"Roll of the Dice\" theme?"));
+        yield return StartCoroutine(WaitForStoryText("骰子、骰子……哪儿有骰子……?", "Dice... Dice... Where is the dice...?"));
         SetStoryText("这里一个骰子都没有!", "");
         arrowMax = 0;
         Spawn(Spawner.EnemyType.Mover, 1);
-        yield return StartCoroutine(WaitUntilClear(0, 6f, "切题呢?作者到底咋想的?", ""));
+        yield return StartCoroutine(WaitUntilClear(0, 6f, "切题呢?作者到底咋想的?", "What's the point? What's wrong with this author?"));
         noDifficulty = true;
-        yield return StartCoroutine(WaitForStoryText("要不然这样,我们随便拿个东西,把它弄成骰子算了", ""));
+        yield return StartCoroutine(WaitForStoryText("要不然这样,我们随便拿个东西,把它弄成骰子算了", "Hold on... How about we grab something and make it a dice?"));
         yield return new WaitForSeconds(2f);
         InputM.DropDice(InputM.KeyType.Fire);
-        SetStoryText("嘿,成了!", "");
+        SetStoryText("嘿,成了!", "Let's go!");
         stageCompleted = true;
     }
     IEnumerator Stage4() {
         arrowMax = 0; noDifficulty = true;
-        yield return StartCoroutine(WaitUntilPickDice(8f, "看到右边掉下来的东西了么?把它捡起来摇一摇!", ""));
+        yield return StartCoroutine(WaitUntilPickDice(8f, "看到右边掉下来的东西了么?把它捡起来摇一摇!", "You see the falling stuff on the right? Pick it up and try shaking it!"));
         stageCompleted = true;
     }
     IEnumerator Stage5() {