lvjincheng 4 роки тому
батько
коміт
1022dd5b73

+ 298 - 5
Assets/ArtAsset/Hunter/Models/Yeji/Yeji.controller

@@ -33,6 +33,15 @@ AnimatorStateMachine:
   - serializedVersion: 1
     m_State: {fileID: -7251307044565088861}
     m_Position: {x: -90, y: -90, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: 8651880469539455170}
+    m_Position: {x: 410, y: -140, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: 5589904307033020869}
+    m_Position: {x: 600, y: -50, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: 1964374760564982007}
+    m_Position: {x: 340, y: -40, z: 0}
   m_ChildStateMachines: []
   m_AnyStateTransitions:
   - {fileID: -5445394349210823807}
@@ -45,6 +54,31 @@ AnimatorStateMachine:
   m_ExitPosition: {x: 800, y: 120, z: 0}
   m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
   m_DefaultState: {fileID: -4937633972306135622}
+--- !u!1101 &-7931541772763294614
+AnimatorStateTransition:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: 
+  m_Conditions:
+  - m_ConditionMode: 2
+    m_ConditionEvent: flyStaying
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 5589904307033020869}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.75
+  m_HasExitTime: 0
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
 --- !u!1102 &-7251307044565088861
 AnimatorState:
   serializedVersion: 6
@@ -71,6 +105,55 @@ AnimatorState:
   m_MirrorParameter: 
   m_CycleOffsetParameter: 
   m_TimeParameter: 
+--- !u!1102 &-5847919161904139752
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: IdleOnGround2 0
+  m_Speed: 0.3
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: -5126523308831177300}
+  m_StateMachineBehaviours: []
+  m_Position: {x: 50, y: 50, z: 0}
+  m_IKOnFeet: 0
+  m_WriteDefaultValues: 1
+  m_Mirror: 0
+  m_SpeedParameterActive: 0
+  m_MirrorParameterActive: 0
+  m_CycleOffsetParameterActive: 0
+  m_TimeParameterActive: 0
+  m_Motion: {fileID: -453082715539755137, guid: 93970f0540b5a0541897b3f8253023b8, type: 3}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1101 &-5672749164490311276
+AnimatorStateTransition:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: 
+  m_Conditions: []
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: -4937633972306135622}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.7000002
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
 --- !u!1101 &-5445394349210823807
 AnimatorStateTransition:
   m_ObjectHideFlags: 1
@@ -99,6 +182,31 @@ AnimatorStateTransition:
   m_InterruptionSource: 0
   m_OrderedInterruption: 1
   m_CanTransitionToSelf: 0
+--- !u!1101 &-5126523308831177300
+AnimatorStateTransition:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: 
+  m_Conditions:
+  - m_ConditionMode: 2
+    m_ConditionEvent: flyStaying
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: -4937633972306135622}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.75
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
 --- !u!1102 &-4937633972306135622
 AnimatorState:
   serializedVersion: 6
@@ -111,6 +219,7 @@ AnimatorState:
   m_CycleOffset: 0
   m_Transitions:
   - {fileID: 7718128433457918227}
+  - {fileID: 6887376923988608319}
   m_StateMachineBehaviours: []
   m_Position: {x: 50, y: 50, z: 0}
   m_IKOnFeet: 0
@@ -276,31 +385,37 @@ AnimatorController:
     m_DefaultFloat: 0
     m_DefaultInt: 0
     m_DefaultBool: 0
-    m_Controller: {fileID: 9100000}
+    m_Controller: {fileID: 0}
   - m_Name: down
     m_Type: 4
     m_DefaultFloat: 0
     m_DefaultInt: 0
     m_DefaultBool: 0
-    m_Controller: {fileID: 9100000}
+    m_Controller: {fileID: 0}
   - m_Name: landing
     m_Type: 4
     m_DefaultFloat: 0
     m_DefaultInt: 0
     m_DefaultBool: 0
-    m_Controller: {fileID: 9100000}
+    m_Controller: {fileID: 0}
   - m_Name: up
     m_Type: 4
     m_DefaultFloat: 0
     m_DefaultInt: 0
     m_DefaultBool: 0
-    m_Controller: {fileID: 9100000}
+    m_Controller: {fileID: 0}
   - m_Name: flying
     m_Type: 4
     m_DefaultFloat: 0
     m_DefaultInt: 0
     m_DefaultBool: 0
-    m_Controller: {fileID: 9100000}
+    m_Controller: {fileID: 0}
+  - m_Name: flyStaying
+    m_Type: 4
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 0}
   m_AnimatorLayers:
   - serializedVersion: 5
     m_Name: Base Layer
@@ -340,6 +455,55 @@ AnimatorState:
   m_MirrorParameter: 
   m_CycleOffsetParameter: 
   m_TimeParameter: 
+--- !u!1102 &1964374760564982007
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Yeji Land On Tree
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: 3269562767342449267}
+  m_StateMachineBehaviours: []
+  m_Position: {x: 50, y: 50, z: 0}
+  m_IKOnFeet: 0
+  m_WriteDefaultValues: 1
+  m_Mirror: 0
+  m_SpeedParameterActive: 0
+  m_MirrorParameterActive: 0
+  m_CycleOffsetParameterActive: 0
+  m_TimeParameterActive: 0
+  m_Motion: {fileID: -6952274186087936283, guid: 93970f0540b5a0541897b3f8253023b8, type: 3}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1101 &3269562767342449267
+AnimatorStateTransition:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: 
+  m_Conditions: []
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 8651880469539455170}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.875
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
 --- !u!1101 &3423863513589064057
 AnimatorStateTransition:
   m_ObjectHideFlags: 1
@@ -443,6 +607,33 @@ AnimatorStateTransition:
   m_InterruptionSource: 0
   m_OrderedInterruption: 1
   m_CanTransitionToSelf: 1
+--- !u!1102 &5589904307033020869
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Yeji Fly Form Tree
+  m_Speed: 2
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: -5672749164490311276}
+  m_StateMachineBehaviours: []
+  m_Position: {x: 50, y: 50, z: 0}
+  m_IKOnFeet: 0
+  m_WriteDefaultValues: 1
+  m_Mirror: 0
+  m_SpeedParameterActive: 0
+  m_MirrorParameterActive: 0
+  m_CycleOffsetParameterActive: 0
+  m_TimeParameterActive: 0
+  m_Motion: {fileID: 5955219104499826685, guid: 93970f0540b5a0541897b3f8253023b8, type: 3}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
 --- !u!1102 &5686301840197236353
 AnimatorState:
   serializedVersion: 6
@@ -469,6 +660,81 @@ AnimatorState:
   m_MirrorParameter: 
   m_CycleOffsetParameter: 
   m_TimeParameter: 
+--- !u!1101 &6887376923988608319
+AnimatorStateTransition:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: 
+  m_Conditions:
+  - m_ConditionMode: 1
+    m_ConditionEvent: flyStaying
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 1964374760564982007}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.75
+  m_HasExitTime: 0
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &7351435933305604281
+AnimatorStateTransition:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: 
+  m_Conditions:
+  - m_ConditionMode: 1
+    m_ConditionEvent: flyStaying
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: -5847919161904139752}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.75
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &7533547435871618870
+AnimatorStateTransition:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: 
+  m_Conditions:
+  - m_ConditionMode: 1
+    m_ConditionEvent: flyStaying
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 8651880469539455170}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.75
+  m_HasExitTime: 0
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
 --- !u!1101 &7718128433457918227
 AnimatorStateTransition:
   m_ObjectHideFlags: 1
@@ -497,6 +763,33 @@ AnimatorStateTransition:
   m_InterruptionSource: 0
   m_OrderedInterruption: 1
   m_CanTransitionToSelf: 1
+--- !u!1102 &8651880469539455170
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Yeji Idle On Tree 01
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: -7931541772763294614}
+  m_StateMachineBehaviours: []
+  m_Position: {x: 50, y: 50, z: 0}
+  m_IKOnFeet: 0
+  m_WriteDefaultValues: 1
+  m_Mirror: 0
+  m_SpeedParameterActive: 0
+  m_MirrorParameterActive: 0
+  m_CycleOffsetParameterActive: 0
+  m_TimeParameterActive: 0
+  m_Motion: {fileID: -4192463845340147661, guid: 93970f0540b5a0541897b3f8253023b8, type: 3}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
 --- !u!1102 &8828921775377928178
 AnimatorState:
   serializedVersion: 6

+ 10 - 1
Assets/ArtAsset/Hunter/Models/Yeji/Yeji.prefab

@@ -738,7 +738,7 @@ NavMeshAgent:
   m_Enabled: 1
   m_AgentTypeID: 0
   m_Radius: 0.28
-  m_Speed: 1.5
+  m_Speed: 0.75
   m_Acceleration: 100
   avoidancePriority: 50
   m_AngularSpeed: 720
@@ -762,6 +762,15 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 5cc1798b39151d04aabb10b592d3c469, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  state:
+    standing: 0
+    flyStaying: 0
+    _dead: 0
+    _down: 0
+    _landing: 0
+    _up: 0
+    _flying: 0
+    animal: {fileID: 0}
 --- !u!95 &7737104438608917870
 Animator:
   serializedVersion: 3

BIN
Assets/BowArrow/Resources/Audios/Animal/rabbit_injured.mp3


+ 1 - 1
Assets/BowArrow/Resources/Audios/Animal/rabbit_injured.mp3.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 9dab175034a77ea458a8ff716b501927
+guid: 3ea18e6d5bd029b4caa2d7a5f78483a9
 AudioImporter:
   externalObjects: {}
   serializedVersion: 6

+ 38 - 13
Assets/BowArrow/Scenes/GameChallengeScene/Yeji.cs

@@ -43,6 +43,7 @@ public class Yeji : TargetAnimal
 
     void OnDestroy() {
         tryReleaseOccupyTree();
+        ReleasePreHeight(this);
     }
 
     void Update()
@@ -82,6 +83,7 @@ public class Yeji : TargetAnimal
             this.animator.speed = 1;
             state.dead = true;
             this.agent.enabled = false;
+            ReleasePreHeight(this);
             onDie?.Invoke(this);
             AudioMgr.ins.PlayAnimalEffect("bird_injured", AudioMgr.GetAudioSource(this.gameObject));
             if (currentHeight < 1.5f) {
@@ -205,6 +207,7 @@ public class Yeji : TargetAnimal
 
         TreeAreaRecorder.AreaInfo targetAreaInfo;
         bool needCheckFlyDown = false;
+        bool willStayOnTree = false;
         void UpdateBehavior() {
             if (state.flyStaying) {
                 canFlyStayTime -= Time.deltaTime;
@@ -226,15 +229,18 @@ public class Yeji : TargetAnimal
 
             if (state.flying && !state.down && !state.up) {
                 if (needCheckFlyDown) {
-                    float downNeedTime = flyPlaneHeight / downSpeed;
+                    float downNeedTime = currentHeight / downSpeed;
                     float keyDistance = this.agent.speed * downNeedTime; //触发下降的水平距离阈值
-                    if (Vector3.Distance(this.transform.position, this.agent.destination) < keyDistance) {
+                    Vector3 myP = this.transform.position;
+                    Vector3 desP = this.agent.destination;
+                    desP.y = myP.y;
+                    float distance = Vector3.Distance(myP, desP);
+                    if (distance < keyDistance) {
                         needCheckFlyDown = false;
-                        if (Random.value < 0.6 && tryOccupyTree()) {
+                        if (Random.value < 0.5 && tryOccupyTree()) {
                             state.down = true;
                         } else {
-                            state.flyStaying = true;
-                            canFlyStayTime = 4f + Random.value * 2f;
+                            willStayOnTree = true;
                         }
                     }
                 }
@@ -242,6 +248,13 @@ public class Yeji : TargetAnimal
             
             if (moving) return;
 
+            if (willStayOnTree) {
+                willStayOnTree = false;
+                state.flyStaying = true;
+                canFlyStayTime = 4f + Random.value * 2f;
+                return;
+            }
+
             //飞向别的树
             #region 
                 Vector3 myPos = this.transform.position; 
@@ -271,7 +284,6 @@ public class Yeji : TargetAnimal
             if (!state.standing) return;
             state.standing = false;
             state.up = true;
-            toFlyHeight = RandomOnePreHeight();
             animator.CrossFade("FlyFromGround", 0.1f);
             tryReleaseOccupyTree();
         }
@@ -297,30 +309,43 @@ public class Yeji : TargetAnimal
         }
 
         static float[] preFlyHeights;
-        static bool[] preFlyHeightCools;
+        static object[] preFlyHeightCools;
         public static void InitPreHeights() {
             preFlyHeights = new float[]{1.7f, 2.2f};
-            preFlyHeightCools = new bool[]{false, false};
+            preFlyHeightCools = new object[]{null, null};
         }
-        public static float RandomOnePreHeight() {
+        public static float RandomOnePreHeight(Yeji yeji) {
             List<int> indexes = new List<int>();
             for (int i = 0; i < preFlyHeightCools.Length; i++) {
-                if (!preFlyHeightCools[i]) {
+                if (preFlyHeightCools[i] == null) {
                     indexes.Add(i);
                 }
-                if (preFlyHeightCools[i]) preFlyHeightCools[i] = false;
             }
             int index = indexes[Random.Range(0, indexes.Count)];
-            preFlyHeightCools[index] = true;
+            preFlyHeightCools[index] = yeji;
             return preFlyHeights[index];
         }
+        public static void ReleasePreHeight(Yeji yeji) {
+            for (int i = 0; i < preFlyHeightCools.Length; i++) {
+                if (yeji.Equals(preFlyHeightCools[i])) {
+                    preFlyHeightCools[i] = null;
+                }
+            }
+        }
     #endregion
 
     //状态
     [System.Serializable]
     public class State {
         public bool standing = false;
-        public bool flyStaying = false;
+        [SerializeField] private bool _flyStaying = false;
+        public bool flyStaying {
+            get { return _flyStaying; }
+            set {
+                _flyStaying = value;
+                animal.animator.SetBool("flyStaying", value);
+            }
+        }
         [SerializeField] private bool _dead;
         public bool dead {
             get { return _dead; }

+ 1 - 1
Assets/BowArrow/Scenes/GameChallengeScene/YejiHuntGameMode.cs

@@ -63,7 +63,6 @@ public class YejiHuntGameMode : ChallengeGameMode
             } else {
                 createNearTreeIndex = 3;
             } 
-            float baseFlyHeight = Yeji.RandomOnePreHeight();
             TreeAreaRecorder.AreaInfo areaInfo = treeAreaRecorder.getValidAreaInfo(createNearTreeIndex);
             Vector3 newPos = CalculateNewPosByTreePos(animalsBaseT, flyPlaneHeight, areaInfo);
         #endregion
@@ -74,6 +73,7 @@ public class YejiHuntGameMode : ChallengeGameMode
         Yeji yeji = animalObject.GetComponent<Yeji>();
         yeji.treeAreaRecorder = treeAreaRecorder;
         yeji.flyPlaneHeight = flyPlaneHeight;
+        float baseFlyHeight = Yeji.RandomOnePreHeight(yeji);
         yeji.SetFlyHeight(baseFlyHeight);
         yeji.RotateByWorldY(Random.value * 360);
         yeji.onDie += delegate(Yeji yeji) {

+ 1 - 1
Assets/BowArrow/Scripts/Manager/GameMgr.cs

@@ -8,7 +8,7 @@ using UnityEngine.SceneManagement;
 public class GameMgr : MonoBehaviour
 {
     public static bool debugInEditor = false;
-    public static int gameType = 5;
+    public static int gameType = 4;
     public GameMode gameMode;
     [System.NonSerialized] public bool gameOver = false;
     public static GameMgr ins;