Browse Source

5/12更新

2025/5/12 修正bug #42 / 43
Jees 3 weeks ago
parent
commit
b9a3559648

+ 186 - 12
Assets/Resources/Dog/AnimatorController/shibaInu/HomeDogAnimatorController.controller

@@ -102,7 +102,7 @@ AnimatorStateTransition:
   m_Mute: 0
   m_IsExit: 0
   serializedVersion: 3
-  m_TransitionDuration: 0.4328579
+  m_TransitionDuration: 0.2
   m_TransitionOffset: 0
   m_ExitTime: 0
   m_HasExitTime: 1
@@ -226,6 +226,31 @@ AnimatorTransition:
   m_Mute: 0
   m_IsExit: 0
   serializedVersion: 1
+--- !u!1101 &-7172952035479896344
+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: isTurningRight
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 533779715773965248}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.14395118
+  m_TransitionOffset: 0.02549873
+  m_ExitTime: 0.028763173
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
 --- !u!1102 &-6737050940412621386
 AnimatorState:
   serializedVersion: 6
@@ -326,7 +351,7 @@ AnimatorState:
   m_MirrorParameterActive: 0
   m_CycleOffsetParameterActive: 0
   m_TimeParameterActive: 0
-  m_Motion: {fileID: 9073389063855601453, guid: 0faf4e66268a11e4d982d9a0163734ca, type: 3}
+  m_Motion: {fileID: -3339085233561973423, guid: 0faf4e66268a11e4d982d9a0163734ca, type: 3}
   m_Tag: 
   m_SpeedParameter: 
   m_MirrorParameter: 
@@ -473,9 +498,9 @@ AnimatorStateTransition:
   m_Mute: 0
   m_IsExit: 0
   serializedVersion: 3
-  m_TransitionDuration: 0.25
+  m_TransitionDuration: 0.2499998
   m_TransitionOffset: 0
-  m_ExitTime: 0.75
+  m_ExitTime: 0
   m_HasExitTime: 1
   m_HasFixedDuration: 1
   m_InterruptionSource: 0
@@ -564,6 +589,12 @@ AnimatorStateMachine:
   - serializedVersion: 1
     m_State: {fileID: -8077790902788435736}
     m_Position: {x: -260, y: 290, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: -2934287470583496230}
+    m_Position: {x: 450, y: 520, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: 7237981366999321087}
+    m_Position: {x: 670, y: 480, z: 0}
   m_ChildStateMachines:
   - serializedVersion: 1
     m_StateMachine: {fileID: 7491400470228967381}
@@ -585,6 +616,8 @@ AnimatorStateMachine:
   - {fileID: 8198791292405850543}
   - {fileID: 7630157628395322959}
   - {fileID: 1643203011478807840}
+  - {fileID: 4173284850924337112}
+  - {fileID: -2210863287155378127}
   m_EntryTransitions: []
   m_StateMachineTransitions: {}
   m_StateMachineBehaviours: []
@@ -610,9 +643,9 @@ AnimatorStateTransition:
   m_Mute: 0
   m_IsExit: 0
   serializedVersion: 3
-  m_TransitionDuration: 1.9558662
+  m_TransitionDuration: 0.5
   m_TransitionOffset: 0
-  m_ExitTime: 0.0000000012739961
+  m_ExitTime: 0
   m_HasExitTime: 1
   m_HasFixedDuration: 1
   m_InterruptionSource: 0
@@ -645,6 +678,33 @@ AnimatorState:
   m_MirrorParameter: 
   m_CycleOffsetParameter: 
   m_TimeParameter: 
+--- !u!1102 &-2934287470583496230
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: turn Left
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: 6867238411472186812}
+  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: 4250284092877955231, guid: 0faf4e66268a11e4d982d9a0163734ca, type: 3}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
 --- !u!1102 &-2599437465997879747
 AnimatorState:
   serializedVersion: 6
@@ -689,7 +749,7 @@ AnimatorStateTransition:
   m_Mute: 0
   m_IsExit: 0
   serializedVersion: 3
-  m_TransitionDuration: 0.30236942
+  m_TransitionDuration: 0.2
   m_TransitionOffset: 0
   m_ExitTime: 0
   m_HasExitTime: 1
@@ -741,6 +801,31 @@ AnimatorStateTransition:
   m_InterruptionSource: 0
   m_OrderedInterruption: 1
   m_CanTransitionToSelf: 1
+--- !u!1101 &-2210863287155378127
+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: turnRight
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 7237981366999321087}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.049862567
+  m_TransitionOffset: 0
+  m_ExitTime: 8.708901e-10
+  m_HasExitTime: 0
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
 --- !u!1101 &-1663379763429632073
 AnimatorStateTransition:
   m_ObjectHideFlags: 1
@@ -1031,6 +1116,18 @@ AnimatorController:
     m_DefaultInt: 0
     m_DefaultBool: 0
     m_Controller: {fileID: 9100000}
+  - m_Name: isTurningLfeft
+    m_Type: 4
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  - m_Name: isTurningRight
+    m_Type: 4
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
   m_AnimatorLayers:
   - serializedVersion: 5
     m_Name: Base Layer
@@ -1117,9 +1214,9 @@ AnimatorStateTransition:
   m_Mute: 0
   m_IsExit: 0
   serializedVersion: 3
-  m_TransitionDuration: 0.9356814
+  m_TransitionDuration: 0.2
   m_TransitionOffset: 0
-  m_ExitTime: 6.339836e-10
+  m_ExitTime: 0
   m_HasExitTime: 1
   m_HasFixedDuration: 1
   m_InterruptionSource: 0
@@ -1371,7 +1468,7 @@ AnimatorState:
   m_MirrorParameterActive: 0
   m_CycleOffsetParameterActive: 0
   m_TimeParameterActive: 0
-  m_Motion: {fileID: 3858329934085553762, guid: 1a349bfe663f8a848a567303e35c613a, type: 3}
+  m_Motion: {fileID: -3339085233561973423, guid: 0faf4e66268a11e4d982d9a0163734ca, type: 3}
   m_Tag: 
   m_SpeedParameter: 
   m_MirrorParameter: 
@@ -1427,6 +1524,31 @@ AnimatorStateTransition:
   m_InterruptionSource: 0
   m_OrderedInterruption: 1
   m_CanTransitionToSelf: 1
+--- !u!1101 &4173284850924337112
+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: turnLeft
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: -2934287470583496230}
+  m_Solo: 1
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.030618595
+  m_TransitionOffset: 0.023092771
+  m_ExitTime: 0.0017944714
+  m_HasExitTime: 0
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
 --- !u!1101 &4325085346659453994
 AnimatorStateTransition:
   m_ObjectHideFlags: 1
@@ -1761,6 +1883,31 @@ AnimatorState:
   m_MirrorParameter: 
   m_CycleOffsetParameter: 
   m_TimeParameter: 
+--- !u!1101 &6867238411472186812
+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: isTurningLfeft
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 533779715773965248}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.14099205
+  m_TransitionOffset: 0.01821343
+  m_ExitTime: 0.03422709
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
 --- !u!1107 &7110955301091900891
 AnimatorStateMachine:
   serializedVersion: 6
@@ -1814,6 +1961,33 @@ AnimatorStateTransition:
   m_InterruptionSource: 0
   m_OrderedInterruption: 1
   m_CanTransitionToSelf: 1
+--- !u!1102 &7237981366999321087
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: turn Right
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: -7172952035479896344}
+  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: -8082396602504348456, guid: 0faf4e66268a11e4d982d9a0163734ca, type: 3}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
 --- !u!1107 &7491400470228967381
 AnimatorStateMachine:
   serializedVersion: 6
@@ -1868,9 +2042,9 @@ AnimatorStateTransition:
   m_Mute: 0
   m_IsExit: 0
   serializedVersion: 3
-  m_TransitionDuration: 0.89340866
+  m_TransitionDuration: 0.6
   m_TransitionOffset: 0
-  m_ExitTime: 3.422275e-10
+  m_ExitTime: 0
   m_HasExitTime: 1
   m_HasFixedDuration: 1
   m_InterruptionSource: 0

+ 5 - 5
Assets/Scenes/Home.unity

@@ -354,7 +354,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 3082356105365184116, guid: 358eaf0dc05de8c4b925b8d7b41c3df9, type: 3}
       propertyPath: m_LocalPosition.x
-      value: 0
+      value: -1.79
       objectReference: {fileID: 0}
     - target: {fileID: 3082356105365184116, guid: 358eaf0dc05de8c4b925b8d7b41c3df9, type: 3}
       propertyPath: m_LocalPosition.y
@@ -362,11 +362,11 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 3082356105365184116, guid: 358eaf0dc05de8c4b925b8d7b41c3df9, type: 3}
       propertyPath: m_LocalPosition.z
-      value: -4
+      value: 5.43
       objectReference: {fileID: 0}
     - target: {fileID: 3082356105365184116, guid: 358eaf0dc05de8c4b925b8d7b41c3df9, type: 3}
       propertyPath: m_LocalRotation.w
-      value: 0
+      value: 0.31639415
       objectReference: {fileID: 0}
     - target: {fileID: 3082356105365184116, guid: 358eaf0dc05de8c4b925b8d7b41c3df9, type: 3}
       propertyPath: m_LocalRotation.x
@@ -374,7 +374,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 3082356105365184116, guid: 358eaf0dc05de8c4b925b8d7b41c3df9, type: 3}
       propertyPath: m_LocalRotation.y
-      value: 1
+      value: 0.9486279
       objectReference: {fileID: 0}
     - target: {fileID: 3082356105365184116, guid: 358eaf0dc05de8c4b925b8d7b41c3df9, type: 3}
       propertyPath: m_LocalRotation.z
@@ -386,7 +386,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 3082356105365184116, guid: 358eaf0dc05de8c4b925b8d7b41c3df9, type: 3}
       propertyPath: m_LocalEulerAnglesHint.y
-      value: 180
+      value: 143.11
       objectReference: {fileID: 0}
     - target: {fileID: 3082356105365184116, guid: 358eaf0dc05de8c4b925b8d7b41c3df9, type: 3}
       propertyPath: m_LocalEulerAnglesHint.z

+ 79 - 0
Assets/Scripts/Home/DogInScene.cs

@@ -95,6 +95,14 @@ public class DogInScene //: ScriptableObject
             }
         }
     }
+
+    bool IsPlayingAnimation(string stateName)
+    {
+        // 获取当前动画状态信息
+        AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0); // 参数 0 表示第一个动画层
+        // 检查当前状态是否是目标状态,并且是否正在播放
+        return stateInfo.IsName(stateName) && stateInfo.normalizedTime < 1.0f;
+    }
     #endregion
 
     #region interact交互函数段
@@ -110,6 +118,10 @@ public class DogInScene //: ScriptableObject
             PlayerPrefs.Save();
             GameTool.PauseGameTime();
             string msg = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "game_message", "first_touch_interactive", EnviromentSetting.languageCode });
+            if (msg.Contains("<<dog_name>>"))
+            {
+                msg = msg.Replace("<<dog_name>>", dogProperty.dog_name);
+            }
             MessageBoxController.ShowMessage(msg, () => GameTool.ResumeGameTime());
 
         }
@@ -325,6 +337,73 @@ public class DogInScene //: ScriptableObject
         this.dogState = DogState.LISTEN;
     }
 
+    public IEnumerator RotationToPlayer()
+    {
+        //计算自己方向和player之间连线的夹角
+        float rotationSpeed = 30f;
+        float stopAngle = 15f;      // 旋转最小角度,小于这个角度就不旋转
+        Vector3 virtualLookAtTarget = new Vector3(0, 0, -6);
+        Vector3 direction = virtualLookAtTarget - this.gameObject.transform.position;
+        float targetAngle = Vector3.SignedAngle(this.gameObject.transform.forward, direction, Vector3.up);      // 目标旋转角度
+        if (MathF.Abs(targetAngle) <= stopAngle)
+        {
+            // 旋转角度小于指定度就不旋转
+            Listen();
+            yield break;
+        }
+        else
+        {
+            if (targetAngle > 0)
+            {
+                // 逆时针旋转
+                this.animator.SetBool("isTurningLeft", true);
+                if (IsPlayingAnimation("turn Left") == false)
+                {
+                    this.animator.Play("turn Left");
+                }
+                this.gameObject.transform.Rotate(0, rotationSpeed * Time.deltaTime, 0);
+            }
+            else
+            {
+                // 顺时针旋转
+                this.animator.SetBool("isTurningRight", true);
+                if (IsPlayingAnimation("turn Right") == false)
+                {
+                    this.animator.Play("turn Right");
+                }
+                this.gameObject.transform.Rotate(0, -rotationSpeed * Time.deltaTime, 0);
+            }
+        }
+        while (true)
+        {
+            yield return new WaitForSeconds(0.1f);
+            // 再次计算夹角
+            direction = virtualLookAtTarget - this.gameObject.transform.position;
+            targetAngle = Vector3.SignedAngle(this.gameObject.transform.forward, direction, Vector3.up);      // 目标旋转角度
+            Debug.Log("target angle:" + targetAngle);
+            if (MathF.Abs(targetAngle) <= stopAngle)
+            {
+                this.animator.SetBool("isTurningLeft", false);
+                this.animator.SetBool("isTurningRight", false);
+                Listen();
+                yield break;
+            }
+            else
+            {
+                if (targetAngle > 0)
+            {
+                // 逆时针旋转
+                this.gameObject.transform.Rotate(0, rotationSpeed * Time.deltaTime, 0);
+            }
+            else
+            {
+                // 顺时针旋转
+                this.gameObject.transform.Rotate(0, -rotationSpeed * Time.deltaTime, 0);
+            }
+            }
+        }
+    }
+
     #endregion
 
     #region 喝水,吃食等道具消费函数

+ 2 - 1
Assets/Scripts/Home/HomeController.cs

@@ -323,7 +323,8 @@ public class HomeController : MonoBehaviour
 
                         if (listenBreak)        // 如果用户按下说话按键,立刻切换到监听状态
                         {
-                            dog.Listen();
+                            // dog.Listen();
+                            StartCoroutine(dog.RotationToPlayer());
                         }
                         else if (dog.isMoving)
                         {