瀏覽代碼

3/29更新

2025/3/26 添加Home场景center of dogs。用于摄像机瞄准。确保所有狗都在视野内。
添加狗叼住飞盘的概率算法
添加购物成功提示(待验证)
2025/3/27 DogInScene类单独放在一个文件内
添加水和食物在食用后消失的动画
准备home场景中interact 部分代码
2025/3/28 开发部分交互代码
修正吃狗粮代码错误
添加登陆时候拉取item清单列表(待下周json格式修复后,继续)
2025/3/29 软件升级至6000.0.44
调整飞盘场景选狗按键的位置
Jees 2 月之前
父節點
當前提交
c1e43bb986
共有 49 個文件被更改,包括 7300 次插入1002 次删除
  1. 55 15
      Assets/Packages/Red_Deer/Cartoon_Animals/Cartoon_Dogs/Cartoon_Objects/Prefabs/Bowl_1.prefab
  2. 67 13
      Assets/Packages/Red_Deer/Cartoon_Animals/Cartoon_Dogs/Cartoon_Objects/Prefabs/Bowl_2.prefab
  3. 二進制
      Assets/Pictures/bathroom/nozzle.png
  4. 0 143
      Assets/Pictures/bathroom/nozzle.png.meta
  5. 二進制
      Assets/Pictures/bathroom/sponge.png
  6. 0 143
      Assets/Pictures/bathroom/sponge.png.meta
  7. 二進制
      Assets/Pictures/icon1.png
  8. 9 5
      Assets/Resources/Data/languages.json
  9. 2 2
      Assets/Resources/Dog/AnimatorController/shibaInu/HomeDogAnimatorController.controller.meta
  10. 1244 0
      Assets/Resources/Dog/AnimatorController/shibaInu/HomeDogInteractController.controller
  11. 8 0
      Assets/Resources/Dog/AnimatorController/shibaInu/HomeDogInteractController.controller.meta
  12. 24 12
      Assets/Resources/DogSelector/DogSelectorController.cs
  13. 7 2
      Assets/Resources/Shopping/ShoppingController.cs
  14. 1 1
      Assets/Resources/VoiceAndManu/MenuController.cs
  15. 1 23
      Assets/Resources/VoiceAndManu/VoiceAndMenu.prefab
  16. 36 6
      Assets/Resources/VoiceAndManu/VoiceController.cs
  17. 9 8
      Assets/Resources/Warehouse/ItemUseController.cs
  18. 0 5
      Assets/Resources/Warehouse/Warehouse.prefab
  19. 4886 204
      Assets/Scenes/Home.unity
  20. 1 1
      Assets/Scenes/Home_Profiles.meta
  21. 8 0
      Assets/Scenes/Home_Profiles/Particles.meta
  22. 86 0
      Assets/Scenes/Home_Profiles/Particles/Heart.mat
  23. 8 0
      Assets/Scenes/Home_Profiles/Particles/Heart.mat.meta
  24. 二進制
      Assets/Scenes/Home_Profiles/Particles/heart.png
  25. 1 1
      Assets/Scenes/Home_Profiles/Particles/heart.png.meta
  26. 44 0
      Assets/Scenes/Home_Profiles/VCam Dog Profile.asset
  27. 8 0
      Assets/Scenes/Home_Profiles/VCam Dog Profile.asset.meta
  28. 105 1
      Assets/Scenes/Playground.unity
  29. 2 3
      Assets/Scripts/Bathroom/BathroomController.cs
  30. 28 23
      Assets/Scripts/Develop Script/TestSetup.cs
  31. 3 14
      Assets/Scripts/Functions/WebController.cs
  32. 6 6
      Assets/Scripts/GameControllers/GameData.cs
  33. 2 2
      Assets/Scripts/GameControllers/GameTool.cs
  34. 16 17
      Assets/Scripts/GameControllers/UserProperty.cs
  35. 4 4
      Assets/Scripts/Home/BowlColliderController.cs
  36. 393 0
      Assets/Scripts/Home/DogInScene.cs
  37. 2 0
      Assets/Scripts/Home/DogInScene.cs.meta
  38. 104 270
      Assets/Scripts/Home/HomeController.cs
  39. 8 15
      Assets/Scripts/Home/ItemUseWebCommController.cs
  40. 51 0
      Assets/Scripts/Home/PlayerColliderController.cs
  41. 2 0
      Assets/Scripts/Home/PlayerColliderController.cs.meta
  42. 12 15
      Assets/Scripts/Login/LoginController.cs
  43. 5 3
      Assets/Scripts/Playground/DogCatchDetection.cs
  44. 11 2
      Assets/Scripts/Playground/PlayToyController.cs
  45. 34 36
      Packages/packages-lock.json
  46. 3 3
      ProjectSettings/PackageManagerSettings.asset
  47. 1 1
      ProjectSettings/ProjectSettings.asset
  48. 2 2
      ProjectSettings/ProjectVersion.txt
  49. 1 1
      ProjectSettings/TagManager.asset

+ 55 - 15
Assets/Packages/Red_Deer/Cartoon_Animals/Cartoon_Dogs/Cartoon_Objects/Prefabs/Bowl_1.prefab

@@ -13,11 +13,11 @@ GameObject:
   - component: {fileID: 7879517374207571680}
   - component: {fileID: 6328385768384367598}
   m_Layer: 0
-  m_Name: Food_1
+  m_Name: Food
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
-  m_StaticEditorFlags: 2147483647
+  m_StaticEditorFlags: 0
   m_IsActive: 1
 --- !u!4 &2083778932578735553
 Transform:
@@ -110,7 +110,7 @@ Rigidbody:
   m_ImplicitCom: 1
   m_ImplicitTensor: 1
   m_UseGravity: 1
-  m_IsKinematic: 0
+  m_IsKinematic: 1
   m_Interpolate: 0
   m_Constraints: 0
   m_CollisionDetection: 0
@@ -125,13 +125,15 @@ GameObject:
   - component: {fileID: 6920918337413409961}
   - component: {fileID: 3450684658564291838}
   - component: {fileID: 5592322579943901240}
-  - component: {fileID: 6558069851603559208}
+  - component: {fileID: 6585256479762466421}
+  - component: {fileID: 6588104976950749863}
+  - component: {fileID: 8735353818322333752}
   m_Layer: 0
   m_Name: Bowl_1
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
-  m_StaticEditorFlags: 2147483647
+  m_StaticEditorFlags: 0
   m_IsActive: 1
 --- !u!4 &6920918337413409961
 Transform:
@@ -141,10 +143,10 @@ Transform:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1632938634403251778}
   serializedVersion: 2
-  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  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_ConstrainProportionsScale: 0
+  m_LocalScale: {x: 2, y: 2, z: 2}
+  m_ConstrainProportionsScale: 1
   m_Children:
   - {fileID: 2083778932578735553}
   m_Father: {fileID: 0}
@@ -202,8 +204,8 @@ MeshRenderer:
   m_SortingLayer: 0
   m_SortingOrder: 0
   m_AdditionalVertexStreams: {fileID: 0}
---- !u!64 &6558069851603559208
-MeshCollider:
+--- !u!65 &6585256479762466421
+BoxCollider:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
@@ -217,10 +219,48 @@ MeshCollider:
     serializedVersion: 2
     m_Bits: 0
   m_LayerOverridePriority: 0
-  m_IsTrigger: 0
+  m_IsTrigger: 1
   m_ProvidesContacts: 0
   m_Enabled: 1
-  serializedVersion: 5
-  m_Convex: 0
-  m_CookingOptions: 30
-  m_Mesh: {fileID: -3782590863285434248, guid: 9eee4938b08ad0846aca26f89c4516df, type: 3}
+  serializedVersion: 3
+  m_Size: {x: 0.2, y: 0.1, z: 0.2}
+  m_Center: {x: -0.00000008940697, y: 0.035010584, z: -0.00000040978193}
+--- !u!54 &6588104976950749863
+Rigidbody:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1632938634403251778}
+  serializedVersion: 4
+  m_Mass: 1
+  m_Drag: 0
+  m_AngularDrag: 0.05
+  m_CenterOfMass: {x: 0, y: 0, z: 0}
+  m_InertiaTensor: {x: 1, y: 1, z: 1}
+  m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_IncludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_ExcludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_ImplicitCom: 1
+  m_ImplicitTensor: 1
+  m_UseGravity: 1
+  m_IsKinematic: 1
+  m_Interpolate: 0
+  m_Constraints: 0
+  m_CollisionDetection: 0
+--- !u!114 &8735353818322333752
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1632938634403251778}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 78dd6ebe4f0f2524a993012b3a8857b0, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 

+ 67 - 13
Assets/Packages/Red_Deer/Cartoon_Animals/Cartoon_Dogs/Cartoon_Objects/Prefabs/Bowl_2.prefab

@@ -16,7 +16,7 @@ GameObject:
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
-  m_StaticEditorFlags: 2147483647
+  m_StaticEditorFlags: 0
   m_IsActive: 1
 --- !u!4 &2937941480635097522
 Transform:
@@ -25,13 +25,13 @@ Transform:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 2632868419592774394}
+  serializedVersion: 2
   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_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 25269467461883209}
-  m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!33 &2357307594010023539
 MeshFilter:
@@ -58,6 +58,9 @@ MeshRenderer:
   m_ReflectionProbeUsage: 1
   m_RayTracingMode: 2
   m_RayTraceProcedural: 0
+  m_RayTracingAccelStructBuildFlagsOverride: 0
+  m_RayTracingAccelStructBuildFlags: 1
+  m_SmallMeshCulling: 1
   m_RenderingLayerMask: 257
   m_RendererPriority: 0
   m_Materials:
@@ -94,13 +97,15 @@ GameObject:
   - component: {fileID: 25269467461883209}
   - component: {fileID: 277856888336361184}
   - component: {fileID: 2024820700466576722}
-  - component: {fileID: 9077489341479908261}
+  - component: {fileID: 6860665466575275340}
+  - component: {fileID: 8085872179342180333}
+  - component: {fileID: 8391691885776028840}
   m_Layer: 0
   m_Name: Bowl_2
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
-  m_StaticEditorFlags: 2147483647
+  m_StaticEditorFlags: 0
   m_IsActive: 1
 --- !u!4 &25269467461883209
 Transform:
@@ -109,14 +114,14 @@ Transform:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 4438361123424968881}
-  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  serializedVersion: 2
+  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_LocalScale: {x: 2, y: 2, z: 2}
   m_ConstrainProportionsScale: 0
   m_Children:
   - {fileID: 2937941480635097522}
   m_Father: {fileID: 0}
-  m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!33 &277856888336361184
 MeshFilter:
@@ -143,6 +148,9 @@ MeshRenderer:
   m_ReflectionProbeUsage: 1
   m_RayTracingMode: 2
   m_RayTraceProcedural: 0
+  m_RayTracingAccelStructBuildFlagsOverride: 0
+  m_RayTracingAccelStructBuildFlags: 1
+  m_SmallMeshCulling: 1
   m_RenderingLayerMask: 257
   m_RendererPriority: 0
   m_Materials:
@@ -168,17 +176,63 @@ MeshRenderer:
   m_SortingLayer: 0
   m_SortingOrder: 0
   m_AdditionalVertexStreams: {fileID: 0}
---- !u!64 &9077489341479908261
-MeshCollider:
+--- !u!65 &6860665466575275340
+BoxCollider:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 4438361123424968881}
   m_Material: {fileID: 0}
-  m_IsTrigger: 0
+  m_IncludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_ExcludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_LayerOverridePriority: 0
+  m_IsTrigger: 1
+  m_ProvidesContacts: 0
   m_Enabled: 1
+  serializedVersion: 3
+  m_Size: {x: 0.15, y: 0.1, z: 0.15}
+  m_Center: {x: -0.00000008568168, y: 0.03515504, z: -0.0000004246831}
+--- !u!54 &8085872179342180333
+Rigidbody:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4438361123424968881}
   serializedVersion: 4
-  m_Convex: 0
-  m_CookingOptions: 30
-  m_Mesh: {fileID: 5243637740095923077, guid: 9eee4938b08ad0846aca26f89c4516df, type: 3}
+  m_Mass: 1
+  m_Drag: 0
+  m_AngularDrag: 0.05
+  m_CenterOfMass: {x: 0, y: 0, z: 0}
+  m_InertiaTensor: {x: 1, y: 1, z: 1}
+  m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_IncludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_ExcludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_ImplicitCom: 1
+  m_ImplicitTensor: 1
+  m_UseGravity: 1
+  m_IsKinematic: 1
+  m_Interpolate: 0
+  m_Constraints: 0
+  m_CollisionDetection: 0
+--- !u!114 &8391691885776028840
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4438361123424968881}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 78dd6ebe4f0f2524a993012b3a8857b0, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 

二進制
Assets/Pictures/bathroom/nozzle.png


+ 0 - 143
Assets/Pictures/bathroom/nozzle.png.meta

@@ -1,143 +0,0 @@
-fileFormatVersion: 2
-guid: 881d3b221d158dd47aba1e1783860193
-TextureImporter:
-  internalIDToNameTable: []
-  externalObjects: {}
-  serializedVersion: 13
-  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
-    flipGreenChannel: 0
-  isReadable: 1
-  streamingMipmaps: 0
-  streamingMipmapsPriority: 0
-  vTOnly: 0
-  ignoreMipmapLimit: 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: 0
-  nPOTScale: 0
-  lightmap: 0
-  compressionQuality: 50
-  spriteMode: 0
-  spriteExtrude: 1
-  spriteMeshType: 1
-  alignment: 0
-  spritePivot: {x: 0.5, y: 0.5}
-  spritePixelsToUnits: 100
-  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
-  alphaUsage: 1
-  alphaIsTransparency: 1
-  spriteTessellationDetail: -1
-  textureType: 7
-  textureShape: 1
-  singleChannelComponent: 0
-  flipbookRows: 1
-  flipbookColumns: 1
-  maxTextureSizeSet: 0
-  compressionQualitySet: 0
-  textureFormatSet: 0
-  ignorePngGamma: 0
-  applyGammaDecoding: 0
-  swizzle: 50462976
-  cookieLightType: 0
-  platformSettings:
-  - serializedVersion: 4
-    buildTarget: DefaultTexturePlatform
-    maxTextureSize: 2048
-    resizeAlgorithm: 0
-    textureFormat: -1
-    textureCompression: 1
-    compressionQuality: 50
-    crunchedCompression: 0
-    allowsAlphaSplitting: 0
-    overridden: 0
-    ignorePlatformSupport: 0
-    androidETC2FallbackOverride: 0
-    forceMaximumCompressionQuality_BC6H_BC7: 0
-  - serializedVersion: 4
-    buildTarget: Standalone
-    maxTextureSize: 2048
-    resizeAlgorithm: 0
-    textureFormat: -1
-    textureCompression: 1
-    compressionQuality: 50
-    crunchedCompression: 0
-    allowsAlphaSplitting: 0
-    overridden: 0
-    ignorePlatformSupport: 0
-    androidETC2FallbackOverride: 0
-    forceMaximumCompressionQuality_BC6H_BC7: 0
-  - serializedVersion: 4
-    buildTarget: Android
-    maxTextureSize: 2048
-    resizeAlgorithm: 0
-    textureFormat: -1
-    textureCompression: 1
-    compressionQuality: 50
-    crunchedCompression: 0
-    allowsAlphaSplitting: 0
-    overridden: 0
-    ignorePlatformSupport: 0
-    androidETC2FallbackOverride: 0
-    forceMaximumCompressionQuality_BC6H_BC7: 0
-  - serializedVersion: 4
-    buildTarget: iOS
-    maxTextureSize: 2048
-    resizeAlgorithm: 0
-    textureFormat: -1
-    textureCompression: 1
-    compressionQuality: 50
-    crunchedCompression: 0
-    allowsAlphaSplitting: 0
-    overridden: 0
-    ignorePlatformSupport: 0
-    androidETC2FallbackOverride: 0
-    forceMaximumCompressionQuality_BC6H_BC7: 0
-  spriteSheet:
-    serializedVersion: 2
-    sprites: []
-    outline: []
-    customData: 
-    physicsShape: []
-    bones: []
-    spriteID: 
-    internalID: 0
-    vertices: []
-    indices: 
-    edges: []
-    weights: []
-    secondaryTextures: []
-    spriteCustomMetadata:
-      entries: []
-    nameFileIdTable: {}
-  mipmapLimitGroupName: 
-  pSDRemoveMatte: 0
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

二進制
Assets/Pictures/bathroom/sponge.png


+ 0 - 143
Assets/Pictures/bathroom/sponge.png.meta

@@ -1,143 +0,0 @@
-fileFormatVersion: 2
-guid: f741fc401f7752142a8a1f48e83da08b
-TextureImporter:
-  internalIDToNameTable: []
-  externalObjects: {}
-  serializedVersion: 13
-  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
-    flipGreenChannel: 0
-  isReadable: 1
-  streamingMipmaps: 0
-  streamingMipmapsPriority: 0
-  vTOnly: 0
-  ignoreMipmapLimit: 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: 0
-  nPOTScale: 0
-  lightmap: 0
-  compressionQuality: 50
-  spriteMode: 0
-  spriteExtrude: 1
-  spriteMeshType: 1
-  alignment: 0
-  spritePivot: {x: 0.5, y: 0.5}
-  spritePixelsToUnits: 100
-  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
-  alphaUsage: 1
-  alphaIsTransparency: 1
-  spriteTessellationDetail: -1
-  textureType: 7
-  textureShape: 1
-  singleChannelComponent: 0
-  flipbookRows: 1
-  flipbookColumns: 1
-  maxTextureSizeSet: 0
-  compressionQualitySet: 0
-  textureFormatSet: 0
-  ignorePngGamma: 0
-  applyGammaDecoding: 0
-  swizzle: 50462976
-  cookieLightType: 0
-  platformSettings:
-  - serializedVersion: 4
-    buildTarget: DefaultTexturePlatform
-    maxTextureSize: 2048
-    resizeAlgorithm: 0
-    textureFormat: -1
-    textureCompression: 1
-    compressionQuality: 50
-    crunchedCompression: 0
-    allowsAlphaSplitting: 0
-    overridden: 0
-    ignorePlatformSupport: 0
-    androidETC2FallbackOverride: 0
-    forceMaximumCompressionQuality_BC6H_BC7: 0
-  - serializedVersion: 4
-    buildTarget: Standalone
-    maxTextureSize: 2048
-    resizeAlgorithm: 0
-    textureFormat: -1
-    textureCompression: 1
-    compressionQuality: 50
-    crunchedCompression: 0
-    allowsAlphaSplitting: 0
-    overridden: 0
-    ignorePlatformSupport: 0
-    androidETC2FallbackOverride: 0
-    forceMaximumCompressionQuality_BC6H_BC7: 0
-  - serializedVersion: 4
-    buildTarget: Android
-    maxTextureSize: 2048
-    resizeAlgorithm: 0
-    textureFormat: -1
-    textureCompression: 1
-    compressionQuality: 50
-    crunchedCompression: 0
-    allowsAlphaSplitting: 0
-    overridden: 0
-    ignorePlatformSupport: 0
-    androidETC2FallbackOverride: 0
-    forceMaximumCompressionQuality_BC6H_BC7: 0
-  - serializedVersion: 4
-    buildTarget: iOS
-    maxTextureSize: 2048
-    resizeAlgorithm: 0
-    textureFormat: -1
-    textureCompression: 1
-    compressionQuality: 50
-    crunchedCompression: 0
-    allowsAlphaSplitting: 0
-    overridden: 0
-    ignorePlatformSupport: 0
-    androidETC2FallbackOverride: 0
-    forceMaximumCompressionQuality_BC6H_BC7: 0
-  spriteSheet:
-    serializedVersion: 2
-    sprites: []
-    outline: []
-    customData: 
-    physicsShape: []
-    bones: []
-    spriteID: 
-    internalID: 0
-    vertices: []
-    indices: 
-    edges: []
-    weights: []
-    secondaryTextures: []
-    spriteCustomMetadata:
-      entries: []
-    nameFileIdTable: {}
-  mipmapLimitGroupName: 
-  pSDRemoveMatte: 0
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

二進制
Assets/Pictures/icon1.png


+ 9 - 5
Assets/Resources/Data/languages.json

@@ -430,12 +430,16 @@
                 "zh-cn": "否"
             }
         },
-        "message": {
-            "not_enough_coin": {
-                "en": "You don't have enough coins.",
-                "zh-cn": "金币不足。"
-            }
+      "message": {
+        "not_enough_coin": {
+          "en": "You don't have enough coins.",
+          "zh-cn": "金币不足。"
+        },
+        "purchase_success": {
+          "en": "<<item_name>> purchase successful.",
+          "zh-cn": "<<item_name>>购买成功。"
         }
+      }
     },
     "warehouseUI": {
         "//": "warehouseUI页面和ShoppingUI相似。数据共用。"

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

@@ -1,8 +1,8 @@
 fileFormatVersion: 2
-guid: 51b6d0e7e6188834fa7e294baea2192a
+guid: 129befd34211a25489f4488cf57c38d5
 NativeFormatImporter:
   externalObjects: {}
-  mainObjectFileID: 9100000
+  mainObjectFileID: 0
   userData: 
   assetBundleName: 
   assetBundleVariant: 

+ 1244 - 0
Assets/Resources/Dog/AnimatorController/shibaInu/HomeDogInteractController.controller

@@ -0,0 +1,1244 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1102 &-9176223217037370774
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Start
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: 2636955888886481397}
+  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: 9093333957962042088, guid: 0faf4e66268a11e4d982d9a0163734ca, type: 3}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1101 &-8132929496976188033
+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: 533779715773965248}
+  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 &-7946899203391831091
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: R Turn
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: -8132929496976188033}
+  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: -3553886011277005015, guid: 1a349bfe663f8a848a567303e35c613a, type: 3}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1101 &-6578774210054145230
+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: isDying
+    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.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.8
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &-6420463359141894108
+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: sit
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: -9176223217037370774}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.5
+  m_TransitionOffset: 0
+  m_ExitTime: 0.1
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &-6130185709489123632
+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: Turn R
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: -7946899203391831091}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.1
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &-5764613439783771717
+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: isLying
+    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.5
+  m_TransitionOffset: 0
+  m_ExitTime: 0.1
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1107 &-4310704879323197233
+AnimatorStateMachine:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Death
+  m_ChildStates:
+  - serializedVersion: 1
+    m_State: {fileID: -961187681864823423}
+    m_Position: {x: 260, y: 10, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: 5962364256627215431}
+    m_Position: {x: 490, y: 100, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: 3878165535309896639}
+    m_Position: {x: 490, y: -60, z: 0}
+  m_ChildStateMachines: []
+  m_AnyStateTransitions: []
+  m_EntryTransitions: []
+  m_StateMachineTransitions: {}
+  m_StateMachineBehaviours: []
+  m_AnyStatePosition: {x: 50, y: 20, z: 0}
+  m_EntryPosition: {x: 50, y: 120, z: 0}
+  m_ExitPosition: {x: 800, y: 120, z: 0}
+  m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
+  m_DefaultState: {fileID: -961187681864823423}
+--- !u!1107 &-4288694624114058638
+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: 533779715773965248}
+    m_Position: {x: 370, y: 200, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: 6530397968288135108}
+    m_Position: {x: -320, y: 110, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: 6213453891328339389}
+    m_Position: {x: -310, y: 210, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: 7224289074621895250}
+    m_Position: {x: 690, y: 120, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: -7946899203391831091}
+    m_Position: {x: 690, y: 220, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: -1898261574974550075}
+    m_Position: {x: 550, y: 350, z: 0}
+  m_ChildStateMachines:
+  - serializedVersion: 1
+    m_StateMachine: {fileID: -4310704879323197233}
+    m_Position: {x: 610, y: 0, z: 0}
+  - serializedVersion: 1
+    m_StateMachine: {fileID: 5585714919224228239}
+    m_Position: {x: 180, y: 390, z: 0}
+  - serializedVersion: 1
+    m_StateMachine: {fileID: 311128966509873703}
+    m_Position: {x: -260, y: 350, z: 0}
+  m_AnyStateTransitions:
+  - {fileID: 8206564768075581269}
+  - {fileID: 8331535787116983140}
+  m_EntryTransitions: []
+  m_StateMachineTransitions: {}
+  m_StateMachineBehaviours: []
+  m_AnyStatePosition: {x: 30, y: 50, z: 0}
+  m_EntryPosition: {x: 10, y: -100, z: 0}
+  m_ExitPosition: {x: 1080, y: 40, z: 0}
+  m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
+  m_DefaultState: {fileID: 533779715773965248}
+--- !u!1101 &-3982741430171642572
+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: die
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: -961187681864823423}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 2
+  m_TransitionOffset: 0
+  m_ExitTime: 0.1
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 2
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &-3026721099272024724
+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: hug
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: -1898261574974550075}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.5
+  m_TransitionOffset: 0
+  m_ExitTime: 0.1
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &-2314655101060605358
+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: Turn L
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 7224289074621895250}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.1
+  m_HasExitTime: 0
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 1
+  m_OrderedInterruption: 0
+  m_CanTransitionToSelf: 1
+--- !u!1102 &-1898261574974550075
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Hug
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: 3336733215047366127}
+  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: -5205147620392676281, guid: 1a349bfe663f8a848a567303e35c613a, type: 3}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1101 &-1189638604913042156
+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: 6741457069417949798}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.76
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1102 &-961187681864823423
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Start
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: 3669976908804504684}
+  - {fileID: 1034335760690249919}
+  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: 3858329934085553762, guid: 1a349bfe663f8a848a567303e35c613a, 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: HomeDogInteractController
+  serializedVersion: 5
+  m_AnimatorParameters:
+  - m_Name: isMoving
+    m_Type: 4
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  - m_Name: isBarking
+    m_Type: 4
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  - m_Name: isSitting
+    m_Type: 4
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  - m_Name: isLying
+    m_Type: 4
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  - m_Name: move
+    m_Type: 9
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  - m_Name: bark
+    m_Type: 9
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  - m_Name: lie
+    m_Type: 9
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  - m_Name: sit
+    m_Type: 9
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  - m_Name: activeIndex
+    m_Type: 3
+    m_DefaultFloat: 0
+    m_DefaultInt: 49
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  - m_Name: randomIndex
+    m_Type: 1
+    m_DefaultFloat: 0.2
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  - m_Name: moveSpeed
+    m_Type: 1
+    m_DefaultFloat: 0.75
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  - m_Name: hug
+    m_Type: 9
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  - m_Name: Turn L
+    m_Type: 9
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  - m_Name: Turn R
+    m_Type: 9
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  - m_Name: isDying
+    m_Type: 4
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  - m_Name: die
+    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: -4288694624114058638}
+    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!1107 &311128966509873703
+AnimatorStateMachine:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Sit
+  m_ChildStates:
+  - serializedVersion: 1
+    m_State: {fileID: -9176223217037370774}
+    m_Position: {x: 290, y: 90, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: 1340189334011553932}
+    m_Position: {x: 410, y: 0, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: 5770380076500164988}
+    m_Position: {x: 560, y: 80, z: 0}
+  m_ChildStateMachines: []
+  m_AnyStateTransitions: []
+  m_EntryTransitions: []
+  m_StateMachineTransitions: {}
+  m_StateMachineBehaviours: []
+  m_AnyStatePosition: {x: 50, y: 20, z: 0}
+  m_EntryPosition: {x: 50, y: 120, z: 0}
+  m_ExitPosition: {x: 800, y: 120, z: 0}
+  m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
+  m_DefaultState: {fileID: -9176223217037370774}
+--- !u!1102 &533779715773965248
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: base
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: -3982741430171642572}
+  - {fileID: 6783922572396881253}
+  - {fileID: -6420463359141894108}
+  - {fileID: 2207388671215494222}
+  - {fileID: -3026721099272024724}
+  - {fileID: -2314655101060605358}
+  - {fileID: -6130185709489123632}
+  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: 3858329934085553762, guid: 1a349bfe663f8a848a567303e35c613a, type: 3}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1101 &789484493647436366
+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: 533779715773965248}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.76
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &1034335760690249919
+AnimatorStateTransition:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: 
+  m_Conditions:
+  - m_ConditionMode: 4
+    m_ConditionEvent: randomIndex
+    m_EventTreshold: 0.5
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 5962364256627215431}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.1
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1102 &1340189334011553932
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Sit
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: 8560810817448496124}
+  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: -6085599395645213713, guid: 1a349bfe663f8a848a567303e35c613a, type: 3}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1101 &2207388671215494222
+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: lie
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 5934876067920876819}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.5
+  m_TransitionOffset: 0
+  m_ExitTime: 0.1
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &2591249761729929422
+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: 533779715773965248}
+  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 &2636955888886481397
+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: 1340189334011553932}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.8
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!114 &2985416124764183279
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 1e4dd880c6e1721428c1f436efba5f62, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!1101 &3020716009409247602
+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: 533779715773965248}
+  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 &3336733215047366127
+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: 533779715773965248}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.8
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &3669976908804504684
+AnimatorStateTransition:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: 
+  m_Conditions:
+  - m_ConditionMode: 3
+    m_ConditionEvent: randomIndex
+    m_EventTreshold: 0.5
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 3878165535309896639}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.1
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1102 &3878165535309896639
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Death L
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: 2591249761729929422}
+  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: -6194020875784599912, guid: 0faf4e66268a11e4d982d9a0163734ca, type: 3}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1107 &5585714919224228239
+AnimatorStateMachine:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Lie
+  m_ChildStates:
+  - serializedVersion: 1
+    m_State: {fileID: 5934876067920876819}
+    m_Position: {x: 359.58463, y: 145.58572, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: 6741457069417949798}
+    m_Position: {x: 530, y: 70, z: 0}
+  m_ChildStateMachines: []
+  m_AnyStateTransitions: []
+  m_EntryTransitions: []
+  m_StateMachineTransitions: {}
+  m_StateMachineBehaviours: []
+  m_AnyStatePosition: {x: 50, y: 20, z: 0}
+  m_EntryPosition: {x: 50, y: 120, z: 0}
+  m_ExitPosition: {x: 800, y: 120, z: 0}
+  m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
+  m_DefaultState: {fileID: 5934876067920876819}
+--- !u!1102 &5770380076500164988
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Exit
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: 789484493647436366}
+  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: 4013947355445762120, guid: 1a349bfe663f8a848a567303e35c613a, type: 3}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1102 &5934876067920876819
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Start
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: -1189638604913042156}
+  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: 3731281813466467205, guid: 0faf4e66268a11e4d982d9a0163734ca, type: 3}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1102 &5962364256627215431
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Death R
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: -6578774210054145230}
+  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: 8533346790026364448, guid: 0faf4e66268a11e4d982d9a0163734ca, type: 3}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1102 &6213453891328339389
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: move
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: 9147677112561107424}
+  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: 6465905941069671169}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!206 &6465905941069671169
+BlendTree:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: moveBlend
+  m_Childs:
+  - serializedVersion: 2
+    m_Motion: {fileID: -1948574594078671424, guid: 1a349bfe663f8a848a567303e35c613a, type: 3}
+    m_Threshold: 0
+    m_Position: {x: 0, y: 0}
+    m_TimeScale: 1
+    m_CycleOffset: 0
+    m_DirectBlendParameter: randomIndex
+    m_Mirror: 0
+  - serializedVersion: 2
+    m_Motion: {fileID: -5967951987811087257, guid: 1a349bfe663f8a848a567303e35c613a, type: 3}
+    m_Threshold: 0.5
+    m_Position: {x: 0, y: 0}
+    m_TimeScale: 1
+    m_CycleOffset: 0
+    m_DirectBlendParameter: randomIndex
+    m_Mirror: 0
+  - serializedVersion: 2
+    m_Motion: {fileID: -3410360182042820417, guid: 1a349bfe663f8a848a567303e35c613a, type: 3}
+    m_Threshold: 0.75
+    m_Position: {x: 0, y: 0}
+    m_TimeScale: 1
+    m_CycleOffset: 0
+    m_DirectBlendParameter: randomIndex
+    m_Mirror: 0
+  - serializedVersion: 2
+    m_Motion: {fileID: -2754839599457024912, guid: 1a349bfe663f8a848a567303e35c613a, type: 3}
+    m_Threshold: 1
+    m_Position: {x: 0, y: 0}
+    m_TimeScale: 1
+    m_CycleOffset: 0
+    m_DirectBlendParameter: randomIndex
+    m_Mirror: 0
+  m_BlendParameter: moveSpeed
+  m_BlendParameterY: randomIndex
+  m_MinThreshold: 0
+  m_MaxThreshold: 1
+  m_UseAutomaticThresholds: 0
+  m_NormalizedBlendValues: 0
+  m_BlendType: 0
+--- !u!1102 &6530397968288135108
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: bark
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: 7198625844345626924}
+  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: 1863384340464161029, guid: 1a349bfe663f8a848a567303e35c613a, type: 3}
+  m_Tag: 
+  m_SpeedParameter: randomIndex
+  m_MirrorParameter: isMoving
+  m_CycleOffsetParameter: randomIndex
+  m_TimeParameter: 
+--- !u!1102 &6741457069417949798
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Lie
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: -5764613439783771717}
+  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: 3649402138341152462, guid: 0faf4e66268a11e4d982d9a0163734ca, type: 3}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1101 &6783922572396881253
+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: bark
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 6530397968288135108}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.95
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &7198625844345626924
+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: 533779715773965248}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.94545454
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1102 &7224289074621895250
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: L Turn
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: 3020716009409247602}
+  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: 3876583498472119986, guid: 1a349bfe663f8a848a567303e35c613a, type: 3}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1101 &8206564768075581269
+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: move
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 6213453891328339389}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.3694327
+  m_TransitionOffset: 0
+  m_ExitTime: 2.8625694e-11
+  m_HasExitTime: 0
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &8331535787116983140
+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: lie
+    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.33827028
+  m_TransitionOffset: 0
+  m_ExitTime: 0
+  m_HasExitTime: 0
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &8560810817448496124
+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: isSitting
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 5770380076500164988}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 1
+  m_TransitionOffset: 0
+  m_ExitTime: 0.3
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &9147677112561107424
+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: isMoving
+    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.58529466
+  m_TransitionOffset: 0.78666335
+  m_ExitTime: 0
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1

+ 8 - 0
Assets/Resources/Dog/AnimatorController/shibaInu/HomeDogInteractController.controller.meta

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

+ 24 - 12
Assets/Resources/DogSelector/DogSelectorController.cs

@@ -1,4 +1,4 @@
-using System;
+锘縰sing System;
 using System.Collections;
 using System.Collections.Generic;
 using Unity.VisualScripting;
@@ -6,8 +6,8 @@ using UnityEngine;
 using UnityEngine.SceneManagement;
 using UnityEngine.UIElements;
 
-/* 本代码用来在某些场景中动态切换选择的狗
- * 本代码挂载在 Dog Selector pre feb 下
+/* 鏈�唬鐮佺敤鏉ュ湪鏌愪簺鍦烘櫙涓�姩鎬佸垏鎹㈤€夋嫨鐨勭嫍
+ * 鏈�唬鐮佹寕杞藉湪 Dog Selector pre feb 涓�
  */
 
 public class DogSelectorController : MonoBehaviour
@@ -21,29 +21,41 @@ public class DogSelectorController : MonoBehaviour
         dogIcon = root.Q<VisualElement>("dogMenu").Q<VisualElement>("dogIcon");
         dogList = root.Q<VisualElement>("dogMenu").Q<VisualElement>("dogList");
 
-        StartCoroutine(DogNameInit());      // 初始化狗的名字,这里当菜单重新激活后再次加载
+        StartCoroutine(DogNameInit());      // 鍒濆�鍖栫嫍鐨勫悕瀛楋紝杩欓噷褰撹彍鍗曢噸鏂版縺娲诲悗鍐嶆�鍔犺浇
 
         dogIcon.RegisterCallback<ClickEvent>(e => DogIconClick(e));
 
+        // 濡傛灉鐢ㄦ埛鎷ユ湁鐙楃殑鏁伴噺=1锛屽氨涓嶆樉绀�
+        if (UserProperty.dogs.Count == 1)
+        {
+            dogIcon.visible = false;
+        }
+
+        // 濡傛灉鏄痯layground鍦烘櫙锛岃皟鏁寸嫍鐨勫悕瀛楃殑浣嶇疆
+        if (SceneManager.GetActiveScene().name == "Playground")
+        {
+            var dogMenu = root.Q<VisualElement>("dogMenu");
+            dogMenu.style.top = 256;
+        }
     }
 
     // Update is called once per frame
     //void Update()
     //{
-        
+
     //}
 
-    // 初始化狗的名字
+    // 鍒濆�鍖栫嫍鐨勫悕瀛�
     IEnumerator DogNameInit()
     {
         yield return null;
-        dogNames.Clear();       // 清空Label列表
-        foreach (Label child in dogList.Children())     // 寻找Label元素加入列表
+        dogNames.Clear();       // 娓呯┖Label鍒楄〃
+        foreach (Label child in dogList.Children())     // 瀵绘壘Label鍏冪礌鍔犲叆鍒楄〃
         {
             dogNames.Add(child);
         }
 
-        // 注入狗的名字,最多注入3只狗
+        // 娉ㄥ叆鐙楃殑鍚嶅瓧锛屾渶澶氭敞鍏�3鍙�嫍
         for (int i = 0; i < Math.Min(UserProperty.dogs.Count, 3); i++)
         {
             int index = i;
@@ -67,14 +79,14 @@ public class DogSelectorController : MonoBehaviour
 
     }
 
-    // 点击狗的名字时候处理,重新读取当前场景
+    // 鐐瑰嚮鐙楃殑鍚嶅瓧鏃跺€欏�鐞嗭紝閲嶆柊璇诲彇褰撳墠鍦烘櫙
     void DogNameClick(ClickEvent e, int index)
     {
         GameData.focusDog = index;
         if (dogList.visible == true) { dogList.visible = false; }
-        // 获取当前场景的名称
+        // 鑾峰彇褰撳墠鍦烘櫙鐨勫悕绉�
         string currentSceneName = SceneManager.GetActiveScene().name;
-        // 重新加载当前场景
+        // 閲嶆柊鍔犺浇褰撳墠鍦烘櫙
         SceneManager.LoadScene(currentSceneName);
     }
 }

+ 7 - 2
Assets/Resources/Shopping/ShoppingController.cs

@@ -245,6 +245,7 @@ public class ShoppingController : MonoBehaviour
         
         Debug.Log("msg yes clicked");
         msgRoot.visible = false;
+        // 检测用户金币是否足够
         if (UserProperty.coin > int.Parse(selectedItemPrice))
         {
             PurchaseItemRequest(selectedItemId);
@@ -279,7 +280,6 @@ public class ShoppingController : MonoBehaviour
         WWWForm form = new();
         form.AddField("user_id", UserProperty.userId);
         form.AddField("item_id", itemId);
-        form.AddField("date_time", DateTime.Now.ToString());        // 可选项,以服务器时间为准
         form.AddField("qty", 1);
         StartCoroutine(WebController.PostRequest(url, form, callback: PurchaseItemCallback));
     }
@@ -292,13 +292,18 @@ public class ShoppingController : MonoBehaviour
             HomeSoundEffectController.Instance.PlaySoundEffect(3);
 
             // 重新写入用户数据
-            var userInfo = JsonConvert.DeserializeObject<Dictionary<string, string>>(data["user_info"].ToString());
+            string userInfo = data["user_info"].ToString();
             UserProperty.FreshUserInfo(userInfo);
 
             // TODO 然后重新写入道具数据
             UserProperty.food.Clear();
             UserProperty.toy.Clear();
             UserProperty.other.Clear();
+
+            // 弹出窗户提示购买成功
+            string msg = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "shoppingUI", "message", "purchase_success", EnviromentSetting.languageCode });
+            msg = msg.Replace("<<item_name>>", selectedItemDesc);
+            MessageBoxController.ShowMessage(msg);
         }
         else
         {

+ 1 - 1
Assets/Resources/VoiceAndManu/MenuController.cs

@@ -85,7 +85,7 @@ public class MenuController : MonoBehaviour
 
     private void Start()
     {
-        DogNameInit();      // 初始化狗的名字,首次加载
+        // DogNameInit();      // 初始化狗的名字,首次加载
     }
 
     private void OnDisable()

+ 1 - 23
Assets/Resources/VoiceAndManu/VoiceAndMenu.prefab

@@ -12,7 +12,6 @@ GameObject:
   - component: {fileID: 1349988398253066161}
   - component: {fileID: 3964713078886633438}
   - component: {fileID: 2824888340937387283}
-  - component: {fileID: 3982022933525629195}
   m_Layer: 5
   m_Name: UIDocument
   m_TagString: Untagged
@@ -78,28 +77,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 0f7f8759cd8317649a1c345f218977fb, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
---- !u!95 &3982022933525629195
-Animator:
-  serializedVersion: 7
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 648218781261652396}
-  m_Enabled: 1
-  m_Avatar: {fileID: 0}
-  m_Controller: {fileID: 0}
-  m_CullingMode: 0
-  m_UpdateMode: 0
-  m_ApplyRootMotion: 0
-  m_LinearVelocityBlending: 0
-  m_StabilizeFeet: 0
-  m_AnimatePhysics: 0
-  m_WarningMessage: 
-  m_HasTransformHierarchy: 1
-  m_AllowConstantClipSamplingOptimization: 1
-  m_KeepAnimatorStateOnDisable: 0
-  m_WriteDefaultValuesOnDisable: 0
+  isCommandMode: 0
 --- !u!1 &7983087457938491336
 GameObject:
   m_ObjectHideFlags: 0

+ 36 - 6
Assets/Resources/VoiceAndManu/VoiceController.cs

@@ -17,6 +17,7 @@ public class VoiceController : MonoBehaviour
     private AudioClip audioClip;    // 保存的音频
     private bool isRecording = false;
     private string filePathWav, filePathZip; 
+    public bool isCommandMode = false;       // 是否在命令对话模式下,是的话只显示语音按钮
 
 
     void OnEnable()
@@ -34,10 +35,28 @@ public class VoiceController : MonoBehaviour
     }
 
     // Update is called once per frame
-    //void Update()
-    //{
-        
-    //}
+    void Update()
+    {
+        VoiceOnlyCheck();
+    }
+
+    // 只显示语音菜单
+    public void VoiceOnlyCheck()
+    {
+        var root = GetComponent<UIDocument>().rootVisualElement;
+        var menuArea = root.Q<VisualElement>("menuArea");
+        var dogMenu = root.Q<VisualElement>("dogMenu");
+        if (isCommandMode)
+        {
+            menuArea.style.display = DisplayStyle.None;
+            dogMenu.style.display = DisplayStyle.None;
+        }
+        else
+        {
+            menuArea.style.display = DisplayStyle.Flex;
+            dogMenu.style.display = DisplayStyle.Flex;
+        }
+    }
 
     IEnumerator WaveFormAnimation()
     {
@@ -103,7 +122,7 @@ public class VoiceController : MonoBehaviour
 
         // 设置录音文件名和路径
         filePathWav = Path.Combine(Application.persistentDataPath, "voiceCommand.wav");
-        filePathZip = Path.Combine(Application.persistentDataPath, "voiceCommand.mp3");
+        filePathZip = Path.Combine(Application.persistentDataPath, "voiceCommand.zip");
 
         // 检测目录是否存在不存在就创建
         string directoryPath = Path.GetDirectoryName(filePathWav);
@@ -137,10 +156,21 @@ public class VoiceController : MonoBehaviour
         isRecording = false;
         Debug.Log("停止录音...");
 
-        // 保存录音为WAV文件
+        // 保存录音为WAV文件和ZIP文件
         SaveWavFile(filePathWav, audioClip);
         Debug.Log("录音已保存到: " + filePathWav);
         ZipFileController.ZipFile(filePathWav, filePathZip);
+
+        if (isCommandMode)
+        {
+            // 非ommand模式,调用Home Controller Command的方法上传音频文件
+            HomeController.Instance.VoiceCommandRequest(filePathZip);
+        }
+        else
+        {
+            // 非command模式,调用Home Controller Call的方法上传音频文件
+            HomeController.Instance.VoiceCallRequest(filePathZip);
+        }
     }
 
     // 保存音频文件wav

+ 9 - 8
Assets/Resources/Warehouse/ItemUseController.cs

@@ -44,14 +44,16 @@ public class ItemUseController : ScriptableObject
         // 在Home场景使用道具调用_itemUseId来启动道具使用
         if (SceneManager.GetActiveScene().name == "Home")
         {
+            var bowls = GameObject.Find("Bowls");
+            GameObject targetBowl = null;
             // 消费食物类
             if (foodBowlItems.Contains(itemId))
             {
-                var bowls = GameObject.Find("Bowls");
-                var targetBowl = bowls.transform.Find("Bowl_food").gameObject;
+                
+                targetBowl = bowls.transform.Find("Bowl_food").gameObject;
                 targetBowl.transform.localPosition = CalcBowlShowLoc();
-                var food = targetBowl.transform.Find("Food").gameObject;
-                food.SetActive(true);
+                //var food = targetBowl.transform.Find("Food").gameObject;
+                //food.SetActive(true);
 
                 foreach (var dogInScene in HomeController.dogsInScene)
                 {
@@ -64,11 +66,10 @@ public class ItemUseController : ScriptableObject
             // 消费水牛奶等
             if (waterBowlItems.Contains(itemId))
             {
-                var bowls = GameObject.Find("Bowls");
-                var targetBowl = bowls.transform.Find("Bowl_water").gameObject;
+                targetBowl = bowls.transform.Find("Bowl_water").gameObject;
                 targetBowl.transform.localPosition = CalcBowlShowLoc();
-                var water = targetBowl.transform.Find("Water").gameObject;
-                water.SetActive(true);
+                //var water = targetBowl.transform.Find("Water").gameObject;
+                //water.SetActive(true);
 
                 foreach (var dogInScene in HomeController.dogsInScene)
                 {

+ 0 - 5
Assets/Resources/Warehouse/Warehouse.prefab

@@ -64,11 +64,6 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 9a1f7b9f68520d84d8698b0beb897dea, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  audioSource: {fileID: 0}
-  soundEffect:
-  - {fileID: 8300000, guid: 6b815b2c1ae63034a911cbffd00c3334, type: 3}
-  - {fileID: 8300000, guid: 6e2488ef3c449b7429a08dd5f17d02f4, type: 3}
-  - {fileID: 8300000, guid: 2734284e366ce1b46b0c68d77c7cc6cc, type: 3}
 --- !u!1 &3802863874315455982
 GameObject:
   m_ObjectHideFlags: 0

文件差異過大導致無法顯示
+ 4886 - 204
Assets/Scenes/Home.unity


+ 1 - 1
Assets/Scenes/Home.meta → Assets/Scenes/Home_Profiles.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: a09e8a68b8b4b7e418d53a7b753011ca
+guid: 34045b7de6c158149bf5c1d5b6e5f379
 folderAsset: yes
 DefaultImporter:
   externalObjects: {}

+ 8 - 0
Assets/Scenes/Home_Profiles/Particles.meta

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

+ 86 - 0
Assets/Scenes/Home_Profiles/Particles/Heart.mat

@@ -0,0 +1,86 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+  serializedVersion: 8
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Heart
+  m_Shader: {fileID: 200, guid: 0000000000000000f000000000000000, type: 0}
+  m_Parent: {fileID: 0}
+  m_ModifiedSerializedProperties: 0
+  m_ValidKeywords: []
+  m_InvalidKeywords: []
+  m_LightmapFlags: 4
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_LockedProperties: 
+  m_SavedProperties:
+    serializedVersion: 3
+    m_TexEnvs:
+    - _BumpMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailAlbedoMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailMask:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailNormalMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _EmissionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _MainTex:
+        m_Texture: {fileID: 2800000, guid: 94bfb2e262c7382439ab108e4fb35fff, type: 3}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _MetallicGlossMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _OcclusionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _ParallaxMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    m_Ints: []
+    m_Floats:
+    - _BumpScale: 1
+    - _Cutoff: 0.5
+    - _DetailNormalMapScale: 1
+    - _DstBlend: 0
+    - _GlossMapScale: 1
+    - _Glossiness: 0.5
+    - _GlossyReflections: 1
+    - _InvFade: 1
+    - _Metallic: 0
+    - _Mode: 0
+    - _OcclusionStrength: 1
+    - _Parallax: 0.02
+    - _SmoothnessTextureChannel: 0
+    - _SpecularHighlights: 1
+    - _SrcBlend: 1
+    - _UVSec: 0
+    - _ZWrite: 1
+    m_Colors:
+    - _Color: {r: 1, g: 1, b: 1, a: 1}
+    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+    - _TintColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
+  m_BuildTextureStacks: []
+  m_AllowLocking: 1

+ 8 - 0
Assets/Scenes/Home_Profiles/Particles/Heart.mat.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ea37ac0f31bfccc448ab5755fac53597
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 2100000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

二進制
Assets/Scenes/Home_Profiles/Particles/heart.png


+ 1 - 1
Assets/Pictures/icon1.png.meta → Assets/Scenes/Home_Profiles/Particles/heart.png.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 8c6e3cbd473e6f1418f96683a389737a
+guid: 94bfb2e262c7382439ab108e4fb35fff
 TextureImporter:
   internalIDToNameTable: []
   externalObjects: {}

+ 44 - 0
Assets/Scenes/Home_Profiles/VCam Dog Profile.asset

@@ -0,0 +1,44 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 8e6292b2c06870d4495f009f912b9600, type: 3}
+  m_Name: VCam Dog Profile
+  m_EditorClassIdentifier: 
+  settings:
+  - {fileID: 80550502725419041}
+--- !u!114 &80550502725419041
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 556797029e73b2347956b6579e77e05b, type: 3}
+  m_Name: DepthOfField
+  m_EditorClassIdentifier: 
+  active: 1
+  enabled:
+    overrideState: 1
+    value: 1
+  focusDistance:
+    overrideState: 1
+    value: 2
+  aperture:
+    overrideState: 1
+    value: 4
+  focalLength:
+    overrideState: 1
+    value: 200
+  kernelSize:
+    overrideState: 0
+    value: 1

+ 8 - 0
Assets/Scenes/Home_Profiles/VCam Dog Profile.asset.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f1071fa168207f74aa4541528a7d1651
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 105 - 1
Assets/Scenes/Playground.unity

@@ -149,6 +149,7 @@ Transform:
   m_ConstrainProportionsScale: 0
   m_Children:
   - {fileID: 1858575946}
+  - {fileID: 969376507}
   m_Father: {fileID: 0}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &70159518
@@ -350,6 +351,7 @@ MonoBehaviour:
     sex: 1
     breed: shibaInu
     skin: black
+    adoption: home
     satiety: 15
     happiness: 50
     stamina: 29
@@ -1142,6 +1144,108 @@ Transform:
   m_Children: []
   m_Father: {fileID: 0}
   m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!1001 &969376506
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 17225207}
+    m_Modifications:
+    - target: {fileID: 4291604834382066907, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+      propertyPath: m_Name
+      value: Dog Selector
+      objectReference: {fileID: 0}
+    - target: {fileID: 4839304844320078311, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+      propertyPath: m_Pivot.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4839304844320078311, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+      propertyPath: m_Pivot.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4839304844320078311, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4839304844320078311, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4839304844320078311, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4839304844320078311, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4839304844320078311, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4839304844320078311, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4839304844320078311, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4839304844320078311, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4839304844320078311, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4839304844320078311, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 4839304844320078311, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4839304844320078311, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4839304844320078311, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4839304844320078311, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4839304844320078311, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4839304844320078311, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4839304844320078311, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4839304844320078311, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+--- !u!224 &969376507 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 4839304844320078311, guid: 28a996e3a2a773644bc31d9a2dc6a9b8, type: 3}
+  m_PrefabInstance: {fileID: 969376506}
+  m_PrefabAsset: {fileID: 0}
 --- !u!1 &1014406022
 GameObject:
   m_ObjectHideFlags: 0
@@ -1598,7 +1702,7 @@ GameObject:
   - component: {fileID: 1405097794}
   - component: {fileID: 1405097797}
   - component: {fileID: 1405097798}
-  m_Layer: 0
+  m_Layer: 6
   m_Name: Main Camera
   m_TagString: MainCamera
   m_Icon: {fileID: 0}

+ 2 - 3
Assets/Scripts/Bathroom/BathroomController.cs

@@ -16,8 +16,8 @@ using static UnityEngine.ParticleSystem;
 public class BathroomController : MonoBehaviour
 {
     public Texture2D nozzleTexture, spongeTexture;      // 对应鼠标图像喷头和海绵
-    private CursorMode cursorMode = CursorMode.Auto; // 鼠标模式
-    private Vector2 cursorHotSpot = new Vector2(-1f, -1f); // 鼠标图标的点击点位置
+    // private CursorMode cursorMode = CursorMode.Auto; // 鼠标模式
+    // private Vector2 cursorHotSpot = new Vector2(-1f, -1f); // 鼠标图标的点击点位置
     private Vector2 previousPointerPosition = Vector2.zero;     // 前一帧鼠标位置
     private Texture2D activatedCursorTexture = null;
     private float bubbleTotalTime;       // 上肥皂的合计时间
@@ -226,7 +226,6 @@ public class BathroomController : MonoBehaviour
         form.AddField("user_id", UserProperty.userId);
         form.AddField("item_id", GameData.bathItemId);
         form.AddField("dog_list", dogsJson);
-        form.AddField("date_time", DateTime.Now.ToString());        // 可选项,以服务器时间为准
         StartCoroutine(WebController.PostRequest(url, form, callback: BathFinishReqCallback));
     }
 

+ 28 - 23
Assets/Scripts/Develop Script/TestSetup.cs

@@ -10,14 +10,14 @@ public class TestSetup : MonoBehaviour
         if (SceneManager.GetActiveScene().name == "Bathroom")
         {
             // 初始化狗数据用于测试
-            DogProperty puppy = new DogProperty();
-            puppy.d_id = "043341045";
-            UserProperty.dogs.Clear();
-            UserProperty.dogs.Add(puppy);
-            UserProperty.userId = "JTYNZP9O";
-            EnviromentSetting.accessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiSlRZTlpQOU8iLCJleHAiOjE3NDI0Nzg5OTB9._br_Yd7xn6m2Nc078MEn3T7r-B7IYEjhVJY-H46Ob5E";
-            EnviromentSetting.accessTokenReceivedTime = DateTime.Now;
-            GameData.bathItemId = "other_00001";
+            //DogProperty puppy = new DogProperty();
+            //puppy.d_id = "043341045";
+            //UserProperty.dogs.Clear();
+            //UserProperty.dogs.Add(puppy);
+            //UserProperty.userId = "JTYNZP9O";
+            //EnviromentSetting.accessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiSlRZTlpQOU8iLCJleHAiOjE3NDI0Nzg5OTB9._br_Yd7xn6m2Nc078MEn3T7r-B7IYEjhVJY-H46Ob5E";
+            //EnviromentSetting.accessTokenReceivedTime = DateTime.Now;
+            //GameData.bathItemId = "other_00001";
         }
         if (SceneManager.GetActiveScene().name == "Home")
         {
@@ -25,16 +25,17 @@ public class TestSetup : MonoBehaviour
             //DogProperty puppy = new DogProperty();
             //UserProperty.dogs.Clear();
             //UserProperty.dogs.Add(puppy);
-            UserProperty.food.Clear();
-            UserProperty.toy.Clear();
-            UserProperty.other.Clear();
-            UserProperty.food.Add("food_00001", 10);
-            UserProperty.food.Add("food_00002", 20);
-            UserProperty.food.Add("food_00003", 30);
-            UserProperty.toy.Add("toy_00001", 1);
-            UserProperty.food.Add("water_00001", 999);
-            UserProperty.food.Add("water_00002", 33);
-            UserProperty.other.Add("other_00001", 3);
+
+            //UserProperty.food.Clear();
+            //UserProperty.toy.Clear();
+            //UserProperty.other.Clear();
+            //UserProperty.food.Add("food_00001", 10);
+            //UserProperty.food.Add("food_00002", 20);
+            //UserProperty.food.Add("food_00003", 30);
+            //UserProperty.toy.Add("toy_00001", 1);
+            //UserProperty.food.Add("water_00001", 999);
+            //UserProperty.food.Add("water_00002", 33);
+            //UserProperty.other.Add("other_00001", 3);
         }
 
         if (SceneManager.GetActiveScene().name == "Playground")
@@ -52,6 +53,10 @@ public class TestSetup : MonoBehaviour
             //UserProperty.food.Add("water_00001", 999);
             //UserProperty.food.Add("water_00002", 33);
 
+            //UserProperty.userId = "JTYNZP9O";
+            //EnviromentSetting.accessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiSlRZTlpQOU8iLCJleHAiOjE3NDI0Nzg5OTB9._br_Yd7xn6m2Nc078MEn3T7r-B7IYEjhVJY-H46Ob5E";
+            //EnviromentSetting.accessTokenReceivedTime = DateTime.Now;
+
         }
 
 
@@ -66,12 +71,12 @@ public class TestSetup : MonoBehaviour
     {
         if (SceneManager.GetActiveScene().name == "Login")
         {
-            // PlayerPrefs.SetString("LoginToken", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiSlRZTlpQOU8iLCJleHAiOjE3NTY1NDUxNzd9.oQgjY_6ZHJVYaYxh2b_LMIkUaCJ9FX8UpxpHOt_yLg8");
-            // DateTime now = DateTime.Now;
-            // DateTime oneHourAgo = now.AddHours(-1);
-            // PlayerPrefs.SetString("LoginTokenTime", oneHourAgo.ToString());
+            PlayerPrefs.SetString("LoginToken", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiSlRZTlpQOU8iLCJleHAiOjE3NTY1NDUxNzd9.oQgjY_6ZHJVYaYxh2b_LMIkUaCJ9FX8UpxpHOt_yLg8");
+            DateTime now = DateTime.Now;
+            DateTime oneHourAgo = now.AddHours(-1);
+            PlayerPrefs.SetString("LoginTokenTime", oneHourAgo.ToString());
 
-            PlayerPrefs.DeleteAll();
+            //PlayerPrefs.DeleteAll();
             EnviromentSetting.languageCode = "en";
         }
 

+ 3 - 14
Assets/Scripts/Functions/WebController.cs

@@ -36,13 +36,6 @@ public class WebController : MonoBehaviour {
         {
             accessTokenReq = false;
         }
-        //foreach (string whiteUrl in EnviromentSetting.accessTokenWhiteList)
-        //{
-        //    if (url == whiteUrl)
-        //    {
-        //        accessTokenReq = false;
-        //    }
-        //}
 
         // 添加access token
         if (accessTokenReq) 
@@ -59,13 +52,6 @@ public class WebController : MonoBehaviour {
                 wwwForm.AddField("access_token", EnviromentSetting.accessToken);
             }
         }
-        
-
-        // 添加表单字段
-        //foreach (var item in postData)
-        //{
-        //    form.AddField(item.Key, item.Value);
-        //}
 
         // 添加文件
         if (filePath != null)
@@ -73,6 +59,9 @@ public class WebController : MonoBehaviour {
             byte[] fileData = System.IO.File.ReadAllBytes(filePath);
             wwwForm.AddBinaryData(Path.GetFileName(filePath), fileData);
         }
+
+        wwwForm.AddField("date_time", DateTime.Now.ToString());        // 可选项,以服务器时间为准
+
         // 创建 UnityWebRequest 对象
         url = EnviromentSetting.serverIp + url;
         using (UnityWebRequest request = UnityWebRequest.Post(url, wwwForm))

+ 6 - 6
Assets/Scripts/GameControllers/GameData.cs

@@ -1,11 +1,11 @@
-/* 存放游戏运行中一些保存的数据
+锘�/* 瀛樻斁娓告垙杩愯�涓�竴浜涗繚瀛樼殑鏁版嵁
  */
 
 public static class GameData
 {
-    public static string subScene;      // 用于指定子场景用
-    public static int focusDog = 0;     // 游戏中目前玩家主要玩的狗
-    public static int homeCamFocusDog = 100;      // Home场景下,摄像机聚焦的狗。100表示不聚焦任何的狗
-    public static string playedToy = string.Empty;        // 用于暂存游戏中使用的玩具
-    public static string bathItemId = string.Empty;        // 用于暂存游戏中使用的玩具
+    public static string subScene;      // 鐢ㄤ簬鎸囧畾瀛愬満鏅�敤
+    public static int focusDog = 0;     // 娓告垙涓�洰鍓嶇帺瀹朵富瑕佺帺鐨勭嫍
+    public static int homeCamFocusDog = 100;      // Home鍦烘櫙涓嬶紝鎽勫儚鏈鸿仛鐒︾殑鐙椼€�100琛ㄧず涓嶈仛鐒︿换浣曠殑鐙�
+    public static string playedToy = string.Empty;        // 鐢ㄤ簬鏆傚瓨娓告垙涓�娇鐢ㄧ殑鐜╁叿
+    public static string bathItemId = string.Empty;        // 鐢ㄤ簬鏆傚瓨娓告垙涓�娇鐢ㄧ殑鐜╁叿
 }

+ 2 - 2
Assets/Scripts/GameControllers/GameTool.cs

@@ -1,10 +1,10 @@
-using Newtonsoft.Json;
+锘縰sing Newtonsoft.Json;
 using System.Collections.Generic;
 using System.Text.RegularExpressions;
 
 public static class GameTool
 {
-    //用于获取多层级Dictionary中的value
+    //鐢ㄤ簬鑾峰彇澶氬眰绾�ictionary涓�殑value
     public static string GetValueAtPath(Dictionary<string, object> root, string[] path)
     {
         Dictionary<string, object> current = root;

+ 16 - 17
Assets/Scripts/GameControllers/UserProperty.cs

@@ -12,7 +12,7 @@ using UnityEngine;
 public static class UserProperty
 {
     // Start is called before the first frame update
-    public static string userId;
+    public static string userId = "JTYNZP9O";
     public static string name = "任天堂";
     public static int coin = 1005;
     public static string email, mobile, level;
@@ -39,10 +39,10 @@ public static class UserProperty
     }
 
     // 更新用户信息
-    public static void FreshUserInfo(Dictionary<string, string> userInfo)
+    public static void FreshUserInfo(string userInfoJson)
     {
-        //UserProperty.userId = userInfo["userId"];
-        UserProperty.name = userInfo["name"];
+        Dictionary<string, string> userInfo = JsonConvert.DeserializeObject<Dictionary<string, string>>(userInfoJson);
+        UserProperty.name = userInfo["user_name"];
         UserProperty.coin = int.Parse(userInfo["coin"]);
         UserProperty.email = userInfo["email"];
         UserProperty.mobile = userInfo["mobile"];
@@ -57,23 +57,21 @@ public static class UserProperty
         UserProperty.food.Clear();
         UserProperty.toy.Clear();
         UserProperty.other.Clear();
-        Dictionary<string, object> items = JsonConvert.DeserializeObject<Dictionary<string, object>>(itemsJson);
-        Dictionary<string, object> foods = JsonConvert.DeserializeObject<Dictionary<string, object>>(items["food"].ToString());
-        Dictionary<string, object> toys = JsonConvert.DeserializeObject<Dictionary<string, object>>(items["toy"].ToString());
-        Dictionary<string, object> others = JsonConvert.DeserializeObject<Dictionary<string, object>>(items["other"].ToString());
+        // 保存道具数据
+        Dictionary<string, object> props = JsonConvert.DeserializeObject<Dictionary<string, object>>(itemsJson);
+        string tempFood = "{\"food_00001\":10,\"food_00002\":99}";
+        string tempToy = "{\"toy_00001\":10}";
+        string tempOther = "{\"other_00001\":10}";
+        Dictionary<string, int> foods = JsonConvert.DeserializeObject<Dictionary<string, int>>(tempFood);
+        Dictionary<string, int> toys = JsonConvert.DeserializeObject<Dictionary<string, int>>(tempToy);
+        Dictionary<string, int> others = JsonConvert.DeserializeObject<Dictionary<string, int>>(tempOther);
 
         foreach (var food in foods)
-        {
-            UserProperty.food.Add(food.Key, int.Parse(food.Value.ToString()));
-        }
+            UserProperty.food.Add(food.Key, food.Value);
         foreach (var toy in toys)
-        {
-            UserProperty.toy.Add(toy.Key, int.Parse(toy.Value.ToString()));
-        }
+            UserProperty.toy.Add(toy.Key, toy.Value);
         foreach (var other in others)
-        {
-            UserProperty.other.Add(other.Key, int.Parse(other.Value.ToString()));
-        }
+            UserProperty.other.Add(other.Key, other.Value);
     }
 
     // 更新用户名下狗的信息
@@ -86,6 +84,7 @@ public static class UserProperty
             UserProperty.dogs.Add(dog);
         }
     }
+
 }
 
 // 待删除代码,废弃

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

@@ -9,14 +9,14 @@ using UnityEngine;
 public class BowlColliderController : MonoBehaviour
 {
     // Start is called once before the first execution of Update after the MonoBehaviour is created
-    private GameObject bowls, bowlFood, bowlWater;
+    //private GameObject bowls, bowlFood, bowlWater;
     private GameObject thisObject;
     void OnEnable()
     {
-        bowls = GameObject.Find("Bowls");
+        //bowls = GameObject.Find("Bowls");
         thisObject = this.gameObject;
-        bowlFood = bowls.transform.Find("Bowl_food").gameObject;
-        bowlWater = bowls.transform.Find("Bowl_water").gameObject;
+        //bowlFood = bowls.transform.Find("Bowl_food").gameObject;
+        //bowlWater = bowls.transform.Find("Bowl_water").gameObject;
     }
 
     // Update is called once per frame

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

@@ -0,0 +1,393 @@
+using System;
+using System.Collections;
+using UnityEngine;
+using UnityEngine.Rendering.PostProcessing;
+
+/* 本类用于管理场景中所有狗的状态包括动画状态,随机数分配等
+ */
+
+//[CreateAssetMenu(fileName = "DogInScene", menuName = "Scriptable Objects/DogInScene")]
+public class DogInScene : ScriptableObject
+{
+    
+//}
+
+
+//public class DogInScene
+//{
+    //通用参数段
+    public DogProperty dogProperty;
+    public GameObject gameObject { set; get; }
+    public Animator animator;
+    private Vector3 moveToLocation;
+    public float moveSpeed;     // 用来控制狗的移动速度 0 0.5跑,0.75快跑,1跳
+    public string dogState;       // 狗的状态代码分类通道,包括三大类使用道具(itemConsume),闲置(idle),和主人交互(interact)等
+
+    // 喝水吃饭参数段
+    public DateTime drinkStartTime, eatStartTime;      // 记录吃喝开始时间
+    public bool itemConsumeProgress=false;     // 是否在吃和喝的进程中。如果是的话,跳过常规动画检测
+    public bool isMovingToBowl;
+    
+
+
+    // 随机动作参数段
+    public int randomFactor;
+    public DateTime animationStartTime;     // 记录上一个动画开始时间的,每个随机动作间隔至少30秒
+    private int activeIndex;      // 动物的活动指数
+    public bool isMoving;       // 动物正在移动,避免其他随机动作发生
+    public bool isSleeping;       // 动物正在正在睡觉,避免触发其他动画
+
+    // 固定参数
+    private const float moveSpeedAdj = 0.025f;
+
+    // interact相关的参数
+    public DateTime interactLastUpdate;     // 上次交互指令时间
+    private bool isMovingToPlayer;      // 是否在向玩家移动
+
+
+    #region 通用函数段
+    public void SetGameObject(GameObject gameObject)
+    {
+        this.gameObject = gameObject;
+        this.animator = gameObject.GetComponent<Animator>();
+        this.randomFactor = UnityEngine.Random.Range(0, 51);        // 生成一个随机整数(0 到 50 之间),用于时间校验
+        Debug.Log(this.gameObject.name + "random factor is:" + randomFactor);
+    }
+
+
+    public DogInScene(DogProperty property)
+    {
+        this.dogProperty = property;
+        this.activeIndex = (int)Math.Round((property.liveliness + property.intimate) * UnityEngine.Random.Range(0.3f, 0.7f));
+        this.isMoving = false;
+    }
+    #endregion
+
+
+    #region interact交互函数段
+    // 启动交互行为准备过程
+    public void SetupInteract()
+    {
+        // 加载Interact animator controller,避免过于复杂的Animator Controller
+        Animator animator = gameObject.GetComponent<Animator>();
+        RuntimeAnimatorController animatorController = Resources.Load<RuntimeAnimatorController>("Dog/AnimatorController/shibaInu/HomeDogInteractController");
+        if (dogProperty.breed == "shibaInu") { animatorController = Resources.Load<RuntimeAnimatorController>("Dog/AnimatorController/shibaInu/HomeDogInteractController"); }
+        animator.runtimeAnimatorController = animatorController;
+
+        this.dogState = "interact";
+        this.interactLastUpdate = DateTime.Now;
+        this.moveToLocation = new Vector3(0f, 0f, -4.75f);
+
+        this.isMovingToPlayer = true;
+        MovetoPlayer();
+    }
+    public void MovetoPlayer()
+    {
+
+        // 如果距离目标小于0.5米就把速度调整为零
+        if (Vector3.Distance(moveToLocation, this.gameObject.transform.position) < 0.5f)
+        {
+            this.SetMoveSpeed(0);
+        }
+
+        this.gameObject.transform.LookAt(new Vector3(0f, 1f, -8f));
+        this.gameObject.transform.position = Vector3.MoveTowards(gameObject.transform.position, moveToLocation, dogProperty.runSpeed * (1 + moveSpeed) * 0.02f * moveSpeedAdj);  // 第一个0.02对应50帧fixupdate画面,后面一个数字对应速度调整,对应RM动画
+
+        // 如果狗距离到达重点就停止跑步动画
+        float distance = Vector3.Distance(gameObject.transform.position, moveToLocation);
+        if (distance < 0.1)
+        {
+            this.animator.SetBool("isMoving", false);
+            this.isMovingToPlayer = false;
+        }
+    }
+
+    // 交互行为计时器
+    public bool InteractTimeout()
+    {
+        TimeSpan ts = new TimeSpan();
+        ts = DateTime.Now - this.interactLastUpdate;
+        if (ts.TotalSeconds > 10) { return true; }
+        else { return false; }
+    }
+
+    public void ExitInteract()
+    {
+
+        // 结束交互行为,恢复原有的菜单
+        this.dogState = "idle";
+    } 
+    #endregion
+
+    #region 随机动作控制函数
+    // 随机选择宠物动作
+    public void IdleAnimation()
+    {
+        this.animationStartTime = DateTime.Now;
+        this.animator.SetInteger("activeIndex", activeIndex);
+        //Debug.Log("activeIndex:" + this.activeIndex);
+        float randomIndex = UnityEngine.Random.Range(0, 1f);
+        this.animator.SetFloat("randomIndex", randomIndex);
+        this.dogState = "idle";
+        //Debug.Log("randomIndex:" + randomIndex);
+    }
+
+    public void SetMoveSpeed(float speed)
+    {
+        this.moveSpeed = speed;
+    }
+
+    // 宠物随机移动
+    public void RandomMove()
+    {
+
+        // 如果距离目标小于0.5米就把速度调整为零
+        if (Vector3.Distance(moveToLocation, this.gameObject.transform.position) < 0.5f)
+        {
+            //Debug.Log(this.gameObject.name + "current move speed:" + moveSpeed);
+            this.SetMoveSpeed(0);
+            //Debug.Log(this.gameObject.name + "reduce move speed:" + moveSpeed);
+        }
+
+        if (isMoving == false)
+        {
+            animationStartTime = DateTime.Now;      // 设置动画开始时间
+            float x = UnityEngine.Random.Range(-5f, 5f);
+            float z = UnityEngine.Random.Range(0f, 5f);
+            this.moveToLocation = new Vector3(x, 0, z);
+            //Debug.Log("move to location:" + x + ", " + z);
+            this.isMoving = true;
+            this.animator.SetTrigger("move");
+            this.animator.SetBool("isMoving", true);
+            this.animator.SetFloat("moveSpeed", this.moveSpeed);
+        }
+        this.gameObject.transform.LookAt(moveToLocation);
+        this.gameObject.transform.position = Vector3.MoveTowards(gameObject.transform.position, moveToLocation, dogProperty.runSpeed * (1 + moveSpeed) * 0.02f * moveSpeedAdj);  // 第一个0.02对应50帧fixupdate画面,后面一个数字对应速度调整,对应RM动画
+        //this.gameObject.transform.position = Vector3.MoveTowards(gameObject.transform.position, moveToLocation, (100 + dogProperty.runSpeed) * (1 + moveSpeed) * 0.02f * 0.015f);  // 第一个0.02对应50帧fixupdate画面,后面一个数字对应速度调整,对应IF动画
+        //Debug.Log("current position:" + gameObject.transform.position.x + "z:" + gameObject.transform.position.z);
+
+        // 如果狗距离到达重点就停止跑步动画
+        float distance = Vector3.Distance(gameObject.transform.position, moveToLocation);
+        if (distance < 0.1)
+        {
+            this.animator.SetBool("isMoving", false);
+            //this.moveSpeed = 0.4f;
+            this.isMoving = false;
+            IdleAnimation();
+        }
+    }
+
+    public void Sleep()
+    {
+        this.animator.SetTrigger("sleep");
+        this.animator.SetBool("isSleeping", true);
+        this.isSleeping = true;
+        this.dogState = "sleep";
+    }
+
+    public void Listen()
+    {
+        //StopCoroutine(movingCoroutine);
+        //this.animator.SetTrigger("listen");
+        this.animator.SetBool("isListening", true);
+        this.animator.SetBool("isMoving", false);
+        this.animator.SetBool("isBarking", false);
+        this.animator.SetBool("isSleeping", false);
+        this.isSleeping = false;     // 主人呼叫可以唤醒狗
+        this.gameObject.transform.LookAt(new Vector3(0, 0, -6));
+        HomeController.playerCam.Priority = 10;
+        HomeController.dogCam.Priority = 1;
+        HomeController.lastCameraChange = DateTime.Now;
+        this.dogState = "listen";
+    }
+
+    // 用来出来音频返回结果
+    //public void PostListenRequest(bool result)
+    //{
+    //    if (result)
+    //    {
+    //        // TODO 语音信息识别成功,狗狗语音适配得分最高的跑过来
+    //        this.animator.SetBool("isListening", false);
+    //    }
+    //    else
+    //    {
+    //        this.animator.SetBool("isListening", false);
+    //    }
+
+    //    // TODO 根据返回结果设定focusdog
+    //    // focusdog 开启互动模式
+    //    HomeController.dogsInScene[GameData.focusDog].dogState = "interact";
+    //    HomeController.dogsInScene[GameData.focusDog].SetupInteract();
+    //}
+
+    #endregion
+
+    #region 喝水,吃食等道具消费函数
+    // 开始整个使用道具的流程
+    public void StartItemConsume(ItemGroup group)
+    {
+
+        GameObject bowl = GameObject.Find("Bowl_water");        // 先指定一个碗,编译通过
+
+        this.itemConsumeProgress = true;        // 开启使用道具过程
+        this.dogState = "itemConsume";
+
+        if (group == ItemGroup.water)
+        {
+            bowl = GameObject.Find("Bowl_water");       // 开启整个喝水的进程
+        }
+        if (group == ItemGroup.food)
+        {
+            bowl = GameObject.Find("Bowl_food");        // 开启整个吃食物的进程
+        }
+        
+        this.moveToLocation = bowl.transform.position;
+        this.isMovingToBowl = true;
+        this.animator.SetTrigger("move");       // 切换为走路动画
+        this.animator.SetBool("isMoving", true);        // 保持为走路动画
+        this.animator.SetFloat("moveSpeed", this.moveSpeed);
+
+    }
+
+    public void MovetoBowl()
+    {
+
+        // 如果距离目标小于0.5米就把速度调整为零
+        if (Vector3.Distance(moveToLocation, this.gameObject.transform.position) < 0.5f)
+        {
+            Debug.Log(this.gameObject.name + "current move speed:" + moveSpeed);
+            this.SetMoveSpeed(0);
+            Debug.Log(this.gameObject.name + "reduce move speed:" + moveSpeed);
+        }
+
+        var vamUI = GameObject.Find("VoiceAndMenu");
+        if (vamUI != null)
+        {
+            vamUI.SetActive(false);
+        }
+        this.gameObject.transform.LookAt(moveToLocation);
+        this.gameObject.transform.position = Vector3.MoveTowards(gameObject.transform.position, moveToLocation, dogProperty.runSpeed * (1 + moveSpeed) * 0.02f * moveSpeedAdj);  // 第一个0.02对应50帧fixupdate画面,后面一个数字对应速度调整,对应RM动画
+        //this.gameObject.transform.position = Vector3.MoveTowards(gameObject.transform.position, moveToLocation, (100+dogProperty.runSpeed) * (1 + moveSpeed) * 0.02f * 0.015f);  // 第一个0.02对应50帧fixupdate画面,后面一个数字对应速度调整,对应IF动画
+        //Debug.Log("current position:" + gameObject.transform.position.x + "z:" + gameObject.transform.position.z);
+
+        // 如果狗距离到达重点就停止跑步动画
+        float distance = Vector3.Distance(gameObject.transform.position, moveToLocation);
+        if (distance < 0.1)
+        {
+            this.animator.SetBool("isMoving", false);
+        }
+    }
+
+    public IEnumerator DrinkAnimation()
+
+    {
+        this.animator.SetBool("isMoving", false);       // 关闭移动动画
+        TimeSpan ts = new TimeSpan();
+        var targetBowl = GameObject.Find("Bowl_water");
+
+
+        // 摄像头看向水盆位置
+        HomeController.dogCam.m_LookAt = targetBowl.transform;
+        HomeController.dogCam.Priority = 10;
+        HomeController.playerCam.Priority = 1;
+
+        while (ts.TotalSeconds < 10)
+        {
+            yield return new WaitForSeconds(0.25f);
+            ts = DateTime.Now - this.drinkStartTime;
+            //Debug.Log("结束饮水过程:" + ts.TotalSeconds);
+
+            // 狗一致看向谁碰,确保就算被撞击后依然看向水盆
+            this.gameObject.transform.LookAt(targetBowl.transform.position);
+        }
+        // 播放10秒后结束饮水过程
+        this.animator.SetBool("isDrinking", false);
+
+        // 摄像头恢复玩家视角
+        HomeController.dogCam.Priority = 1;
+        HomeController.playerCam.Priority = 10;
+
+        // 让水物消失
+        var water = GameObject.Find("Water");
+        water.transform.localPosition = new Vector3(-1, -10, -1);
+
+        //var water = GameObject.Find("Water");
+        //water.SetActive(false);
+
+        // 再等待几秒后让水盆消失
+        while (ts.TotalSeconds < 18)
+        {
+            yield return new WaitForSeconds(0.25f);
+            ts = DateTime.Now - this.drinkStartTime;
+            //Debug.Log("让水盆消失:" + ts.TotalSeconds);
+        }
+
+        targetBowl.transform.position = new Vector3(-1, -10, -1);       // 将喝水碗回归原位
+        water.transform.localPosition = Vector3.zero;       // 将食物回归原位
+        this.itemConsumeProgress = false;      // 关闭整个道具使用的进程
+        this.dogState = "idle";
+        QuitItemConsume();
+    }
+
+    public IEnumerator EatAnimation()
+    {
+        this.animator.SetBool("isMoving", false);       // 关闭移动动画
+        TimeSpan ts = new TimeSpan();
+        var targetBowl = GameObject.Find("Bowl_food");
+
+
+        // 摄像头看向盆位置
+        HomeController.dogCam.m_LookAt = targetBowl.transform;
+        HomeController.dogCam.Priority = 10;
+        HomeController.playerCam.Priority = 1;
+
+        while (ts.TotalSeconds < 10)
+        {
+            yield return new WaitForSeconds(0.25f);
+            ts = DateTime.Now - this.eatStartTime;
+
+            // 狗一致看向谁碰,确保就算被撞击后依然看向水盆
+            this.gameObject.transform.LookAt(targetBowl.transform.position);
+        }
+        // 播放10秒后结束吃狗粮过程
+        this.animator.SetBool("isEating", false);
+        //Debug.Log(this.dogProperty.dog_name + "狗吃完了");
+        // 摄像头恢复玩家视角
+        HomeController.dogCam.Priority = 1;
+        HomeController.playerCam.Priority = 10;
+
+        // 让食物消失
+        var food = GameObject.Find("Food");
+        food.transform.localPosition = new Vector3(-1, -10, -1);
+        //var water = GameObject.Find("Water");
+        //water.SetActive(false);
+
+        // 再等待几秒后让饭盆消失
+        while (ts.TotalSeconds < 18)
+        {
+            yield return new WaitForSeconds(0.25f);
+            ts = DateTime.Now - this.eatStartTime;
+            //Debug.Log("让水盆消失:" + ts.TotalSeconds);
+        }
+        //Debug.Log(this.dogProperty.dog_name + "把碗放回去了");
+        targetBowl.transform.position = new Vector3(-1, -10, -1);       // 将饭盆回归原位
+        food.transform.localPosition = Vector3.zero;       // 将食物回归原位
+        this.itemConsumeProgress = false;      // 关闭整个道具使用的进程
+        this.dogState = "idle";
+
+        QuitItemConsume();
+
+    }
+
+    public void QuitItemConsume()
+    {
+        var uiPlaceholder = GameObject.Find("UI Placeholder");
+        var vamUI = uiPlaceholder.transform.Find("VoiceAndMenu").gameObject;
+        vamUI.SetActive(true);
+        this.moveSpeed = UnityEngine.Random.Range(0.3f, 0.6f);
+        RandomMove();
+    }
+
+    #endregion
+
+}

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

@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 976c46624cb9dc64a92f4bb97f55ee41

+ 104 - 270
Assets/Scripts/Home/HomeController.cs

@@ -1,4 +1,5 @@
 using Cinemachine;
+using Newtonsoft.Json;
 using System;
 using System.Collections;
 using System.Collections.Generic;
@@ -20,18 +21,37 @@ using UnityEngine.SceneManagement;
 public class HomeController : MonoBehaviour
 {
 
+    public static HomeController Instance;
+
     public static List<DogInScene> dogsInScene = new List<DogInScene>();
     public static bool listenBreak = false;       // 当按下说话按键后,所有狗停止行动,立刻切换到监听状态。
     public static CinemachineVirtualCamera playerCam, dogCam;
     public static DateTime lastCameraChange;
     private bool isSleepChecked = false;        // 用于检测第一次睡眠检测是否执行完成
     // Start is called once before the first execution of Update after the MonoBehaviour is created
+    private GameObject centerOfDogs;
+    //private bool isInteract = false;        // 是否在交互状态
+
+    private void Awake()
+    {
+        if (Instance == null)
+        {
+            Instance = this;
+            //DontDestroyOnLoad(gameObject);        // 必须关掉否则会导致原场景destroy不能执行
+        }
+        else
+        {
+            Destroy(gameObject);
+        }
+    }
+
     void Start()
     {
         dogsInScene.Clear();        // dogsInScene 是静态,每次启动要清空
         lastCameraChange = DateTime.Now;
         playerCam = GameObject.Find("VCam Player").GetComponent<CinemachineVirtualCamera>();
         dogCam = GameObject.Find("VCam Dog").GetComponent<CinemachineVirtualCamera>();
+        centerOfDogs= GameObject.Find("CenterOfDogs");
 
         //InitialScene();
         StartCoroutine(InitialScene());
@@ -42,8 +62,10 @@ public class HomeController : MonoBehaviour
     {
         if (SceneInitialCheck())      // 确保狗读取成功后执行代码
         {
-            // 每次启动检测一次是否进入睡眠
-            if (!isSleepChecked)
+            // 计算多只狗的中心位置,用于主摄像机瞄准
+            centerOfDogs.transform.position = CenterOfDogs();
+            
+            if (!isSleepChecked)        // 每次启动检测只进行一次是否进入睡眠
             {
                 // 判断是否在睡觉时间
                 DateTime dateTime = DateTime.Now;
@@ -57,7 +79,7 @@ public class HomeController : MonoBehaviour
                     else if (dog.dogProperty.stamina <= 10) { dog.Sleep(); }        // 狗体力太低了,进入睡觉模式
                     else
                     {
-                        dog.StartAnimation();
+                        dog.IdleAnimation();
                     }
                 }
                 isSleepChecked = true;
@@ -85,16 +107,29 @@ public class HomeController : MonoBehaviour
             foreach (var dog in dogsInScene)
             {
                 // 如果在eat drink进程结束前不执行随机场景代码
-                if (dog.eatProgress || dog.itemConsumeProgress)
+                //if (dog.itemConsumeProgress)        // TODO 以后用DogInScene.dogState来判断
+                if (dog.dogState == "itemConsume")
                 {
                     if (dog.isMovingToBowl)
                     {
                         dog.MovetoBowl();
                     }
                 }
+                else if (dog.dogState == "interact")
+                {
+                    // 单只狗在交互的状态控制代码
+                    if (dog.isMovingToBowl)
+                    {
+                        dog.MovetoBowl();
+                    }
+                    if (dog.InteractTimeout())        // 如果交互时间结束,结束交互状态
+                    {
+                        dog.ExitInteract();
+                    }
+                }
                 else
-                {    // 随机动作控制控制   
-                     // 随机镜头切换代码
+                {
+                    // 随机动作控制控制   
                     RandomCameraChange();
 
                     if (listenBreak)        // 如果用户按下说话按键,立刻切换到监听状态
@@ -103,7 +138,7 @@ public class HomeController : MonoBehaviour
                     }
                     else if (dog.isMoving)
                     {
-                        dog.Move();
+                        dog.RandomMove();
                     }
 
                     else if (randomCheck == dog.randomFactor && !dog.isSleeping)        // 当狗自身的随机数和系统随机数相同时候触发。约100秒触发一次。
@@ -114,13 +149,13 @@ public class HomeController : MonoBehaviour
                             float r = UnityEngine.Random.Range(0, 1f);
                             if (r > 0.6)       // 随机选择开始动画,或者移动
                             {
-                                dog.StartAnimation();
+                                dog.IdleAnimation();
                             }
                             else        // 狗狗开始步行移动
                             {
                                 dog.SetMoveSpeed(0);
                                 dog.moveSpeed = 0;
-                                dog.Move();
+                                dog.RandomMove();
                             }
                         }
                     }
@@ -249,306 +284,105 @@ public class HomeController : MonoBehaviour
         //Debug.Log("Home scene initial status:"+initDone);
         return initDone;
     }
-}
-
-// 本类用于管理场景中所有狗的状态包括动画状态,随机数分配等
-public class DogInScene
-{
-    //通用参数段
-    public DogProperty dogProperty;
-    public GameObject gameObject { set; get; }
-    public Animator animator;
-    private Vector3 moveToLocation;
-    public float moveSpeed;     // 用来控制狗的移动速度 0 0.5跑,0.75快跑,1跳
-
-    // 喝水吃饭参数段
-    public DateTime drinkStartTime, eatStartTime;      // 记录吃喝开始时间
-    public bool itemConsumeProgress, eatProgress = false;     // 是否在吃和喝的进程中。如果是的话,跳过常规动画检测
-    public bool isMovingToBowl;
-
-
-    // 随机动作参数段
-    public int randomFactor;
-    public DateTime animationStartTime;     // 记录上一个动画开始时间的,每个随机动作间隔至少30秒
-    private int activeIndex;      // 动物的活动指数
-    public bool isMoving;       // 动物正在移动,避免其他随机动作发生
-    public bool isSleeping;       // 动物正在正在睡觉,避免触发其他动画
 
-    // 固定参数
-    private float moveSpeedAdj = 0.025f;
-
-
-    #region 通用函数段
-    public void SetGameObject(GameObject gameObject)
-    {
-        this.gameObject = gameObject;
-        this.animator = gameObject.GetComponent<Animator>();
-        this.randomFactor = UnityEngine.Random.Range(0, 51);        // 生成一个随机整数(0 到 50 之间),用于时间校验
-        Debug.Log(this.gameObject.name + "random factor is:"+randomFactor);
-    }
-    
-
-    public DogInScene(DogProperty property) {
-        this.dogProperty = property;
-        this.activeIndex = (int)Math.Round((property.liveliness + property.intimate) * UnityEngine.Random.Range(0.3f, 0.7f));
-        this.isMoving = false;
-    }
-    #endregion
-
-    #region 随机动作控制函数
-
-
-// 随机选择宠物动作
-    public void StartAnimation()
-    {
-        this.animationStartTime = DateTime.Now;
-        this.animator.SetInteger("activeIndex", activeIndex);
-        //Debug.Log("activeIndex:" + this.activeIndex);
-        float randomIndex = UnityEngine.Random.Range(0, 1f);
-        this.animator.SetFloat("randomIndex", randomIndex);
-        //Debug.Log("randomIndex:" + randomIndex);
-    }
-
-    public void SetMoveSpeed(float speed)
-    {
-        this.moveSpeed = speed;
-    }
-
-    public void Move()
+    // 计算多只狗的中心位置,用于主摄像机瞄准
+    private Vector3 CenterOfDogs()
     {
-
-        // 如果距离目标小于0.5米就把速度调整为零
-        if (Vector3.Distance(moveToLocation, this.gameObject.transform.position) < 0.5f)
-        {
-            //Debug.Log(this.gameObject.name + "current move speed:" + moveSpeed);
-            this.SetMoveSpeed(0);
-            //Debug.Log(this.gameObject.name + "reduce move speed:" + moveSpeed);
-        }
-        
-        if (isMoving == false)
-        {
-            animationStartTime = DateTime.Now;      // 设置动画开始时间
-            float x = UnityEngine.Random.Range(-5f, 5f);
-            float z = UnityEngine.Random.Range(0f, 5f);
-            this.moveToLocation = new Vector3(x, 0, z);
-            //Debug.Log("move to location:" + x + ", " + z);
-            this.isMoving = true;
-            this.animator.SetTrigger("move");
-            this.animator.SetBool("isMoving", true);
-            this.animator.SetFloat("moveSpeed", this.moveSpeed);
-        }
-        this.gameObject.transform.LookAt(moveToLocation);
-        this.gameObject.transform.position = Vector3.MoveTowards(gameObject.transform.position, moveToLocation, dogProperty.runSpeed * (1 + moveSpeed) * 0.02f * moveSpeedAdj);  // 第一个0.02对应50帧fixupdate画面,后面一个数字对应速度调整,对应RM动画
-        //this.gameObject.transform.position = Vector3.MoveTowards(gameObject.transform.position, moveToLocation, (100 + dogProperty.runSpeed) * (1 + moveSpeed) * 0.02f * 0.015f);  // 第一个0.02对应50帧fixupdate画面,后面一个数字对应速度调整,对应IF动画
-        //Debug.Log("current position:" + gameObject.transform.position.x + "z:" + gameObject.transform.position.z);
-
-        // 如果狗距离到达重点就停止跑步动画
-        float distance = Vector3.Distance(gameObject.transform.position, moveToLocation);
-        if (distance  < 0.1)
+        Vector3 center = Vector3.zero;
+        foreach (var dog in dogsInScene)
         {
-            this.animator.SetBool("isMoving", false);
-            //this.moveSpeed = 0.4f;
-            this.isMoving = false;
-            StartAnimation();
+            center += dog.gameObject.transform.position;
         }
+        center /= dogsInScene.Count;
+        return center;
     }
 
-    public void Sleep()
+    #region 语音控制区
+    // 用户语音呼唤上传,Voice call指令用于呼唤所有的狗,得分最高的过来进入交互模式
+    public void VoiceCallRequest(string filePath)
     {
-        this.animator.SetTrigger("sleep");
-        this.animator.SetBool("isSleeping", true);  
-        this.isSleeping = true;
-    }
+        Debug.Log("Voice Call Post request");
 
-    public void Listen()
-    {
-        //StopCoroutine(movingCoroutine);
-        //this.animator.SetTrigger("listen");
-        this.animator.SetBool("isListening", true);
-        this.animator.SetBool("isMoving", false) ;
-        this.animator.SetBool("isBarking", false);
-        this.animator.SetBool("isSleeping", false);
-        this.isSleeping= false;     // 主人呼叫可以唤醒狗
-        this.gameObject.transform.LookAt(new Vector3(0, 0, -6));
-        HomeController.playerCam.Priority = 10;
-        HomeController.dogCam.Priority = 1;
-        HomeController.lastCameraChange = DateTime.Now;
-    }
+        string url = "/api/voice/call/";
+        WWWForm form = new();
+        form.AddField("user_id", UserProperty.userId);
 
-    // 用来出来音频返回结果
-    public void PostListen(bool result)
-    {
-        if (result)
-        {
-            // TODO 语音信息识别成功,狗狗跑过来
-        }
-        else
-        {
-            this.animator.SetBool("isListening", false);
-        }
+        StartCoroutine(WebController.PostRequest(url, form, filePath, callback: VoiceCallCallback));
     }
 
-    #endregion
-
-    #region 喝水,吃食等道具消费函数
-    // 开始整个使用道具的流程
-    public void StartItemConsume(ItemGroup group)
+    // 语音呼唤上传回调函数
+    void VoiceCallCallback(string json)
     {
+        Debug.Log("Voice call callback");
+        var data = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
+        if (data != null && data["status"].ToString() == "success")
+        {
+       
+            // 刷新狗的数据
+            string dogJson = data["dogs"].ToString();
+            UserProperty.FreshDogInfo(dogJson);
 
-        GameObject bowl = GameObject.Find("Bowl_water");        // 先指定一个碗,编译通过
+            // TODO 根据返回结果设定focusdog
+            // focusdog 开启互动模式
+            HomeController.dogsInScene[GameData.focusDog].dogState = "interact";
+            HomeController.dogsInScene[GameData.focusDog].SetupInteract();
 
-        this.itemConsumeProgress = true;        // 开启使用道具过程
-        if (group == ItemGroup.water)
-        {
-            bowl = GameObject.Find("Bowl_water");       // 开启整个喝水的进程
         }
-        if (group == ItemGroup.food) 
+        else
         {
-            bowl = GameObject.Find("Bowl_food");        // 开启整个吃食物的进程
+            Debug.Log(data["message"]);
         }
-        this.moveToLocation = bowl.transform.position;
-        this.isMovingToBowl = true;
-        this.animator.SetTrigger("move");       // 切换为走路动画
-        this.animator.SetBool("isMoving", true);        // 保持为走路动画
-        this.animator.SetFloat("moveSpeed", this.moveSpeed);
     }
 
-    public void MovetoBowl()
+    // 用户语音呼唤上传,Voice call指令用于呼唤所有的狗,得分最高的过来进入交互模式
+    public void VoiceCommandRequest(string filePath)
     {
+        Debug.Log("Voice Command Post request");
 
-        // 如果距离目标小于0.5米就把速度调整为零
-        if (Vector3.Distance(moveToLocation, this.gameObject.transform.position) < 0.5f)
-        {
-            Debug.Log(this.gameObject.name + "current move speed:" + moveSpeed);
-            this.SetMoveSpeed(0);
-            Debug.Log(this.gameObject.name + "reduce move speed:" + moveSpeed);
-        }
+        string url = "/api/voice/command/";
+        WWWForm form = new();
+        form.AddField("dog_id", UserProperty.dogs[GameData.focusDog].d_id);
+        form.AddField("user_id", UserProperty.userId);
 
-        var vamUI = GameObject.Find("VoiceAndMenu");
-        if (vamUI != null)
-        {
-            vamUI.SetActive(false);
-        }
-        this.gameObject.transform.LookAt(moveToLocation);
-        this.gameObject.transform.position = Vector3.MoveTowards(gameObject.transform.position, moveToLocation, dogProperty.runSpeed * (1 + moveSpeed) * 0.02f * moveSpeedAdj);  // 第一个0.02对应50帧fixupdate画面,后面一个数字对应速度调整,对应RM动画
-        //this.gameObject.transform.position = Vector3.MoveTowards(gameObject.transform.position, moveToLocation, (100+dogProperty.runSpeed) * (1 + moveSpeed) * 0.02f * 0.015f);  // 第一个0.02对应50帧fixupdate画面,后面一个数字对应速度调整,对应IF动画
-        //Debug.Log("current position:" + gameObject.transform.position.x + "z:" + gameObject.transform.position.z);
-
-        // 如果狗距离到达重点就停止跑步动画
-        float distance = Vector3.Distance(gameObject.transform.position, moveToLocation);
-        if (distance < 0.1)
-        {
-            this.animator.SetBool("isMoving", false);
-        }
+        StartCoroutine(WebController.PostRequest(url, form, filePath, callback: VoiceCommandCallback));
     }
 
-    public IEnumerator DrinkAnimation()
-
+    // 语音呼唤上传回调函数
+    void VoiceCommandCallback(string json)
     {
-        this.animator.SetBool("isMoving", false);       // 关闭移动动画
-        TimeSpan ts = new TimeSpan();
-        var targetBowl = GameObject.Find("Bowl_water");
-
-        
-
-        // 摄像头看向水盆位置
-        HomeController.dogCam.m_LookAt = targetBowl.transform;
-        HomeController.dogCam.Priority = 10;
-        HomeController.playerCam.Priority = 1;
-
-        while (ts.TotalSeconds < 10)
+        Debug.Log("Voice call callback");
+        var data = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
+        if (data != null && data["status"].ToString() == "success")
         {
-            yield return new WaitForSeconds(0.25f);
-            ts = DateTime.Now - this.drinkStartTime;
-            //Debug.Log("结束饮水过程:" + ts.TotalSeconds);
-
-            // 狗一致看向谁碰,确保就算被撞击后依然看向水盆
-            this.gameObject.transform.LookAt(targetBowl.transform.position);
-        }
-        // 播放10秒后结束饮水过程
-        this.animator.SetBool("isDrinking", false);
 
-        // 摄像头恢复玩家视角
-        HomeController.dogCam.Priority = 1;
-        HomeController.playerCam.Priority = 10;
+            // 刷新狗的数据
+            string dogJson = data["dogs"].ToString();
+            UserProperty.FreshDogInfo(dogJson);
 
-        //var water = GameObject.Find("Water");
-        //water.SetActive(false);
-
-        // 再等待几秒后让水盆消失
-        while (ts.TotalSeconds < 18)
+        }
+        else
         {
-            yield return new WaitForSeconds(0.25f);
-            ts = DateTime.Now - this.drinkStartTime;
-            //Debug.Log("让水盆消失:" + ts.TotalSeconds);
+            Debug.Log(data["message"]);
         }
-        
-        targetBowl.transform.position = new Vector3(-1, -10, -1);       // 将喝水碗回归原位
-        this.itemConsumeProgress = false;      // 关闭整个喝水的进程
-
-        QuitItemConsume();
     }
 
-    public IEnumerator EatAnimation()
+    // 改变Voice And Menu 菜单形态
+    public void VoiceButtonSwitch(bool state)
     {
-        this.animator.SetBool("isMoving", false);       // 关闭移动动画
-        TimeSpan ts = new TimeSpan();
-        var targetBowl = GameObject.Find("Bowl_food");
-
-
-        // 摄像头看向盆位置
-        HomeController.dogCam.m_LookAt = targetBowl.transform;
-        HomeController.dogCam.Priority = 10;
-        HomeController.playerCam.Priority = 1;
-
-        while (ts.TotalSeconds < 10)
-        {
-            yield return new WaitForSeconds(0.25f);
-            ts = DateTime.Now - this.eatStartTime;
-            //Debug.Log("结束饮水过程:" + ts.TotalSeconds);
-
-            // 狗一致看向谁碰,确保就算被撞击后依然看向水盆
-            this.gameObject.transform.LookAt(targetBowl.transform.position);
-        }
-        // 播放10秒后结束饮水过程
-        this.animator.SetBool("isEating", false);
-
-        // 摄像头恢复玩家视角
-        HomeController.dogCam.Priority = 1;
-        HomeController.playerCam.Priority = 10;
-
-        //var water = GameObject.Find("Water");
-        //water.SetActive(false);
-
-        // 再等待几秒后让水盆消失
-        while (ts.TotalSeconds < 15)
+        // 交互时候关闭其他菜单
+        var vamUI = GameObject.Find("VoiceAndMenu");
+        if (vamUI != null)
         {
-            yield return new WaitForSeconds(0.25f);
-            ts = DateTime.Now - this.drinkStartTime;
-            //Debug.Log("让水盆消失:" + ts.TotalSeconds);
+            var UIdocument = vamUI.transform.Find("UIDocument").gameObject;
+            var voiceController = UIdocument.GetComponent<VoiceController>();
+            voiceController.isCommandMode = state;
         }
-
-        targetBowl.transform.position = new Vector3(-1, -10, -1);       // 将喝水碗回归原位
-        this.itemConsumeProgress = false;      // 关闭整个喝水的进程
-
-        QuitItemConsume();
-    }
-
-    private void QuitItemConsume()
-    {
-        var uiPlaceholder = GameObject.Find("UI Placeholder");
-        var vamUI = uiPlaceholder.transform.Find("VoiceAndMenu").gameObject;
-        vamUI.SetActive(true);
-        this.moveSpeed = UnityEngine.Random.Range(0.3f,0.6f);
-        Move();
-
-        
     }
-
     #endregion
-        
 }
 
+
+
 // 
 public enum ItemGroup
 {

+ 8 - 15
Assets/Scripts/Home/ItemUseWebCommController.cs

@@ -48,7 +48,6 @@ public class ItemUseWebCommController : MonoBehaviour
         form.AddField("user_id", UserProperty.userId);
         form.AddField("item_id", itemId);
         form.AddField("dog_list", dogsJson);
-        form.AddField("date_time", DateTime.Now.ToString());        // 可选项,以服务器时间为准
 
         StartCoroutine(WebController.PostRequest(url, form, callback: ItemUseCallback));
     }
@@ -59,22 +58,16 @@ public class ItemUseWebCommController : MonoBehaviour
         var data = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
         if (data != null && data["status"].ToString() == "success")
         {
-            var user_info = JsonConvert.DeserializeObject<Dictionary<string, string>>(data["user_info"].ToString());
+            // 刷新用户数据
+            var userInfoJson = data["user_info"].ToString();
+            UserProperty.FreshUserInfo(userInfoJson);
 
-            UserProperty.name = user_info["user_name"];
-            UserProperty.coin = int.Parse(user_info["coin"]);
-            UserProperty.mobile = user_info["mobile"];
-            UserProperty.email = user_info["email"];
-            UserProperty.level = user_info["level"];
-            UserProperty.isRegUser = bool.Parse(user_info["isRegUser"]);
+            string dogJson = data["dogs"].ToString();
+            UserProperty.FreshDogInfo(dogJson);
 
-            // 清空现有数据保存狗的数据
-            DogProperty[] dogProperties = JsonConvert.DeserializeObject<DogProperty[]>(data["dogs"].ToString());
-            UserProperty.dogs.Clear();
-            foreach (var dog in dogProperties)
-            {
-                UserProperty.dogs.Add(dog);
-            }
+            // TODO 刷新道具数据
+            //var itemsJson = data["props"].ToString();
+            //UserProperty.FreshUserItems(itemsJson);
         }
         else
         {

+ 51 - 0
Assets/Scripts/Home/PlayerColliderController.cs

@@ -0,0 +1,51 @@
+using System;
+using UnityEngine;
+
+/* 用于检测在交互场景开始时候狗向玩家走过来时候,玩家与狗的碰撞检测 
+ * 待删除,因为狗可以用距离控制
+ */
+public class PlayerColliderController : MonoBehaviour
+{
+    private GameObject thisObject;
+
+    // Start is called once before the first execution of Update after the MonoBehaviour is created
+    void Start()
+    {
+        thisObject = this.gameObject;
+    }
+
+    // Update is called once per frame
+    //void Update()
+    //{
+
+    //}
+
+    private void OnTriggerEnter(Collider other)
+    {
+        foreach (var dogInScene in HomeController.dogsInScene)
+        {
+            if (dogInScene.gameObject == other.gameObject)
+            {        // 检测哪一只doginScene发生碰撞
+
+                if (thisObject.name == "Bowl_water")
+                {
+
+                    dogInScene.isMovingToBowl = false;
+                    dogInScene.drinkStartTime = DateTime.Now;
+                    dogInScene.animator.SetTrigger("drink");
+                    dogInScene.animator.SetBool("isDrinking", true);
+                    StartCoroutine(dogInScene.DrinkAnimation());
+                    //dogInScene.DrinkAnimation();
+                }
+                if (thisObject.name == "Bowl_food")
+                {
+                    dogInScene.isMovingToBowl = false;
+                    dogInScene.eatStartTime = DateTime.Now;
+                    dogInScene.animator.SetTrigger("eat");
+                    dogInScene.animator.SetBool("isEating", true);
+                    StartCoroutine(dogInScene.EatAnimation());
+                }
+            }
+        }
+    }
+}

+ 2 - 0
Assets/Scripts/Home/PlayerColliderController.cs.meta

@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 5f5a0aee9e7a97f41887042b5dc27c70

+ 12 - 15
Assets/Scripts/Login/LoginController.cs

@@ -166,23 +166,20 @@ public class LoginController : MonoBehaviour
         var data = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
         if (data != null && data["status"].ToString() == "success")
         {
-            var user_info = JsonConvert.DeserializeObject<Dictionary<string, string>>(data["user_info"].ToString());
-
-            UserProperty.name = user_info["user_name"];
-            UserProperty.coin = int.Parse(user_info["coin"]);
-            UserProperty.mobile = user_info["mobile"];
-            UserProperty.email = user_info["email"];
-            UserProperty.level = user_info["level"];
-            if (UserProperty.level == "pro"){ EnviromentSetting.maxDogQty = 3; }
-            UserProperty.isRegUser = bool.Parse(user_info["isRegUser"]);
-            Debug.Log("login in user id: " + UserProperty.userId);
+            var user_info = data["user_info"].ToString();
+            UserProperty.FreshUserInfo(user_info);
 
             // 保存狗的数据
-            DogProperty[] dogProperties = JsonConvert.DeserializeObject<DogProperty[]>(data["dogs"].ToString());
-            foreach (var dog in dogProperties)
-            {
-                UserProperty.dogs.Add(dog);
-            }
+            string dogsJson = data["dogs"].ToString();
+            UserProperty.FreshDogInfo(dogsJson);
+            //DogProperty[] dogProperties = JsonConvert.DeserializeObject<DogProperty[]>(data["dogs"].ToString());
+            //foreach (var dog in dogProperties)
+            //{
+            //    UserProperty.dogs.Add(dog);
+            //}
+
+            // 保存道具数据
+            UserProperty.FreshUserItems(data["props"].ToString());
 
             // 判断用户狗的数量,如果为0就跳转用户创建狗。
             if (UserProperty.dogs.Count < 1)

+ 5 - 3
Assets/Scripts/Playground/DogCatchDetection.cs

@@ -37,9 +37,11 @@ public class DogCatchDetection : MonoBehaviour
     // 飞盘撞到狗,判断为成功
     private void OnTriggerEnter(Collider other)
     {
-        
+        var DogProperty = UserProperty.dogs[GameData.focusDog]; // 读取狗的数据
+        float catchProbability = (DogProperty.frisbeeSkill*Random.Range(0f,1f)+100)/200;   // 狗的抓取概率
+        Debug.Log("catchProbability:" + catchProbability);
 
-        if (other.gameObject.tag == "Throw Material" && other.transform.position.z > -9)    // >-9表示丢出一段距离后再检测
+        if (other.gameObject.tag == "Throw Material" && other.transform.position.z > -9 && catchProbability>0.6f)    // >-9表示丢出一段距离后再检测
         {
             // 调整camera
             var CamPlayer = GameObject.Find("Player CAM").GetComponent<CinemachineVirtualCamera>();
@@ -65,7 +67,7 @@ public class DogCatchDetection : MonoBehaviour
             {
                 dogMouth = GameObject.Find("mouth");
                 toy.transform.SetParent(dogMouth.transform, false);
-                toy.transform.localPosition = new Vector3(0, 0.13f, 0);
+                toy.transform.localPosition = new Vector3(0, 0.13f, 0.008f);
                 toy.transform.localRotation = Quaternion.Euler(0, 0, 0);
                 toy.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
             }

+ 11 - 2
Assets/Scripts/Playground/PlayToyController.cs

@@ -58,7 +58,7 @@ public class PlayToyController : MonoBehaviour
         GameObject toy = Instantiate(toyResource);
         toy.name = "toy";
         toy.tag = "Throw Material";
-        toy.transform.localPosition = new Vector3(-0.25f, 0.66f, -10.8f);
+        toy.transform.localPosition = new Vector3(-0.1f, 0.66f, -10.8f);
         toy.transform.localRotation = Quaternion.Euler(-115f,0,0);
         toy.transform.localScale = new Vector3(0.75f, 0.75f, 0.75f);       // 初始化位置
 
@@ -107,8 +107,14 @@ public class PlayToyController : MonoBehaviour
                 {
                     PlayData.isMouseStartOnTarget = true;
                     mouseStartPosition = Pointer.current.position.ReadValue();
+
+                    // 如果已经按下鼠标后,就不能切换狗了
+                    var dogSelector = GameObject.Find("Dog Selector");
+                    if (dogSelector != null) { dogSelector.SetActive(false); }
                 }
             }
+
+            
         }
 
         // 松开鼠标
@@ -266,6 +272,10 @@ public class PlayToyController : MonoBehaviour
     // 游戏重置
     void GameReset()
     {
+        var UIPlaceholder = GameObject.Find("UI Placeholder");
+        var dogSelector = UIPlaceholder.transform.Find("Dog Selector").gameObject;
+        dogSelector.SetActive(true);
+
         PlayData.Reset();
         // 获取当前场景的名称
         string currentSceneName = SceneManager.GetActiveScene().name;
@@ -292,7 +302,6 @@ public class PlayToyController : MonoBehaviour
         form.AddField("user_id", UserProperty.userId);
         form.AddField("item_id", GameData.playedToy);
         form.AddField("dog_list", dogsJson);
-        form.AddField("date_time", DateTime.Now.ToString());        // 可选项,以服务器时间为准
         StartCoroutine(WebController.PostRequest(url, form, callback: PlayFrisbeeReqCallback));
     }
 

+ 34 - 36
Packages/packages-lock.json

@@ -7,14 +7,14 @@
       "dependencies": {}
     },
     "com.unity.burst": {
-      "version": "1.8.18",
+      "version": "1.8.19",
       "depth": 2,
       "source": "registry",
       "dependencies": {
         "com.unity.mathematics": "1.2.1",
         "com.unity.modules.jsonserialize": "1.0.0"
       },
-      "url": "https://packages.unity.cn"
+      "url": "https://packages.unity.com"
     },
     "com.unity.cinemachine": {
       "version": "2.10.3",
@@ -23,14 +23,14 @@
       "dependencies": {
         "com.unity.test-framework": "1.1.31"
       },
-      "url": "https://packages.unity.cn"
+      "url": "https://packages.unity.com"
     },
     "com.unity.collab-proxy": {
       "version": "2.6.0",
       "depth": 0,
       "source": "registry",
       "dependencies": {},
-      "url": "https://packages.unity.cn"
+      "url": "https://packages.unity.com"
     },
     "com.unity.collections": {
       "version": "2.5.1",
@@ -42,28 +42,27 @@
         "com.unity.test-framework": "1.4.5",
         "com.unity.test-framework.performance": "3.0.3"
       },
-      "url": "https://packages.unity.cn"
+      "url": "https://packages.unity.com"
     },
     "com.unity.device-simulator.devices": {
       "version": "1.0.0",
       "depth": 0,
       "source": "registry",
       "dependencies": {},
-      "url": "https://packages.unity.cn"
+      "url": "https://packages.unity.com"
     },
     "com.unity.editorcoroutines": {
       "version": "1.0.0",
       "depth": 1,
       "source": "registry",
       "dependencies": {},
-      "url": "https://packages.unity.cn"
+      "url": "https://packages.unity.com"
     },
     "com.unity.ext.nunit": {
       "version": "2.0.5",
       "depth": 2,
-      "source": "registry",
-      "dependencies": {},
-      "url": "https://packages.unity.cn"
+      "source": "builtin",
+      "dependencies": {}
     },
     "com.unity.feature.development": {
       "version": "1.0.2",
@@ -73,8 +72,8 @@
         "com.unity.ide.visualstudio": "2.0.22",
         "com.unity.ide.rider": "3.0.31",
         "com.unity.editorcoroutines": "1.0.0",
-        "com.unity.performance.profile-analyzer": "1.2.2",
-        "com.unity.test-framework": "1.4.5",
+        "com.unity.performance.profile-analyzer": "1.2.3",
+        "com.unity.test-framework": "1.5.1",
         "com.unity.testtools.codecoverage": "1.2.6"
       }
     },
@@ -85,7 +84,7 @@
       "dependencies": {
         "com.unity.ext.nunit": "1.0.6"
       },
-      "url": "https://packages.unity.cn"
+      "url": "https://packages.unity.com"
     },
     "com.unity.ide.visualstudio": {
       "version": "2.0.22",
@@ -94,7 +93,7 @@
       "dependencies": {
         "com.unity.test-framework": "1.1.9"
       },
-      "url": "https://packages.unity.cn"
+      "url": "https://packages.unity.com"
     },
     "com.unity.inputsystem": {
       "version": "1.11.2",
@@ -103,14 +102,14 @@
       "dependencies": {
         "com.unity.modules.uielements": "1.0.0"
       },
-      "url": "https://packages.unity.cn"
+      "url": "https://packages.unity.com"
     },
     "com.unity.mathematics": {
       "version": "1.3.2",
       "depth": 2,
       "source": "registry",
       "dependencies": {},
-      "url": "https://packages.unity.cn"
+      "url": "https://packages.unity.com"
     },
     "com.unity.multiplayer.center": {
       "version": "1.0.0",
@@ -125,21 +124,21 @@
       "depth": 3,
       "source": "registry",
       "dependencies": {},
-      "url": "https://packages.unity.cn"
+      "url": "https://packages.unity.com"
     },
     "com.unity.nuget.newtonsoft-json": {
       "version": "3.2.1",
       "depth": 0,
       "source": "registry",
       "dependencies": {},
-      "url": "https://packages.unity.cn"
+      "url": "https://packages.unity.com"
     },
     "com.unity.performance.profile-analyzer": {
-      "version": "1.2.2",
+      "version": "1.2.3",
       "depth": 1,
       "source": "registry",
       "dependencies": {},
-      "url": "https://packages.unity.cn"
+      "url": "https://packages.unity.com"
     },
     "com.unity.postprocessing": {
       "version": "3.4.0",
@@ -148,10 +147,10 @@
       "dependencies": {
         "com.unity.modules.physics": "1.0.0"
       },
-      "url": "https://packages.unity.cn"
+      "url": "https://packages.unity.com"
     },
     "com.unity.render-pipelines.core": {
-      "version": "17.0.3",
+      "version": "17.0.4",
       "depth": 1,
       "source": "builtin",
       "dependencies": {
@@ -176,38 +175,37 @@
       }
     },
     "com.unity.searcher": {
-      "version": "4.9.2",
+      "version": "4.9.3",
       "depth": 1,
       "source": "registry",
       "dependencies": {},
-      "url": "https://packages.unity.cn"
+      "url": "https://packages.unity.com"
     },
     "com.unity.settings-manager": {
       "version": "2.0.1",
       "depth": 2,
       "source": "registry",
       "dependencies": {},
-      "url": "https://packages.unity.cn"
+      "url": "https://packages.unity.com"
     },
     "com.unity.shadergraph": {
-      "version": "17.0.3",
+      "version": "17.0.4",
       "depth": 0,
       "source": "builtin",
       "dependencies": {
-        "com.unity.render-pipelines.core": "17.0.3",
-        "com.unity.searcher": "4.9.2"
+        "com.unity.render-pipelines.core": "17.0.4",
+        "com.unity.searcher": "4.9.3"
       }
     },
     "com.unity.test-framework": {
-      "version": "1.4.5",
+      "version": "1.5.1",
       "depth": 1,
-      "source": "registry",
+      "source": "builtin",
       "dependencies": {
         "com.unity.ext.nunit": "2.0.3",
         "com.unity.modules.imgui": "1.0.0",
         "com.unity.modules.jsonserialize": "1.0.0"
-      },
-      "url": "https://packages.unity.cn"
+      }
     },
     "com.unity.test-framework.performance": {
       "version": "3.0.3",
@@ -217,7 +215,7 @@
         "com.unity.test-framework": "1.1.31",
         "com.unity.modules.jsonserialize": "1.0.0"
       },
-      "url": "https://packages.unity.cn"
+      "url": "https://packages.unity.com"
     },
     "com.unity.testtools.codecoverage": {
       "version": "1.2.6",
@@ -227,7 +225,7 @@
         "com.unity.test-framework": "1.0.16",
         "com.unity.settings-manager": "1.0.1"
       },
-      "url": "https://packages.unity.cn"
+      "url": "https://packages.unity.com"
     },
     "com.unity.timeline": {
       "version": "1.8.7",
@@ -239,7 +237,7 @@
         "com.unity.modules.audio": "1.0.0",
         "com.unity.modules.particlesystem": "1.0.0"
       },
-      "url": "https://packages.unity.cn"
+      "url": "https://packages.unity.com"
     },
     "com.unity.ugui": {
       "version": "2.0.0",
@@ -258,7 +256,7 @@
         "com.unity.ugui": "1.0.0",
         "com.unity.modules.jsonserialize": "1.0.0"
       },
-      "url": "https://packages.unity.cn"
+      "url": "https://packages.unity.com"
     },
     "com.unity.modules.accessibility": {
       "version": "1.0.0",

+ 3 - 3
ProjectSettings/PackageManagerSettings.asset

@@ -22,7 +22,7 @@ MonoBehaviour:
   m_Registries:
   - m_Id: main
     m_Name: 
-    m_Url: https://packages.unity.cn
+    m_Url: https://packages.unity.com
     m_Scopes: []
     m_IsDefault: 1
     m_Capabilities: 7
@@ -32,6 +32,6 @@ MonoBehaviour:
   m_RegistryInfoDraft:
     m_Modified: 0
     m_ErrorMessage: 
-    m_UserModificationsInstanceId: -868
-    m_OriginalInstanceId: -870
+    m_UserModificationsInstanceId: -866
+    m_OriginalInstanceId: -868
   m_LoadAssets: -1

+ 1 - 1
ProjectSettings/ProjectSettings.asset

@@ -291,7 +291,7 @@ PlayerSettings:
   - m_BuildTarget: 
     m_Icons:
     - serializedVersion: 2
-      m_Icon: {fileID: 2800000, guid: 8c6e3cbd473e6f1418f96683a389737a, type: 3}
+      m_Icon: {fileID: 2800000, guid: 2a30515557e15584089b7100924be084, type: 3}
       m_Width: 128
       m_Height: 128
       m_Kind: 0

+ 2 - 2
ProjectSettings/ProjectVersion.txt

@@ -1,2 +1,2 @@
-m_EditorVersion: 6000.0.29f1c1
-m_EditorVersionWithRevision: 6000.0.29f1c1 (a1dcd17d2779)
+m_EditorVersion: 6000.0.44f1
+m_EditorVersionWithRevision: 6000.0.44f1 (101c91f3a8fb)

+ 1 - 1
ProjectSettings/TagManager.asset

@@ -13,7 +13,7 @@ TagManager:
   - 
   - Water
   - UI
-  - 
+  - Post Processing
   - 
   - 
   - 

部分文件因文件數量過多而無法顯示