Quellcode durchsuchen

5/29更新

修正bug.
添加遛狗场景随着连击数量狗从步行到快速跑步的动画切换。
Jees vor 1 Woche
Ursprung
Commit
0e7463b921

+ 2 - 2
Assets/Resources/Dog/AnimatorController/shibaInu/HomeDogAnimatorController.controller

@@ -1113,7 +1113,7 @@ AnimatorController:
     m_DefaultInt: 0
     m_DefaultBool: 0
     m_Controller: {fileID: 9100000}
-  - m_Name: isTurningLfeft
+  - m_Name: isTurningLeft
     m_Type: 4
     m_DefaultFloat: 0
     m_DefaultInt: 0
@@ -1886,7 +1886,7 @@ AnimatorStateTransition:
   m_Name: 
   m_Conditions:
   - m_ConditionMode: 2
-    m_ConditionEvent: isTurningLfeft
+    m_ConditionEvent: isTurningLeft
     m_EventTreshold: 0
   m_DstStateMachine: {fileID: 0}
   m_DstState: {fileID: 533779715773965248}

+ 8 - 0
Assets/Resources/WalkDogs/Animation.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 86b0be8a147f706488dba0c253e9174e
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 226 - 0
Assets/Resources/WalkDogs/Animation/shibaInu.controller

@@ -0,0 +1,226 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1101 &-5812415753248737871
+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: run
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: -1118776014439686591}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 1
+  m_TransitionOffset: 0
+  m_ExitTime: 0.75000006
+  m_HasExitTime: 0
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &-2046734961335687926
+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: walk
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 5799447038632379824}
+  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 &-1118776014439686591
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Run
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions: []
+  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: -3372365221567839360, guid: 0faf4e66268a11e4d982d9a0163734ca, type: 3}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!91 &9100000
+AnimatorController:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: shibaInu
+  serializedVersion: 5
+  m_AnimatorParameters:
+  - m_Name: run
+    m_Type: 9
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  - m_Name: fastRun
+    m_Type: 9
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  - m_Name: walk
+    m_Type: 9
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  m_AnimatorLayers:
+  - serializedVersion: 5
+    m_Name: Base Layer
+    m_StateMachine: {fileID: 8248218415952573908}
+    m_Mask: {fileID: 0}
+    m_Motions: []
+    m_Behaviours: []
+    m_BlendingMode: 0
+    m_SyncedLayerIndex: -1
+    m_DefaultWeight: 0
+    m_IKPass: 0
+    m_SyncedLayerAffectsTiming: 0
+    m_Controller: {fileID: 9100000}
+--- !u!1102 &677917268994368435
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Fast Run
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions: []
+  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: -7996380709264774473, guid: 0faf4e66268a11e4d982d9a0163734ca, type: 3}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1101 &3909535831123298131
+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: fastRun
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 677917268994368435}
+  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 &5799447038632379824
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Walk
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions: []
+  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: -4735008899129283676, guid: 0faf4e66268a11e4d982d9a0163734ca, type: 3}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1107 &8248218415952573908
+AnimatorStateMachine:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Base Layer
+  m_ChildStates:
+  - serializedVersion: 1
+    m_State: {fileID: 5799447038632379824}
+    m_Position: {x: 320, y: 150, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: -1118776014439686591}
+    m_Position: {x: 497.22223, y: 57.5, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: 677917268994368435}
+    m_Position: {x: 550, y: 230, z: 0}
+  m_ChildStateMachines: []
+  m_AnyStateTransitions:
+  - {fileID: -5812415753248737871}
+  - {fileID: -2046734961335687926}
+  - {fileID: 3909535831123298131}
+  m_EntryTransitions: []
+  m_StateMachineTransitions: {}
+  m_StateMachineBehaviours: []
+  m_AnyStatePosition: {x: 130, y: -20, z: 0}
+  m_EntryPosition: {x: 50, y: 120, z: 0}
+  m_ExitPosition: {x: 750, y: 130, z: 0}
+  m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
+  m_DefaultState: {fileID: 5799447038632379824}

+ 8 - 0
Assets/Resources/WalkDogs/Animation/shibaInu.controller.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1508501c3b4ea37488b39f5a112ecdb5
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 9100000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 6 - 32
Assets/Resources/Warehouse/ItemUseController.cs

@@ -36,12 +36,12 @@ public class ItemUseController : ScriptableObject
 
 
 
-    public static string _itemUseId = null;        // 暂存使用item数据,调用另外一个Monobehaviour Class来执行网络通讯
+    public static string _homeUseItemId = null;        // 暂存使用item数据,调用另外一个Monobehaviour Class来执行网络通讯
 
 
     public static void ItemUsed(string itemId)
     {
-        // 在Home场景使用道具调用_itemUseId来启动道具使用
+        // 在Home场景使用道具调用_homeUseItemId来启动道具使用
         if (SceneManager.GetActiveScene().name == "Home")
         {
             var bowls = GameObject.Find("Bowls");
@@ -60,7 +60,8 @@ public class ItemUseController : ScriptableObject
                     dogInScene.StartItemConsume(ItemGroup.FOOD);
                     dogInScene.SetMoveSpeed(UnityEngine.Random.Range(0.3f, 0.6f));
                 }
-
+                // 通过将_homeUseItemId 设置为非空后,启动网络通讯,仅限于在Home场景消耗的道具
+                ItemUseController._homeUseItemId = itemId;
             }
 
             // 消费水牛奶等
@@ -76,10 +77,9 @@ public class ItemUseController : ScriptableObject
                     dogInScene.StartItemConsume(ItemGroup.WATER);
                     dogInScene.SetMoveSpeed(UnityEngine.Random.Range(0.3f, 0.6f));
                 }
+                // 通过将_itemUseId 设置为非空后,启动网络通讯,仅限于在Home场景消耗的道具
+                ItemUseController._homeUseItemId = itemId;
             }
-
-            // 通过将_itemUseId 设置为非空后,启动网络通讯
-            ItemUseController._itemUseId = itemId;
         }
         
 
@@ -145,30 +145,4 @@ public class ItemUseController : ScriptableObject
     }
 
     #endregion
-
-
-    // 废弃,待删除
-    private static float CalcAngle(Vector3 bowlLoc, Vector3 targetLoc1, Vector3 targetPoc2)
-    {
-        // 计算向量AB和向量AC
-        Vector3 vectorAB = bowlLoc - targetLoc1;
-        Vector3 vectorAC = bowlLoc - targetPoc2;
-
-        // 计算向量AB和向量AC的模长
-        float magnitudeAB = vectorAB.magnitude;
-        float magnitudeAC = vectorAC.magnitude;
-
-        // 计算点积
-        float dotProduct = Vector3.Dot(vectorAB, vectorAC);
-
-        // 计算夹角的余弦值
-        float cosTheta = dotProduct / (magnitudeAB * magnitudeAC);
-
-        // 计算夹角θ
-        float angleTheta = Mathf.Acos(cosTheta) * Mathf.Rad2Deg; // 将弧度转换为度数
-        Debug.Log("夹角θ: " + angleTheta + "度");
-
-        return angleTheta;
-    }
-
 }

+ 8 - 1
Assets/Resources/Warehouse/WarehouseController.cs

@@ -125,7 +125,14 @@ public class WarehouseController : MonoBehaviour
                 // 这里复用 shopping UI 里面的 item.uxml
                 // UI 里面命名为price,实际是qty
                 var price = itemFrame.Q<Label>("price");
-                price.text = item.Value.ToString();
+                if (item.Value > 999)
+                {
+                    price.text = "999+";
+                }
+                else
+                {
+                    price.text = item.Value.ToString();
+                }
 
                 // 读取图片
                 string picturePath = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "item", type, item.Key, "picture" });

+ 45 - 12
Assets/Scenes/WalkDogs.unity

@@ -251,8 +251,12 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 1499967821206834083, guid: e51809b7ef307dd49be010f1bb5dadc2, type: 3}
       propertyPath: m_IsActive
-      value: 1
+      value: 0
       objectReference: {fileID: 0}
+    - target: {fileID: 1734340060628776688, guid: e51809b7ef307dd49be010f1bb5dadc2, type: 3}
+      propertyPath: m_Controller
+      value: 
+      objectReference: {fileID: 9100000, guid: 1508501c3b4ea37488b39f5a112ecdb5, type: 2}
     - target: {fileID: 1841919266960408406, guid: e51809b7ef307dd49be010f1bb5dadc2, type: 3}
       propertyPath: m_Layer
       value: 0
@@ -279,35 +283,35 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 2277454056521503001, guid: e51809b7ef307dd49be010f1bb5dadc2, type: 3}
       propertyPath: m_LocalPosition.x
-      value: -0.01
+      value: 0
       objectReference: {fileID: 0}
     - target: {fileID: 2277454056521503001, guid: e51809b7ef307dd49be010f1bb5dadc2, type: 3}
       propertyPath: m_LocalPosition.y
-      value: -0.53
+      value: -0.5
       objectReference: {fileID: 0}
     - target: {fileID: 2277454056521503001, guid: e51809b7ef307dd49be010f1bb5dadc2, type: 3}
       propertyPath: m_LocalPosition.z
-      value: -6.78
+      value: -6.5
       objectReference: {fileID: 0}
     - target: {fileID: 2277454056521503001, guid: e51809b7ef307dd49be010f1bb5dadc2, type: 3}
       propertyPath: m_LocalRotation.w
-      value: 0.70709646
+      value: 0.7071068
       objectReference: {fileID: 0}
     - target: {fileID: 2277454056521503001, guid: e51809b7ef307dd49be010f1bb5dadc2, type: 3}
       propertyPath: m_LocalRotation.x
-      value: 0.0038257854
+      value: 0
       objectReference: {fileID: 0}
     - target: {fileID: 2277454056521503001, guid: e51809b7ef307dd49be010f1bb5dadc2, type: 3}
       propertyPath: m_LocalRotation.y
-      value: 0.70709646
+      value: 0.7071068
       objectReference: {fileID: 0}
     - target: {fileID: 2277454056521503001, guid: e51809b7ef307dd49be010f1bb5dadc2, type: 3}
       propertyPath: m_LocalRotation.z
-      value: -0.0038257854
+      value: 0
       objectReference: {fileID: 0}
     - target: {fileID: 2277454056521503001, guid: e51809b7ef307dd49be010f1bb5dadc2, type: 3}
       propertyPath: m_LocalEulerAnglesHint.x
-      value: 0.62
+      value: 0
       objectReference: {fileID: 0}
     - target: {fileID: 2277454056521503001, guid: e51809b7ef307dd49be010f1bb5dadc2, type: 3}
       propertyPath: m_LocalEulerAnglesHint.y
@@ -520,8 +524,37 @@ PrefabInstance:
     m_RemovedComponents: []
     m_RemovedGameObjects: []
     m_AddedGameObjects: []
-    m_AddedComponents: []
+    m_AddedComponents:
+    - targetCorrespondingSourceObject: {fileID: 1499967821206834083, guid: e51809b7ef307dd49be010f1bb5dadc2, type: 3}
+      insertIndex: -1
+      addedObject: {fileID: 549612797}
   m_SourcePrefab: {fileID: 100100000, guid: e51809b7ef307dd49be010f1bb5dadc2, type: 3}
+--- !u!1 &549612796 stripped
+GameObject:
+  m_CorrespondingSourceObject: {fileID: 1499967821206834083, guid: e51809b7ef307dd49be010f1bb5dadc2, type: 3}
+  m_PrefabInstance: {fileID: 549612795}
+  m_PrefabAsset: {fileID: 0}
+--- !u!65 &549612797
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 549612796}
+  m_Material: {fileID: 0}
+  m_IncludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_ExcludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_LayerOverridePriority: 0
+  m_IsTrigger: 0
+  m_ProvidesContacts: 0
+  m_Enabled: 1
+  serializedVersion: 3
+  m_Size: {x: 0.2, y: 0.5, z: 0.6}
+  m_Center: {x: 0, y: 0.25, z: 0}
 --- !u!1 &586495880
 GameObject:
   m_ObjectHideFlags: 0
@@ -981,8 +1014,8 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 36c6647456e97cf4dafb6e0b44866c83, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  position: {x: 0, y: 0, z: 0}
-  rotation: {x: 0, y: 0, z: 0}
+  position: {x: 0, y: -0.5, z: -6.5}
+  rotation: {x: 0, y: 90, z: 0}
   scale: {x: 1, y: 1, z: 1}
   dogDisplayName: 
   loadAllDogs: 1

+ 11 - 7
Assets/Scripts/Bathroom/BathroomController.cs

@@ -241,12 +241,17 @@ public class BathroomController : MonoBehaviour
             // TODO 清除然后重新写入用户道具数据
 
             // 清除然后重新写入狗的数据
-            DogProperty[] dogProperties = JsonConvert.DeserializeObject<DogProperty[]>(data["dogs"].ToString());
-            UserProperty.dogs.Clear();
-            foreach (var dog in dogProperties)
-            {
-                UserProperty.dogs.Add(dog);
-            }
+            // DogProperty[] dogProperties = JsonConvert.DeserializeObject<DogProperty[]>(data["dogs"].ToString());
+            // UserProperty.dogs.Clear();
+            // foreach (var dog in dogProperties)
+            // {
+            //     UserProperty.dogs.Add(dog);
+            // }
+            string dogs = data["dogs"].ToString();
+            UserProperty.FreshDogInfo(dogs);
+            string props = data["props"].ToString();
+            UserProperty.FreshUserItems(props);
+
             string msg = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "game_message", "dog_is_clean", EnviromentSetting.languageCode });
             // MessageBoxController.ShowMessage(msg, ()=> SceneManager.LoadScene("Home"));
             Time.timeScale = 1.0f; // 恢复时间缩放
@@ -256,7 +261,6 @@ public class BathroomController : MonoBehaviour
         {
             Debug.Log(data["message"]);
         }
-
     }
 }
 

+ 4 - 2
Assets/Scripts/GameControllers/DogInitialize.cs

@@ -51,7 +51,8 @@ public class DogInitialize: MonoBehaviour {
         {
             var puppy = this.dogProperty;
             GameObject dogResource = Resources.Load<GameObject>("Dog/Breed/" + puppy.breed);
-            if (dogResource == null) {
+            if (dogResource == null)
+            {
                 dogResource = Resources.Load<GameObject>("Dog/Breed/shibaInu");        // 默认读取,防止后端传入数据错误
             }
             GameObject dog = Instantiate(dogResource);
@@ -78,7 +79,7 @@ public class DogInitialize: MonoBehaviour {
                 Renderer renderer = dogL2.GetComponent<Renderer>();
                 //Texture skin = Resources.Load<Texture>("Dog/Skin/" + puppy.breed + "/" + puppy.skin);
                 Material mat = Resources.Load<Material>("Dog/Skin/" + puppy.breed + "/" + puppy.skin);
-                if (mat == null) 
+                if (mat == null)
                 {
                     mat = Resources.Load<Material>("Dog/Skin/shibaInu/amber");        // 默认读取,防止后端传入数据错误
                 }
@@ -91,6 +92,7 @@ public class DogInitialize: MonoBehaviour {
             dog.transform.localPosition = position;
             dog.transform.localRotation = Quaternion.Euler(rotation);
             dog.transform.localScale = scale;
+            dog.tag = "dog";        // 设置tag为dog,方便后续查找
         }
     }
 

+ 2 - 2
Assets/Scripts/Home/DogInScene.cs

@@ -235,11 +235,11 @@ public class DogInScene //: ScriptableObject
     // 狗播放问号的表情
     public void PlayQuestionMark()
     {
-        var questionMark = gameObject.transform.Find("QuestionMark").gameObject;
+        var questionMark = gameObject.transform.Find("QuestionMarkParticle").gameObject;
         if (questionMark != null)
         {
             var particleQuestionMark = questionMark.GetComponent<ParticleSystem>();
-            if (particleQuestionMark != null)
+            if (particleQuestionMark != null && !particleQuestionMark.isPlaying)
             {
                 particleQuestionMark.Play();
             }

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

@@ -427,7 +427,7 @@ public class HomeController : MonoBehaviour
 
         // 加载box collider
         BoxCollider boxCollider = dog.AddComponent<BoxCollider>();
-        boxCollider.isTrigger = false;
+        // boxCollider.isTrigger = false;
         boxCollider.center = new Vector3(0, 0.25f, 0);
         boxCollider.size = new Vector3(0.12f, 0.45f, 0.54f);
         boxCollider.isTrigger = true;
@@ -670,6 +670,7 @@ public class HomeController : MonoBehaviour
                     {
                         string command = trainingContent.Substring(7);
                         trainingDog.animator.SetTrigger(command);
+                        // string[] noStatusCommand = { "apple", "banana", "cherry" };
                         trainingDog.animator.SetBool(command + "_status", true);
                     }
 

+ 4 - 4
Assets/Scripts/Home/ItemUseWebCommController.cs

@@ -21,15 +21,15 @@ public class ItemUseWebCommController : MonoBehaviour
     // Update is called once per frame
     void Update()
     {
-        if (ItemUseController._itemUseId != null)
+        if (ItemUseController._homeUseItemId != null)
         {
-            ItemUsePost(ItemUseController._itemUseId);
-            ItemUseController._itemUseId = null;
+            HomeSceneItemUsePost(ItemUseController._homeUseItemId);
+            ItemUseController._homeUseItemId = null;
         }
     }
 
     // Post道具使用时网络通讯 
-    void ItemUsePost(string itemId)
+    void HomeSceneItemUsePost(string itemId)
     {
         Debug.Log("Item use Post request");
 

+ 114 - 14
Assets/Scripts/WalkDogs/SoundGameController.cs

@@ -21,6 +21,8 @@ public class SoundGameController : MonoBehaviour
     float GameEndTime;
     // 游戏得分统计
     int score, combo, maxCombo, NGCombo, perfectCount, goodCount, poorCount, missCount, totalCount;
+    // 游戏数据
+    string currentDogState = "walking"; // 是否有狗在跑
 
     // TapOrSwipe 触控检测
     Vector2 pressDownPosition = new Vector2(0, 0);
@@ -42,12 +44,58 @@ public class SoundGameController : MonoBehaviour
         notePrefabTap = Resources.Load<GameObject>("WalkDogs/Note/NoteTap");
 
         StartCoroutine(PlaySoundGame());
+        StartCoroutine(DogComponentInstaller());
     }
 
     // Update is called once per frame
     void Update()
     {
+        DogStatusUpdate();
+    }
+
+    IEnumerator DogComponentInstaller()
+    {
+        yield return null;
+        // 找到所有标签为 "dog" 的 GameObject
+        GameObject[] dogObjects = GameObject.FindGameObjectsWithTag("dog");
+
+        foreach (GameObject dog in dogObjects)
+        {
+            // 加载指定的Animator controller
+            Animator animator = dog.GetComponent<Animator>();
+            DogProperty dogProperty = new DogProperty();
+            foreach (var dogProp in UserProperty.dogs)
+            {
+                if (dogProp.dog_name == dog.name)
+                {
+                    dogProperty = dogProp;
+                    break;
+                }
+            }
+            RuntimeAnimatorController animatorController = Resources.Load<RuntimeAnimatorController>("WalkDogs/Animation/shibaInu");
+            if (dogProperty.breed == "shibaInu")
+            {
+                animatorController = Resources.Load<RuntimeAnimatorController>("WalkDogs/Animation/shibaInu");
+            }
+            animator.runtimeAnimatorController = animatorController;
 
+            // 加载Rigidbody
+            Rigidbody rigidbody = dog.AddComponent<Rigidbody>();
+            //rigidbody.isKinematic = true;
+            rigidbody.mass = 10;
+            rigidbody.linearDamping = 10;
+            rigidbody.angularDamping = 10;
+            //rigidbody.freezeRotation = true;
+            rigidbody.constraints = RigidbodyConstraints.FreezePositionY | RigidbodyConstraints.FreezeRotation;
+            rigidbody.interpolation = RigidbodyInterpolation.Interpolate;
+            rigidbody.collisionDetectionMode = CollisionDetectionMode.ContinuousSpeculative;
+
+            // 加载box collider
+            BoxCollider boxCollider = dog.AddComponent<BoxCollider>();
+            boxCollider.isTrigger = false;
+            boxCollider.center = new Vector3(0, 0.25f, 0);
+            boxCollider.size = new Vector3(0.2f, 0.5f, 0.6f);
+        }
     }
 
     IEnumerator PlaySoundGame()
@@ -87,7 +135,7 @@ public class SoundGameController : MonoBehaviour
                 if (myMaterial != null)
                 {
                     backgroundMeshRenderer.material = myMaterial;
-                    Debug.Log("Background changed to: " + backgroundPath);
+                    // Debug.Log("Background changed to: " + backgroundPath);
                 }
                 else
                 {
@@ -115,8 +163,9 @@ public class SoundGameController : MonoBehaviour
                     note.isTapped = true;
                     missCount++;
                     NGCombo++;
-                    Debug.Log("Miss!" + Time.time + " Tap time deadline: " + TapTimeDeadline + " total miss:" + missCount);
-                    Debug.Log("index of note:" + soundTrackManager.soundAction.IndexOf(note));
+                    combo = 0; // 重置连击
+                    // Debug.Log("Miss!" + Time.time + " Tap time deadline: " + TapTimeDeadline + " total miss:" + missCount);
+                    // Debug.Log("index of note:" + soundTrackManager.soundAction.IndexOf(note));
                     break;
                 }
             }
@@ -154,16 +203,16 @@ public class SoundGameController : MonoBehaviour
         if (action == "tap")
         {
             note = Instantiate(notePrefabTap);
-            Debug.Log("Create Tap Note: " + noteName);
-            Debug.Log("Hit Time: " + hitTime + ", Action: " + action);
-            Debug.Log("Create Time: " + Time.time);
+            // Debug.Log("Create Tap Note: " + noteName);
+            // Debug.Log("Hit Time: " + hitTime + ", Action: " + action);
+            // Debug.Log("Create Time: " + Time.time);
         }
         else
         {
             note = Instantiate(notePrefabSwipe);
-            Debug.Log("Create Tap Note: " + noteName);
-            Debug.Log("Hit Time: " + hitTime + ", Action: " + action);
-            Debug.Log("Create Time: " + Time.time);
+            // Debug.Log("Create Tap Note: " + noteName);
+            // Debug.Log("Hit Time: " + hitTime + ", Action: " + action);
+            // Debug.Log("Create Time: " + Time.time);
         }
         note.gameObject.name = "note_" + noteName;
         NoteController noteController = note.GetComponent<NoteController>();
@@ -258,7 +307,7 @@ public class SoundGameController : MonoBehaviour
                             }
                             perfectCount++;
                             NGCombo = 0;
-                            Debug.Log("Perfect!" + Time.time + " total perfect:" + perfectCount);
+                            // Debug.Log("Perfect!" + Time.time + " total perfect:" + perfectCount);
                             string noteName = soundTrackManager.soundAction.IndexOf(note).ToString();
                             DestroyNote(noteName);
                         }
@@ -268,7 +317,7 @@ public class SoundGameController : MonoBehaviour
                             combo = 0;
                             goodCount++;
                             NGCombo = 0;
-                            Debug.Log("Good!" + Time.time + " total good:" + goodCount);
+                            // Debug.Log("Good!" + Time.time + " total good:" + goodCount);
                             string noteName = soundTrackManager.soundAction.IndexOf(note).ToString();
                             DestroyNote(noteName);
                         }
@@ -278,7 +327,7 @@ public class SoundGameController : MonoBehaviour
                             combo = 0;
                             poorCount++;
                             NGCombo++;
-                            Debug.Log("Poor!" + Time.time + " total poor:" + poorCount);
+                            // Debug.Log("Poor!" + Time.time + " total poor:" + poorCount);
                         }
                     }
                     else
@@ -286,9 +335,9 @@ public class SoundGameController : MonoBehaviour
                         combo = 0;
                         missCount++;
                         NGCombo++;
-                        Debug.Log("Wrong!" + Time.time + " total miss:" + missCount);
+                        // Debug.Log("Wrong!" + Time.time + " total miss:" + missCount);
                     }
-                    Debug.Log("index of note:" + soundTrackManager.soundAction.IndexOf(note));
+                    // Debug.Log("index of note:" + soundTrackManager.soundAction.IndexOf(note));
                     break;
                 }
             }
@@ -307,8 +356,59 @@ public class SoundGameController : MonoBehaviour
             Debug.Log("Note not found: " + noteName);
         }
     }
+
+    // 设置狗的状态
+    private void DogStatusUpdate()
+    {
+        GameObject[] dogObjects = GameObject.FindGameObjectsWithTag("dog");
+        Debug.Log("combo:"+ combo);
+        // combo = 6; // 这里是为了测试用,实际应该从游戏逻辑中获取当前连击数
+        if (combo >= 5 && combo < 10)
+        {
+            currentDogState = "running";
+            foreach (GameObject dog in dogObjects)
+            {
+                Animator animator = dog.GetComponent<Animator>();
+                if (animator != null)
+                {
+                    animator.SetTrigger("run");
+                    // animator.Play("Run");
+                }
+            }
+        }
+        else if (combo >= 10)
+        {
+            currentDogState = "fastRunning";
+            foreach (GameObject dog in dogObjects)
+            {
+                Animator animator = dog.GetComponent<Animator>();
+                if (animator != null)
+                {
+                    animator.SetTrigger("fastRun");
+                    // animator.Play("Fast Run");
+                }
+            }
+        }
+        else if(combo == 0)
+        {
+            if (currentDogState == "running" || currentDogState == "fastRunning")
+            {
+                currentDogState = "walking";
+                foreach (GameObject dog in dogObjects)
+                {
+                    Animator animator = dog.GetComponent<Animator>();
+                    if (animator != null)
+                    {
+                        // animator.Play("Walk");
+                        animator.SetTrigger("walk");
+                    }
+                }
+            }
+        }
+    }
 }
 
+
 public class TouchResponse
 {
     public string action = "";  // 触控动作 up, down, left, right, tap, none(表示无效)

+ 1 - 0
ProjectSettings/TagManager.asset

@@ -6,6 +6,7 @@ TagManager:
   tags:
   - Throw Material
   - Air Wall
+  - dog
   layers:
   - Default
   - TransparentFX