소스 검색

狼关卡

lvjincheng 4 년 전
부모
커밋
7f7c281dfe

+ 11 - 3
Assets/ArtAsset/Hunter/Models/Wolf/Wolf.cs

@@ -175,8 +175,15 @@ public class Wolf : TargetAnimal
     void Attack() {
         state.ResetActionState();
         state.attacking = true;
-        if (Random.value < 0.5) state.attackA = true;
-        else state.attackB = true;
+        curAnimIndex = -1; /*注意:这样可避免狼两次使用同一攻击动作而第二次无法播放的情况 */
+        int hurtValue = 2;
+        if (Random.value < 0.5) {
+            state.attackA = true;
+        } else {
+            state.attackB = true;
+            hurtValue = 3;
+        }
+        onAttack?.Invoke(this, hurtValue);
     }
     //跑到能攻击玩家的坐标点
     void RunToAttackHunter() {
@@ -230,7 +237,7 @@ public class Wolf : TargetAnimal
             hunterPos.y = myPos.y;
             Vector3 hunterToMe = myPos - hunterPos;
             float angle = Vector3.Angle(hunterToMe, standardPos);
-            float minDistance = 5;
+            float minDistance = 8;
             //如果下一个构建的坐标在猎手身后或者距离猎手低于指定距离
             if (angle > 90 || Vector3.Distance(hunterPos, myPos) < minDistance) {
                 Vector3 hunterToMe2 = lastMyPos - hunterPos;
@@ -357,4 +364,5 @@ public class Wolf : TargetAnimal
 
     //委托
     public System.Action<Wolf> onDie;
+    public System.Action<Wolf, int> onAttack;
 }

BIN
Assets/BowArrow/Resources/Audios/Animal/man_injured.wav


+ 22 - 0
Assets/BowArrow/Resources/Audios/Animal/man_injured.wav.meta

@@ -0,0 +1,22 @@
+fileFormatVersion: 2
+guid: b9b2683cc62cc814784eb58f53398f07
+AudioImporter:
+  externalObjects: {}
+  serializedVersion: 6
+  defaultSettings:
+    loadType: 0
+    sampleRateSetting: 0
+    sampleRateOverride: 44100
+    compressionFormat: 1
+    quality: 1
+    conversionMode: 0
+  platformSettingOverrides: {}
+  forceToMono: 0
+  normalize: 1
+  preloadAudioData: 1
+  loadInBackground: 0
+  ambisonic: 0
+  3D: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1 - 1
Assets/BowArrow/Scenes/GameChallenge/ChallengeGameMode.cs

@@ -68,7 +68,7 @@ public abstract class ChallengeGameMode : GameMode
     }
 
     //宣布游戏结束
-    void AnnounceGameOver() {
+    protected void AnnounceGameOver() {
         gameMgr.StopGame();
         //添加结算界面
         this.gameMgr.transform.Find("HunterGameSettleView").gameObject.SetActive(true);

+ 256 - 5
Assets/BowArrow/Scenes/GameChallenge/GameChallenge.unity

@@ -901,6 +901,81 @@ Transform:
   m_Father: {fileID: 0}
   m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &50161090
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 50161091}
+  - component: {fileID: 50161093}
+  - component: {fileID: 50161092}
+  m_Layer: 5
+  m_Name: Bar
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &50161091
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 50161090}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1559922482}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0.5}
+  m_AnchorMax: {x: 0, y: 0.5}
+  m_AnchoredPosition: {x: 3, y: 0}
+  m_SizeDelta: {x: 300, y: 30}
+  m_Pivot: {x: 0, y: 0.5}
+--- !u!114 &50161092
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 50161090}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 0
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 21300000, guid: 18b76a89bc3fe3d45883a5fcc5d521d1, type: 3}
+  m_Type: 3
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 0
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!222 &50161093
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 50161090}
+  m_CullTransparentMesh: 1
 --- !u!1 &54402347
 GameObject:
   m_ObjectHideFlags: 0
@@ -7446,6 +7521,85 @@ CanvasRenderer:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 388933959}
   m_CullTransparentMesh: 1
+--- !u!1 &389862628
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 389862629}
+  - component: {fileID: 389862631}
+  - component: {fileID: 389862630}
+  m_Layer: 5
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &389862629
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 389862628}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1559922482}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 300, y: 36}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &389862630
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 389862628}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 0
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 12800000, guid: 1ad2cf6c2f09744489d8c60b3fe3bab2, type: 3}
+    m_FontSize: 25
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 0
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: 20/20
+--- !u!222 &389862631
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 389862628}
+  m_CullTransparentMesh: 1
 --- !u!1 &392428879
 GameObject:
   m_ObjectHideFlags: 0
@@ -16420,6 +16574,7 @@ GameObject:
   - component: {fileID: 954346088}
   - component: {fileID: 954346087}
   - component: {fileID: 954346086}
+  - component: {fileID: 954346090}
   m_Layer: 0
   m_Name: Main Camera
   m_TagString: MainCamera
@@ -16515,6 +16670,21 @@ Camera:
   m_OcclusionCulling: 1
   m_StereoConvergence: 10
   m_StereoSeparation: 0.022
+--- !u!114 &954346090
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 954346084}
+  m_Enabled: 0
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 34382083ad114a07d000fbfb8d76c639, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  iterations: 3
+  blurSpread: 0.6
+  blurShader: {fileID: 4800000, guid: 57e6deea7c2924e22a5138e2b70bb4dc, type: 3}
 --- !u!1001 &964175112
 PrefabInstance:
   m_ObjectHideFlags: 0
@@ -17382,7 +17552,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 28.846626, y: 0}
+  m_AnchoredPosition: {x: 24.65649, y: 0}
   m_SizeDelta: {x: 0, y: 33}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1047161075
@@ -20538,7 +20708,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 28.846626, y: 0}
+  m_AnchoredPosition: {x: 24.65649, y: 0}
   m_SizeDelta: {x: 0, y: 33}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1203594963
@@ -25683,7 +25853,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!224 &1541152743
 RectTransform:
   m_ObjectHideFlags: 0
@@ -25698,6 +25868,7 @@ RectTransform:
   - {fileID: 1867232677}
   - {fileID: 2101646946}
   - {fileID: 200026495}
+  - {fileID: 1559922482}
   m_Father: {fileID: 279869869}
   m_RootOrder: 9
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -25718,6 +25889,9 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: ba1b283f27688604fa8d16515e2dc72d, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  hpUI: {fileID: 1559922481}
+  hpBar: {fileID: 50161092}
+  hpText: {fileID: 389862630}
 --- !u!114 &1541152745
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -25967,6 +26141,83 @@ PrefabInstance:
       objectReference: {fileID: 0}
     m_RemovedComponents: []
   m_SourcePrefab: {fileID: 100100000, guid: f9eb373fc29a0a24d8d51d6a8dd90e83, type: 3}
+--- !u!1 &1559922481
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1559922482}
+  - component: {fileID: 1559922484}
+  - component: {fileID: 1559922483}
+  m_Layer: 5
+  m_Name: Hp
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1559922482
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1559922481}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 50161091}
+  - {fileID: 389862629}
+  m_Father: {fileID: 1541152743}
+  m_RootOrder: 3
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0}
+  m_AnchorMax: {x: 0.5, y: 0}
+  m_AnchoredPosition: {x: 0, y: 20}
+  m_SizeDelta: {x: 306, y: 36}
+  m_Pivot: {x: 0.5, y: 0}
+--- !u!114 &1559922483
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1559922481}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.3207547, g: 0.3207547, b: 0.3207547, a: 1}
+  m_RaycastTarget: 0
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 21300000, guid: 18b76a89bc3fe3d45883a5fcc5d521d1, type: 3}
+  m_Type: 3
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 0
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1559922484
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1559922481}
+  m_CullTransparentMesh: 1
 --- !u!4 &1561499620 stripped
 Transform:
   m_CorrespondingSourceObject: {fileID: 436088, guid: 2bd10b6e127d0224ab8f0a5c85be8247, type: 3}
@@ -34147,7 +34398,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!224 &2061010500
 RectTransform:
   m_ObjectHideFlags: 0
@@ -35889,7 +36140,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 47.693253, y: 0}
+  m_AnchoredPosition: {x: 39.31298, y: 0}
   m_SizeDelta: {x: 0, y: 33}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &2142579590

+ 24 - 2
Assets/BowArrow/Scenes/GameChallenge/HunterGameView.cs

@@ -9,6 +9,7 @@ public class HunterGameView : MonoBehaviour
     Text t2;
     Text t3;
     ChallengeGameMode gameMode;
+    WolfHuntGameMode gameMode1;
 
     void Start()
     {
@@ -16,13 +17,25 @@ public class HunterGameView : MonoBehaviour
         t2 = this.transform.Find("T2").GetComponent<Text>();
         t3 = this.transform.Find("T3").GetComponent<Text>();
         gameMode = (ChallengeGameMode) GameMgr.ins.gameMode;
+        if (GameMgr.gameType == 5) {
+            gameMode1 = (WolfHuntGameMode) gameMode;
+            t2.gameObject.SetActive(false);
+            t3.gameObject.SetActive(false);
+        } else {
+            hpUI.SetActive(false);
+        }
     }
     
     void FixedUpdate()
     {
         RenderAnimalCount();
-        RenderArrowCount();
-        RenderTime();
+        if (GameMgr.gameType == 5) {
+            RenderHP();
+        } else {
+            RenderArrowCount();
+            RenderTime();
+        }
+        
         if (GameMgr.ins.gameOver) {
             Destroy(this.gameObject);
         }
@@ -65,4 +78,13 @@ public class HunterGameView : MonoBehaviour
         str += s;
         return str;
     }
+
+    [SerializeField] GameObject hpUI;
+    [SerializeField] Image hpBar;
+    [SerializeField] Text hpText;
+
+    void RenderHP() {
+        hpBar.fillAmount = Mathf.Lerp(hpBar.fillAmount, (float) gameMode1.hp / gameMode1.hpMax, Time.deltaTime * 6);
+        hpText.text = $"{gameMode1.hp}/{gameMode1.hpMax}";
+    }
 }

+ 56 - 1
Assets/BowArrow/Scenes/GameChallenge/WolfHuntGameMode.cs

@@ -1,6 +1,8 @@
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
+using UnityStandardAssets.ImageEffects;
+using DG.Tweening;
 
 public class WolfHuntGameMode : ChallengeGameMode
 {
@@ -40,7 +42,7 @@ public class WolfHuntGameMode : ChallengeGameMode
     }
 
     float baseCreateDistance = 25;
-    float plusCreateDistance = -2;
+    float plusCreateDistance = 0;
 
     void CreateAnimal() {
         if (animalCreateIndex >= animalCreateList.Length) return;
@@ -67,6 +69,7 @@ public class WolfHuntGameMode : ChallengeGameMode
             animalCount--;
             animalSet.Remove(wf);
         };
+        wolf.onAttack += OnAttacked;
         animalSet.Add(wolf);
     }
 
@@ -79,4 +82,56 @@ public class WolfHuntGameMode : ChallengeGameMode
             CreateAnimal();
         }
     }
+
+    public int hp = 20;
+    public int hpMax = 20;
+    public void OnAttacked(Wolf wolf, int hurtValue) {
+        if (hp <= 0) return;
+        AudioMgr.ins.PlayAnimalEffect("man_injured", AudioMgr.GetAudioSource(this.gameMgr.gameObject));
+        Vector3 p1 = wolf.transform.position;
+        Vector3 p2 = hunterT.position;
+        p1.y = p2.y = 0;
+        float distance = Vector3.Distance(p1, p2);
+        if (distance > 3) return;
+        hp -= hurtValue;
+        DoTweenHurt();
+        if (hp <= 0) {
+            hp = 0;
+            Sequence cb = DOTween.Sequence();
+            cb.AppendInterval(1f);
+            cb.AppendCallback(AnnounceGameOver);
+        }
+    }
+
+    Sequence hurtSeq = null;
+    float iterations;
+    public void DoTweenHurt() {
+        iterations = 0;
+        Blur blur = BowCamera.ins.transform.GetComponent<Blur>();
+        blur.iterations = 0;
+        blur.enabled = true;
+        if (hurtSeq != null) {
+            if (hurtSeq.IsActive()) {
+                hurtSeq.Complete();
+            }
+            hurtSeq = null;
+        }
+        hurtSeq = DOTween.Sequence();
+        Tween toMax = DOTween.To(() => iterations, value => {
+            iterations = value;
+            blur.iterations = Mathf.CeilToInt(iterations);
+        }, 3f, 0.6f);
+        hurtSeq.Append(toMax);
+        Tween toMin = DOTween.To(() => iterations, value => {
+            iterations = value;
+            blur.iterations = Mathf.CeilToInt(iterations);
+        }, 0f, 0.6f);
+        hurtSeq.Append(toMin);
+        hurtSeq.AppendCallback(delegate() {
+            iterations = 0;
+            blur.iterations = 0;
+            blur.enabled = false;
+        });
+        hurtSeq.SetUpdate(true);
+    }
 }