Merge branch 'develop' into feature/skill-set-shortcut

This commit is contained in:
VDH
2026-02-23 14:47:53 +07:00
103 changed files with 14278 additions and 2638 deletions
@@ -13,6 +13,7 @@ MonoBehaviour:
m_Name: AddressableAssetGroupSortSettings
m_EditorClassIdentifier:
sortOrder:
- 008967af9920048af80347b1adb673d4
- 402389c9c8797a8489a1d8188e497c23
- 17b5850382b624d15a322e51c0b9b7c7
- af2f31e34f6644749bdd552abb39cb07
@@ -15,7 +15,7 @@ MonoBehaviour:
m_DefaultGroup: 712e3991f28e549e7a56ee582a977810
m_currentHash:
serializedVersion: 2
Hash: 0f380cb03d21b1c7c3b6d95fa1190c01
Hash: 9b017ff3b9b83b6931883175497e6a95
m_OptimizeCatalogSize: 0
m_BuildRemoteCatalog: 0
m_CatalogRequestsTimeout: 0
@@ -60,6 +60,7 @@ MonoBehaviour:
m_BuildAddressablesWithPlayerBuild: 0
m_overridePlayerVersion: '[UnityEditor.PlayerSettings.bundleVersion]'
m_GroupAssets:
- {fileID: 11400000, guid: c99cbfd356e4d487b8da3554688ea241, type: 2}
- {fileID: 11400000, guid: ba28219cd9e2e4e51817178f840965e8, type: 2}
- {fileID: 11400000, guid: 0759296650e322743affabf844e4f32a, type: 2}
- {fileID: 11400000, guid: 86ad1216662b54841a182d663f54030d, type: 2}
@@ -42,7 +42,7 @@ MonoBehaviour:
m_AssetBundleProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider
m_UseDefaultSchemaSettings: 0
m_UseDefaultSchemaSettings: 1
m_SelectedPathPairIndex: 0
m_BundleNaming: 0
m_AssetLoadMode: 0
@@ -0,0 +1,48 @@
%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: e5d17a21594effb4e9591490b009e7aa, type: 3}
m_Name: Packed Assets_BundledAssetGroupSchema
m_EditorClassIdentifier:
m_Group: {fileID: 11400000, guid: c99cbfd356e4d487b8da3554688ea241, type: 2}
m_InternalBundleIdMode: 1
m_Compression: 1
m_IncludeAddressInCatalog: 1
m_IncludeGUIDInCatalog: 1
m_IncludeLabelsInCatalog: 1
m_InternalIdNamingMode: 0
m_CacheClearBehavior: 0
m_IncludeInBuild: 1
m_BundledAssetProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider
m_StripDownloadOptions: 0
m_ForceUniqueProvider: 0
m_UseAssetBundleCache: 0
m_UseAssetBundleCrc: 1
m_UseAssetBundleCrcForCachedBundles: 1
m_UseUWRForLocalBundles: 0
m_Timeout: 0
m_ChunkedTransfer: 0
m_RedirectLimit: -1
m_RetryCount: 0
m_BuildPath:
m_Id: 506465302ec864e8eb6eb8e0d2ee7b2c
m_LoadPath:
m_Id: 71015b41342024feebebb329061472f1
m_BundleMode: 0
m_AssetBundleProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider
m_UseDefaultSchemaSettings: 1
m_SelectedPathPairIndex: 0
m_BundleNaming: 0
m_AssetLoadMode: 0
@@ -1,8 +1,8 @@
fileFormatVersion: 2
guid: 53144361e2a90ed4e918b2f7dd90ceec
guid: 5b36e63528ecc40318a3353b135e4729
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 4300000
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,16 @@
%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: 5834b5087d578d24c926ce20cd31e6d6, type: 3}
m_Name: a61_ContentUpdateGroupSchema
m_EditorClassIdentifier:
m_Group: {fileID: 11400000, guid: c99cbfd356e4d487b8da3554688ea241, type: 2}
m_StaticContent: 0
@@ -1,8 +1,8 @@
fileFormatVersion: 2
guid: ddc0695fd6ea2f04bb8012d070f14971
guid: a218b6667780842c9921480371d0f2d6
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 4300000
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -42,7 +42,7 @@ MonoBehaviour:
m_AssetBundleProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider
m_UseDefaultSchemaSettings: 0
m_UseDefaultSchemaSettings: 1
m_SelectedPathPairIndex: 0
m_BundleNaming: 0
m_AssetLoadMode: 0
@@ -42,7 +42,7 @@ MonoBehaviour:
m_AssetBundleProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider
m_UseDefaultSchemaSettings: 0
m_UseDefaultSchemaSettings: 1
m_SelectedPathPairIndex: 0
m_BundleNaming: 0
m_AssetLoadMode: 0
@@ -38,7 +38,7 @@ MonoBehaviour:
m_Id: 506465302ec864e8eb6eb8e0d2ee7b2c
m_LoadPath:
m_Id: 71015b41342024feebebb329061472f1
m_BundleMode: 1
m_BundleMode: 0
m_AssetBundleProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider
File diff suppressed because it is too large Load Diff
@@ -1,8 +1,8 @@
fileFormatVersion: 2
guid: 7ef57348cc14e2c44b0d93d82309fb45
guid: c99cbfd356e4d487b8da3554688ea241
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 4300000
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 365c467577a8ce44495eb488cd707559
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 4300000
userData:
assetBundleName:
assetBundleVariant:
File diff suppressed because one or more lines are too long
@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: c4d86c66a7bc42a41a047326db03bd43
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 4300000
userData:
assetBundleName:
assetBundleVariant:
-23
View File
@@ -500,7 +500,6 @@ GameObject:
- component: {fileID: 6260077963306472656}
- component: {fileID: 6924064708529338815}
- component: {fileID: 2097822689343174008}
- component: {fileID: 5873338482207652341}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
@@ -576,25 +575,3 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &5873338482207652341
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7688203334091480705}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: 3b4b43e9a49fce34483f4fff68b12ed5, type: 2}
-23
View File
@@ -97,7 +97,6 @@ GameObject:
- component: {fileID: 1272478507112192081}
- component: {fileID: 6954454004377796954}
- component: {fileID: 5676648177530222505}
- component: {fileID: 111723668987366639}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
@@ -173,28 +172,6 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &111723668987366639
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2365263632891046891}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: 7167b51f0e014db43931b4b096ef729c, type: 2}
--- !u!1 &2558591535423843765
GameObject:
m_ObjectHideFlags: 0
-23
View File
@@ -220,7 +220,6 @@ GameObject:
- component: {fileID: 7885315490406352003}
- component: {fileID: 7891995263496077361}
- component: {fileID: 8533083944117625521}
- component: {fileID: 5548688014515440000}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
@@ -296,28 +295,6 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &5548688014515440000
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6707970108274111613}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: 6d41cce33febd644594eae4ab41e09f9, type: 2}
--- !u!1 &8532581071285473490
GameObject:
m_ObjectHideFlags: 0
-110
View File
@@ -1,114 +1,5 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &162276849537940635
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4311722346832967919}
- component: {fileID: 4863362442310225935}
- component: {fileID: 5348732139172174562}
- component: {fileID: 57484829182898907}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4311722346832967919
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 162276849537940635}
serializedVersion: 2
m_LocalRotation: {x: 0.15931526, y: 0.38785443, z: -0.020662844, w: 0.9076126}
m_LocalPosition: {x: 500.026, y: -91.873314, z: -178.63507}
m_LocalScale: {x: 1.4526103, y: 1.4526103, z: 1.4526105}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2653840171912898298}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &4863362442310225935
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 162276849537940635}
m_Mesh: {fileID: 4300000, guid: e4959e002a47e2d45885c510266d636d, type: 2}
--- !u!23 &5348732139172174562
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 162276849537940635}
m_Enabled: 0
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &57484829182898907
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 162276849537940635}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: e4959e002a47e2d45885c510266d636d, type: 2}
--- !u!1 &237163526419955074
GameObject:
m_ObjectHideFlags: 0
@@ -143,7 +34,6 @@ Transform:
- {fileID: 1213903367290049457}
- {fileID: 5115618208096756319}
- {fileID: 4087501762797341499}
- {fileID: 4311722346832967919}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1722554146353478217
-23
View File
@@ -48,7 +48,6 @@ GameObject:
- component: {fileID: 1886932868310864665}
- component: {fileID: 6818077690923205151}
- component: {fileID: 2696975620091867110}
- component: {fileID: 2319329501012638020}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
@@ -124,28 +123,6 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &2319329501012638020
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1432700883719614557}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: 72d6dcd27b244a14db8236b47eea949b, type: 2}
--- !u!1 &1605960382197984269
GameObject:
m_ObjectHideFlags: 0
-23
View File
@@ -355,7 +355,6 @@ GameObject:
- component: {fileID: 8022290583310896104}
- component: {fileID: 7095869334588932929}
- component: {fileID: 4388768520658038665}
- component: {fileID: 3303088415430208345}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
@@ -431,28 +430,6 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &3303088415430208345
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5964155386603945467}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: a810d1f915af5ac4e8f29fe6d1c860ae, type: 2}
--- !u!1 &8485653319892060222
GameObject:
m_ObjectHideFlags: 0
-23
View File
@@ -183,7 +183,6 @@ GameObject:
- component: {fileID: 8699785317774812545}
- component: {fileID: 1619774552744806451}
- component: {fileID: 1642336561233507155}
- component: {fileID: 7426294853798879440}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
@@ -259,28 +258,6 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &7426294853798879440
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3567677589401859247}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: 63b4ebdd102be0f4297897ddad4da3ea, type: 2}
--- !u!1 &5306397819925356347
GameObject:
m_ObjectHideFlags: 0
-23
View File
@@ -220,7 +220,6 @@ GameObject:
- component: {fileID: 4806900295563345534}
- component: {fileID: 2608083044836976025}
- component: {fileID: 7400401023117931811}
- component: {fileID: 2943045924661244610}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
@@ -296,28 +295,6 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &2943045924661244610
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6095465457261515626}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: 030b82705050deb4397f5314d382eb57, type: 2}
--- !u!1 &6554793636294823945
GameObject:
m_ObjectHideFlags: 0
-23
View File
@@ -11,7 +11,6 @@ GameObject:
- component: {fileID: 6836681143920161925}
- component: {fileID: 2847497422737408215}
- component: {fileID: 7316274401608088614}
- component: {fileID: 1629699763935440240}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
@@ -87,28 +86,6 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &1629699763935440240
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 978247748052176817}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: e80ef4d88d5675d4abf45b94ddf84727, type: 2}
--- !u!1 &1207623610257076463
GameObject:
m_ObjectHideFlags: 0
-23
View File
@@ -205,7 +205,6 @@ GameObject:
- component: {fileID: 8056852165895731619}
- component: {fileID: 5717980926624631709}
- component: {fileID: 1816287466655669623}
- component: {fileID: 8182003877393767394}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
@@ -281,28 +280,6 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &8182003877393767394
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3691833553022461459}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: 506b97efd97d3134ab1478573294d72d, type: 2}
--- !u!1 &4725197459033648109
GameObject:
m_ObjectHideFlags: 0
-23
View File
@@ -11,7 +11,6 @@ GameObject:
- component: {fileID: 6100972977244074358}
- component: {fileID: 8406265550067961881}
- component: {fileID: 3698847989160730107}
- component: {fileID: 2624971715755208210}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
@@ -87,28 +86,6 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &2624971715755208210
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 795290371116926576}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: b357e906aab033d498be1fbfb36d0a48, type: 2}
--- !u!1 &1548953554318899352
GameObject:
m_ObjectHideFlags: 0
-23
View File
@@ -134,7 +134,6 @@ GameObject:
- component: {fileID: 8134321275215362894}
- component: {fileID: 8229299775838313540}
- component: {fileID: 5106730430569272475}
- component: {fileID: 5576203631695248188}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
@@ -210,28 +209,6 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &5576203631695248188
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1011581529230118655}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: 2663fb7a9239efb4687d17bb1f5bfd59, type: 2}
--- !u!1 &1160978665663325039
GameObject:
m_ObjectHideFlags: 0
-23
View File
@@ -328,7 +328,6 @@ GameObject:
- component: {fileID: 4594729107668821461}
- component: {fileID: 9094786863907103764}
- component: {fileID: 5367830372855388191}
- component: {fileID: 8902155689154062030}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
@@ -404,28 +403,6 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &8902155689154062030
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4856590923826132802}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: 20ed27fca939f3e4eab004fac8889a49, type: 2}
--- !u!1 &7091370855467591491
GameObject:
m_ObjectHideFlags: 0
-110
View File
@@ -143,7 +143,6 @@ Transform:
- {fileID: 642723427162609800}
- {fileID: 5468985526413160933}
- {fileID: 4305396298280240728}
- {fileID: 2374675958549553526}
- {fileID: 890310756070526932}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -427,115 +426,6 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &4363002964825893588
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2374675958549553526}
- component: {fileID: 4527544251728066118}
- component: {fileID: 5311223652641166228}
- component: {fileID: 3754629199141232990}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2374675958549553526
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4363002964825893588}
serializedVersion: 2
m_LocalRotation: {x: -0.009164956, y: -0.35673073, z: 0.033771332, w: 0.93355167}
m_LocalPosition: {x: 593.935, y: 8.849079, z: 1059.9131}
m_LocalScale: {x: 1.6639633, y: 1.6639631, z: 1.6639628}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 6620715533904588879}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &4527544251728066118
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4363002964825893588}
m_Mesh: {fileID: 4300000, guid: 7ef57348cc14e2c44b0d93d82309fb45, type: 2}
--- !u!23 &5311223652641166228
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4363002964825893588}
m_Enabled: 0
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &3754629199141232990
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4363002964825893588}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: 7ef57348cc14e2c44b0d93d82309fb45, type: 2}
--- !u!1 &4972250255338124789
GameObject:
m_ObjectHideFlags: 0
-110
View File
@@ -141,119 +141,9 @@ Transform:
- {fileID: 1612251013623532140}
- {fileID: 3893658919594854549}
- {fileID: 4582541177654313918}
- {fileID: 5517097883188089445}
- {fileID: 7879905404723781064}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1598138727650332108
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5517097883188089445}
- component: {fileID: 5043951339685173402}
- component: {fileID: 3695623971278613789}
- component: {fileID: 6306482458475048067}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5517097883188089445
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1598138727650332108}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0.47503158, z: -0, w: 0.87996876}
m_LocalPosition: {x: 70.279106, y: -14.453853, z: 307.1064}
m_LocalScale: {x: 0.41945174, y: 0.41945174, z: 0.41945174}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 6818785608557861497}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &5043951339685173402
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1598138727650332108}
m_Mesh: {fileID: 4300000, guid: ddc0695fd6ea2f04bb8012d070f14971, type: 2}
--- !u!23 &3695623971278613789
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1598138727650332108}
m_Enabled: 0
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &6306482458475048067
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1598138727650332108}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: ddc0695fd6ea2f04bb8012d070f14971, type: 2}
--- !u!1 &2388712936800771917
GameObject:
m_ObjectHideFlags: 0
-110
View File
@@ -1,114 +1,5 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &172793201247077112
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7608619978697582171}
- component: {fileID: 6406699908441070328}
- component: {fileID: 3536295598767213851}
- component: {fileID: 8712326172030274561}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &7608619978697582171
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 172793201247077112}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0.98544973, z: -0, w: 0.1699672}
m_LocalPosition: {x: -294.38223, y: -15.892957, z: 13.95909}
m_LocalScale: {x: 0.39123014, y: 0.3912302, z: 0.39123014}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4752216487722087006}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &6406699908441070328
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 172793201247077112}
m_Mesh: {fileID: 4300000, guid: e87c0edb5abf70047b61a962856e094a, type: 2}
--- !u!23 &3536295598767213851
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 172793201247077112}
m_Enabled: 0
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &8712326172030274561
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 172793201247077112}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: e87c0edb5abf70047b61a962856e094a, type: 2}
--- !u!1 &224338938491563564
GameObject:
m_ObjectHideFlags: 0
@@ -358,7 +249,6 @@ Transform:
- {fileID: 5731830492325550992}
- {fileID: 1618002668272441283}
- {fileID: 8486254419225748666}
- {fileID: 7608619978697582171}
- {fileID: 4265541440646157853}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-110
View File
@@ -32,119 +32,9 @@ Transform:
- {fileID: 1084874715169113141}
- {fileID: 1911635272754944718}
- {fileID: 6722884338247993433}
- {fileID: 2212218385651794187}
- {fileID: 1049162546028214497}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &787211151800135413
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2212218385651794187}
- component: {fileID: 5601456882205794911}
- component: {fileID: 5564988953748425229}
- component: {fileID: 2939736982135528873}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2212218385651794187
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 787211151800135413}
serializedVersion: 2
m_LocalRotation: {x: 0.019027056, y: -0.6309642, z: 0.047790635, w: 0.7741048}
m_LocalPosition: {x: -35.249825, y: -13.226669, z: 372.96506}
m_LocalScale: {x: 0.5297467, y: 0.5297468, z: 0.5297468}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 6475581097579970790}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &5601456882205794911
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 787211151800135413}
m_Mesh: {fileID: 4300000, guid: 53144361e2a90ed4e918b2f7dd90ceec, type: 2}
--- !u!23 &5564988953748425229
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 787211151800135413}
m_Enabled: 0
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &2939736982135528873
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 787211151800135413}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: 53144361e2a90ed4e918b2f7dd90ceec, type: 2}
--- !u!1 &2177137796390071311
GameObject:
m_ObjectHideFlags: 0
-110
View File
@@ -206,119 +206,9 @@ Transform:
- {fileID: 3146780185303420119}
- {fileID: 2683837799112924102}
- {fileID: 4023167349951248047}
- {fileID: 2250924196899347191}
- {fileID: 814446087563747713}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &4054812586826850141
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2250924196899347191}
- component: {fileID: 27496454628698759}
- component: {fileID: 4818895147758886611}
- component: {fileID: 8761252889811093874}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2250924196899347191
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4054812586826850141}
serializedVersion: 2
m_LocalRotation: {x: -0, y: 0.14449234, z: -0, w: 0.98950595}
m_LocalPosition: {x: 1546.2524, y: -90.55273, z: 49.631584}
m_LocalScale: {x: 2.211937, y: 2.211937, z: 2.211937}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2394903240699220014}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &27496454628698759
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4054812586826850141}
m_Mesh: {fileID: 4300000, guid: 365c467577a8ce44495eb488cd707559, type: 2}
--- !u!23 &4818895147758886611
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4054812586826850141}
m_Enabled: 0
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &8761252889811093874
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4054812586826850141}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: 365c467577a8ce44495eb488cd707559, type: 2}
--- !u!1 &4698689582247525187
GameObject:
m_ObjectHideFlags: 0
-110
View File
@@ -421,116 +421,6 @@ Transform:
- {fileID: 2477282569958296925}
- {fileID: 2033314129660300733}
- {fileID: 4063870959951636716}
- {fileID: 119630387473320254}
- {fileID: 3240762840728150681}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &8683381269437311901
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 119630387473320254}
- component: {fileID: 7588284220820280700}
- component: {fileID: 1569730407105585027}
- component: {fileID: 2122403810583017442}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &119630387473320254
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8683381269437311901}
serializedVersion: 2
m_LocalRotation: {x: 0.0000000015403034, y: 0.80459905, z: -0.0000000011367907, w: 0.59381855}
m_LocalPosition: {x: 3.3209138, y: -12.090382, z: -217.43988}
m_LocalScale: {x: 0.30777234, y: 0.3077724, z: 0.30777234}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4906358553693921576}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &7588284220820280700
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8683381269437311901}
m_Mesh: {fileID: 4300000, guid: c4d86c66a7bc42a41a047326db03bd43, type: 2}
--- !u!23 &1569730407105585027
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8683381269437311901}
m_Enabled: 0
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &2122403810583017442
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8683381269437311901}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: c4d86c66a7bc42a41a047326db03bd43, type: 2}
-23
View File
@@ -183,7 +183,6 @@ GameObject:
- component: {fileID: 6023750528364922969}
- component: {fileID: 1675674610606272278}
- component: {fileID: 3644559462862492686}
- component: {fileID: 892714618474195698}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
@@ -259,28 +258,6 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &892714618474195698
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 910907375157286189}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: cfeef2027856ec143a893613a15950e4, type: 2}
--- !u!1 &1284285541855030774
GameObject:
m_ObjectHideFlags: 0
-23
View File
@@ -97,7 +97,6 @@ GameObject:
- component: {fileID: 3517488898565542867}
- component: {fileID: 6804567931177696908}
- component: {fileID: 483334259580223868}
- component: {fileID: 7581865155386939781}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
@@ -173,28 +172,6 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &7581865155386939781
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2022610521592624190}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: e94e3e5769427bc4dad4eeaac6693048, type: 2}
--- !u!1 &2220754331846254575
GameObject:
m_ObjectHideFlags: 0
-23
View File
@@ -377,7 +377,6 @@ GameObject:
- component: {fileID: 3628204634392224807}
- component: {fileID: 7407604775797623577}
- component: {fileID: 2018968439192838242}
- component: {fileID: 4060312489625897955}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
@@ -453,28 +452,6 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &4060312489625897955
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4166214560089695016}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: f65e8a467899c784ea25d19d8228c591, type: 2}
--- !u!1 &7264933843951556929
GameObject:
m_ObjectHideFlags: 0
-23
View File
@@ -328,7 +328,6 @@ GameObject:
- component: {fileID: 6263052053779369840}
- component: {fileID: 5967094472632529714}
- component: {fileID: 5637013322931949624}
- component: {fileID: 7701157108966298395}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
@@ -404,28 +403,6 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &7701157108966298395
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6790567182685110026}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: 04d4d977225c4a14499618f0699a517e, type: 2}
--- !u!1 &7037754719911573491
GameObject:
m_ObjectHideFlags: 0
-23
View File
@@ -500,7 +500,6 @@ GameObject:
- component: {fileID: 5305523764593272813}
- component: {fileID: 678743268724862924}
- component: {fileID: 7162637954310658059}
- component: {fileID: 8888025865612421831}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
@@ -576,25 +575,3 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &8888025865612421831
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7227532073084794830}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: 656660013c2aead4db6ced3e1f1f3237, type: 2}
-23
View File
@@ -205,7 +205,6 @@ GameObject:
- component: {fileID: 4657129204170405192}
- component: {fileID: 2789277002866095687}
- component: {fileID: 3172534340014566673}
- component: {fileID: 7850312668348180432}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
@@ -281,28 +280,6 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &7850312668348180432
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2455993117267038559}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: a7c6e209885915e46ac22d6f50fd0675, type: 2}
--- !u!1 &2664225560426020003
GameObject:
m_ObjectHideFlags: 0
-23
View File
@@ -377,7 +377,6 @@ GameObject:
- component: {fileID: 690030851112034515}
- component: {fileID: 4738124538156305034}
- component: {fileID: 8972397950644697694}
- component: {fileID: 4579747403113463966}
m_Layer: 7
m_Name: CDBrushCollider
m_TagString: Untagged
@@ -453,28 +452,6 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!64 &4579747403113463966
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5554915942598611418}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4300000, guid: 5447b2d76b7572a4495a4bca699e28d8, type: 2}
--- !u!1 &5956056505884210667
GameObject:
m_ObjectHideFlags: 0
@@ -0,0 +1,165 @@
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
public class RemoveInvalidMeshFromFolder
{
private const float MinBoundsSize = 0.2f;
[MenuItem("Tools/Cleanup/Remove Invalid Meshes (Select Folder)")]
static void RemoveInvalidMeshesFromFolder()
{
string absFolder = EditorUtility.OpenFolderPanel(
"Select folder to clean prefabs (remove invalid MeshColliders)",
Application.dataPath,
""
);
if (string.IsNullOrEmpty(absFolder))
return;
if (!absFolder.StartsWith(Application.dataPath))
{
EditorUtility.DisplayDialog("Invalid Folder",
"Please select a folder inside your project's Assets folder.",
"OK");
return;
}
string relFolder = "Assets" + absFolder.Substring(Application.dataPath.Length);
string[] prefabGuids = AssetDatabase.FindAssets("t:Prefab", new[] { relFolder });
if (prefabGuids == null || prefabGuids.Length == 0)
{
EditorUtility.DisplayDialog("No Prefabs Found",
$"No prefabs found in the selected folder:\n{relFolder}",
"OK");
return;
}
int scanned = 0;
int modified = 0;
List<string> errors = new List<string>();
try
{
AssetDatabase.StartAssetEditing();
foreach (string guid in prefabGuids)
{
if (string.IsNullOrEmpty(guid))
continue;
string path = AssetDatabase.GUIDToAssetPath(guid);
if (string.IsNullOrEmpty(path))
continue;
scanned++;
GameObject instance = null;
try
{
instance = PrefabUtility.LoadPrefabContents(path);
}
catch (System.Exception ex)
{
errors.Add($"{path}: Failed to load - {ex.Message}");
continue;
}
if (instance == null)
{
errors.Add($"{path}: LoadPrefabContents returned null");
continue;
}
bool changed = false;
MeshCollider[] meshColliders = instance.GetComponentsInChildren<MeshCollider>(true);
if (meshColliders != null)
{
List<MeshCollider> toRemove = new List<MeshCollider>();
foreach (MeshCollider mc in meshColliders)
{
if (mc == null)
continue;
if (ShouldRemoveMeshCollider(mc, out string reason))
{
toRemove.Add(mc);
}
}
foreach (MeshCollider mc in toRemove)
{
if (mc != null)
{
Object.DestroyImmediate(mc);
changed = true;
}
}
}
if (changed)
{
try
{
PrefabUtility.SaveAsPrefabAsset(instance, path);
modified++;
}
catch (System.Exception ex)
{
errors.Add($"{path}: Failed to save - {ex.Message}");
}
}
PrefabUtility.UnloadPrefabContents(instance);
}
}
finally
{
AssetDatabase.StopAssetEditing();
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
string message = $"Scanned: {scanned}\nModified: {modified}";
if (errors.Count > 0)
{
message += $"\n\nErrors ({errors.Count}):\n" + string.Join("\n", errors.GetRange(0, Mathf.Min(errors.Count, 5)));
if (errors.Count > 5)
message += $"\n... and {errors.Count - 5} more";
}
EditorUtility.DisplayDialog("Remove Invalid Meshes - Finished", message, "OK");
}
static bool ShouldRemoveMeshCollider(MeshCollider mc, out string reason)
{
reason = null;
if (mc == null)
{
reason = "MeshCollider is null";
return true;
}
Mesh mesh = mc.sharedMesh;
if (mesh == null)
{
reason = "Mesh is null";
return true;
}
Vector3 size = mesh.bounds.size;
if (size.x < MinBoundsSize || size.y < MinBoundsSize || size.z < MinBoundsSize)
{
reason = $"Mesh bounds too small (x:{size.x:F3}, y:{size.y:F3}, z:{size.z:F3})";
return true;
}
return false;
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: a3d79841ca7d14a21b10f1657cf600af
+321 -74
View File
@@ -526,7 +526,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 0}
m_AnchoredPosition: {x: -323.59998, y: 328.6}
m_AnchoredPosition: {x: -353, y: 304}
m_SizeDelta: {x: 185.38, y: 185.38171}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2245409721410000391
@@ -645,10 +645,10 @@ RectTransform:
- {fileID: 4164631033889647644}
m_Father: {fileID: 3483809415181351540}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 0}
m_AnchoredPosition: {x: -357, y: 75}
m_SizeDelta: {x: 96, y: 52.5407}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 61.5, y: -318}
m_SizeDelta: {x: 96, y: 52.54065}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2091984348760918456
CanvasRenderer:
@@ -1852,7 +1852,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 0}
m_AnchoredPosition: {x: -60.5, y: 68.7}
m_AnchoredPosition: {x: -106, y: 127}
m_SizeDelta: {x: 78, y: 78}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4945594189386570527
@@ -3128,7 +3128,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 0}
m_AnchoredPosition: {x: -60.100098, y: 228.40002}
m_AnchoredPosition: {x: -105.6001, y: 286.7}
m_SizeDelta: {x: 76, y: 76}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &1896346771968462987
@@ -3827,6 +3827,142 @@ MonoBehaviour:
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &5727863043411723117
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1306231628402548473}
- component: {fileID: 7611469891124614779}
- component: {fileID: 8138679065215916556}
m_Layer: 0
m_Name: FPSText
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1306231628402548473
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5727863043411723117}
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: 6210342792191300609}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 100, y: 25}
m_SizeDelta: {x: 200, y: 50}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7611469891124614779
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5727863043411723117}
m_CullTransparentMesh: 1
--- !u!114 &8138679065215916556
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5727863043411723117}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: 000
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
m_sharedMaterial: {fileID: 9092487103257209053, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4291756287
m_fontColor: {r: 1, g: 0, b: 0.8118372, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 40
m_fontSizeBase: 40
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_TextWrappingMode: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 0
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_EmojiFallbackSupport: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &5885931642767984348
GameObject:
m_ObjectHideFlags: 0
@@ -4404,6 +4540,7 @@ Transform:
- {fileID: 3233441867675090637}
- {fileID: 330835371656537333}
- {fileID: 7148351193174662273}
- {fileID: 6210342792191300609}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1890210201668811196
@@ -4418,7 +4555,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d21c02a79936b334da12ef5379524df2, type: 3}
m_Name:
m_EditorClassIdentifier:
uiRoot: {fileID: 0}
_fpsText: {fileID: 8138679065215916556}
uiPrefabs: []
npsUI: {fileID: 8090791712930107248}
currentTargetNPCID: 0
@@ -5214,6 +5351,108 @@ MonoBehaviour:
- {fileID: 445184971459596056}
- {fileID: 3804662600613272361}
- {fileID: 1774515210692260948}
--- !u!1 &8644839137304674498
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6210342792191300609}
- component: {fileID: 3434319454937597182}
- component: {fileID: 2220022565094034758}
- component: {fileID: 2827532456117971684}
m_Layer: 0
m_Name: Canvas
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6210342792191300609
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8644839137304674498}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0, y: 0, z: 0}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1306231628402548473}
m_Father: {fileID: 2780428059708698453}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0}
--- !u!223 &3434319454937597182
Canvas:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8644839137304674498}
m_Enabled: 1
serializedVersion: 3
m_RenderMode: 0
m_Camera: {fileID: 0}
m_PlaneDistance: 100
m_PixelPerfect: 0
m_ReceivesEvents: 1
m_OverrideSorting: 0
m_OverridePixelPerfect: 0
m_SortingBucketNormalizedSize: 0
m_VertexColorAlwaysGammaSpace: 0
m_AdditionalShaderChannelsFlag: 25
m_UpdateRectTransformForStandalone: 0
m_SortingLayerID: 0
m_SortingOrder: 10
m_TargetDisplay: 0
--- !u!114 &2220022565094034758
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8644839137304674498}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
m_Name:
m_EditorClassIdentifier:
m_UiScaleMode: 1
m_ReferencePixelsPerUnit: 100
m_ScaleFactor: 1
m_ReferenceResolution: {x: 1920, y: 1080}
m_ScreenMatchMode: 0
m_MatchWidthOrHeight: 1
m_PhysicalUnit: 3
m_FallbackScreenDPI: 96
m_DefaultSpriteDPI: 96
m_DynamicPixelsPerUnit: 1
m_PresetInfoIsWorld: 0
--- !u!114 &2827532456117971684
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8644839137304674498}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreReversedGraphics: 1
m_BlockingObjects: 0
m_BlockingMask:
serializedVersion: 2
m_Bits: 4294967295
--- !u!1 &8902228212386757619
GameObject:
m_ObjectHideFlags: 0
@@ -5658,27 +5897,27 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMax.x
value: 0.5
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMax.y
value: 0.5
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMin.x
value: 0.5
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMin.y
value: 0.5
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_SizeDelta.x
value: 130.167
value: 130.16699
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_SizeDelta.y
value: 126.1988
value: 126.19879
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_LocalPosition.x
@@ -5710,11 +5949,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchoredPosition.x
value: 403
value: -557
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchoredPosition.y
value: -396
value: 144
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
@@ -6881,27 +7120,27 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMax.x
value: 0.5
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMax.y
value: 0.5
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMin.x
value: 0.5
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMin.y
value: 0.5
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_SizeDelta.x
value: 130.167
value: 130.16699
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_SizeDelta.y
value: 126.1988
value: 126.19879
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_LocalPosition.x
@@ -6933,11 +7172,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchoredPosition.x
value: 763
value: -197
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchoredPosition.y
value: -44
value: 496
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
@@ -10484,27 +10723,27 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMax.x
value: 0.5
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMax.y
value: 0.5
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMin.x
value: 0.5
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMin.y
value: 0.5
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_SizeDelta.x
value: 130.167
value: 130.16699
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_SizeDelta.y
value: 126.1988
value: 126.19879
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_LocalPosition.x
@@ -10536,11 +10775,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchoredPosition.x
value: 846
value: -114
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchoredPosition.y
value: 124
value: 664
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
@@ -10882,7 +11121,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 8435310359341866937, guid: b5a4a3ed5bf0e5a49ba0f89d26e1f36e, type: 3}
propertyPath: m_AnchoredPosition.y
value: -25.33552
value: -25.335571
objectReference: {fileID: 0}
- target: {fileID: 8579427623307909814, guid: b5a4a3ed5bf0e5a49ba0f89d26e1f36e, type: 3}
propertyPath: m_AnchorMax.y
@@ -11000,27 +11239,27 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMax.x
value: 0.5
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMax.y
value: 0.5
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMin.x
value: 0.5
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMin.y
value: 0.5
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_SizeDelta.x
value: 130.167
value: 130.16699
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_SizeDelta.y
value: 126.1988
value: 126.19879
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_LocalPosition.x
@@ -11052,11 +11291,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchoredPosition.x
value: 680
value: -280
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchoredPosition.y
value: 125
value: 665
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
@@ -11117,27 +11356,27 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMax.x
value: 0.5
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMax.y
value: 0.5
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMin.x
value: 0.5
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMin.y
value: 0.5
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_SizeDelta.x
value: 130.167
value: 130.16699
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_SizeDelta.y
value: 126.1988
value: 126.19879
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_LocalPosition.x
@@ -11169,11 +11408,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchoredPosition.x
value: 351
value: -609
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchoredPosition.y
value: -282
value: 258
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
@@ -11419,7 +11658,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 2487042404357809237, guid: 4b2c2bde3e2945e4ba4516d08d755aeb, type: 3}
propertyPath: m_Enabled
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6500472629937108760, guid: 4b2c2bde3e2945e4ba4516d08d755aeb, type: 3}
propertyPath: m_Name
@@ -11429,6 +11668,14 @@ PrefabInstance:
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7640072662976260491, guid: 4b2c2bde3e2945e4ba4516d08d755aeb, type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8819184454638197523, guid: 4b2c2bde3e2945e4ba4516d08d755aeb, type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
@@ -11461,27 +11708,27 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMax.x
value: 0.5
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMax.y
value: 0.5
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMin.x
value: 0.5
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMin.y
value: 0.5
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_SizeDelta.x
value: 130.167
value: 130.16699
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_SizeDelta.y
value: 126.1988
value: 126.19879
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_LocalPosition.x
@@ -11513,11 +11760,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchoredPosition.x
value: 478
value: -482
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchoredPosition.y
value: -59
value: 481
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
@@ -12050,27 +12297,27 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMax.x
value: 0.5
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMax.y
value: 0.5
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMin.x
value: 0.5
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMin.y
value: 0.5
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_SizeDelta.x
value: 130.167
value: 130.16699
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_SizeDelta.y
value: 126.1988
value: 126.19879
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_LocalPosition.x
@@ -12102,11 +12349,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchoredPosition.x
value: 621
value: -339
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchoredPosition.y
value: -20
value: 520
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
@@ -12652,27 +12899,27 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMax.x
value: 0.5
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMax.y
value: 0.5
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMin.x
value: 0.5
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchorMin.y
value: 0.5
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_SizeDelta.x
value: 130.167
value: 130.16699
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_SizeDelta.y
value: 126.1988
value: 126.19879
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_LocalPosition.x
@@ -12704,11 +12951,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchoredPosition.x
value: 371
value: -589
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_AnchoredPosition.y
value: -149
value: 391
objectReference: {fileID: 0}
- target: {fileID: 5717981154351234976, guid: 8586a375545487f43b57c6ffdce6fbfd, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
@@ -16,7 +16,7 @@ RenderTexture:
m_Height: 512
m_AntiAliasing: 1
m_MipCount: -1
m_DepthStencilFormat: 0
m_DepthStencilFormat: 90
m_ColorFormat: 12
m_MipMap: 0
m_GenerateMips: 1
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: aa2ec4fb3e3ae4843bcc25ec13c56761
guid: 2af08acf9536b4837b519f05326c9080
folderAsset: yes
DefaultImporter:
externalObjects: {}
-3
View File
@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d367fa56162cf045cb9f046aa3953821a7011bb15c33b5a2beaaba5283f5e2d9
size 21448
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:60c9fc32910746f134c7ade2390c674afb51eae2d258e8292b0bb9e817d02732
size 282839
+2 -2
View File
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:bd882a6bec1d1d08efbd9107424f7cb7514358179a64cc2bbd09ee3eeada2c30
size 107449
oid sha256:486a1814b7c89098f245397c87a04b43c8b9d7b906d4a7de20930badea5292fb
size 107133
@@ -13,10 +13,23 @@ namespace BrewMonster.Scripts
{
private bool _isInitialized = false;
private Dictionary<string, AsyncOperationHandle<GameObject>> _loadedAssets = new();
private Dictionary<string, AsyncOperationHandle<GameObject>> _loadedPrefabAssets = new();
private Dictionary<string, AsyncOperationHandle<TextAsset>> _loadedTextAssets = new();
/// <summary>
/// Whenever we release an asset, we store the timestamp of the release.
/// After a certain amount of time, we will release the asset from the cache.
/// </summary>
private Dictionary<string, float> _releaseAssetTimestamps = new();
[SerializeField]private float _releaseAssetTimeout = 10f;
public event Action OnDispose;
/// <summary>Get the count of currently loaded assets.</summary>
public int LoadedPrefabCount => _loadedPrefabAssets.Count;
public bool IsInitialized() => _isInitialized;
protected override void Initialize()
{
base.Initialize();
@@ -24,12 +37,32 @@ namespace BrewMonster.Scripts
Addressables.InitializeAsync().Completed += OnInitializeComplete;
}
public bool IsInitialized()
#region Unity lifecycle
private List<string> _assetToForceRelease = new();
private void Update()
{
return _isInitialized;
}
foreach (var kvp in _releaseAssetTimestamps)
{
if (Time.realtimeSinceStartup - kvp.Value > _releaseAssetTimeout)
{
ForceReleaseAsset(kvp.Key);
_assetToForceRelease.Add(kvp.Key);
}
}
void OnInitializeComplete(AsyncOperationHandle<IResourceLocator> handle)
if (_assetToForceRelease.Count > 0)
{
for (int i = 0; i < _assetToForceRelease.Count; i++)
{
ForceReleaseAsset(_assetToForceRelease[i]);
}
_assetToForceRelease.Clear();
}
}
#endregion
#region private functions
private void OnInitializeComplete(AsyncOperationHandle<IResourceLocator> handle)
{
if (handle.Status == AsyncOperationStatus.Succeeded)
{
@@ -43,6 +76,16 @@ namespace BrewMonster.Scripts
}
}
private void RemoveFromReleaseAssetDictionary(string assetPath)
{
if (_releaseAssetTimestamps.ContainsKey(assetPath))
{
_releaseAssetTimestamps.Remove(assetPath);
}
}
#endregion
#region public functions
/// <summary>
/// Load a text asset asynchronously.
/// NOTE: The key must match the Addressables "Address" (or another valid key like a label/GUID).
@@ -52,6 +95,9 @@ namespace BrewMonster.Scripts
/// <returns></returns>
public async Task<TextAsset> LoadTextAssetAsync(string assetPath)
{
// remove the asset from the release timestamp dictionary. So it won't be released.
RemoveFromReleaseAssetDictionary(assetPath);
if (_loadedTextAssets.ContainsKey(assetPath))
{
return _loadedTextAssets[assetPath].Result;
@@ -70,72 +116,6 @@ namespace BrewMonster.Scripts
}
}
private static IEnumerable<string> GetCandidateKeys(string assetPath)
{
if (string.IsNullOrWhiteSpace(assetPath))
{
yield break;
}
// Exact key (what caller asked for)
yield return assetPath;
// Common fallback used by this repo's Addressables settings: full asset path address.
// Example in `Assets/AddressableAssetsData/AssetGroups/configuration.asset`:
// m_Address: Assets/Addressable/elements.txt
if (!assetPath.Contains("/") && !assetPath.Contains("\\"))
{
yield return $"Assets/Addressable/{assetPath}";
}
}
private static void LogSimilarKeys(string needle)
{
// Helpful diagnostics in dev builds: show a few keys containing the substring.
try
{
var lower = needle?.ToLowerInvariant();
if (string.IsNullOrEmpty(lower))
{
return;
}
const int max = 20;
var matches = new List<string>(max);
foreach (var locator in Addressables.ResourceLocators)
{
foreach (var keyObj in locator.Keys)
{
if (keyObj is not string keyStr)
{
continue;
}
if (!keyStr.ToLowerInvariant().Contains(lower))
{
continue;
}
matches.Add(keyStr);
if (matches.Count >= max)
{
goto Done;
}
}
}
Done:
if (matches.Count > 0)
{
BMLogger.LogWarning($"AddressableManager: Similar Addressables keys for '{needle}': {string.Join(", ", matches)}");
}
}
catch
{
// ignore diagnostics failures
}
}
/// <summary>
/// Load an asset asynchronously. The address should look like this: "models/npcs/npc/魅灵首领/魅灵首领/魅灵首领.prefab"
@@ -143,16 +123,20 @@ namespace BrewMonster.Scripts
/// <returns></returns>
public async Task<GameObject> LoadPrefabAsync(string assetPath)
{
if (_loadedAssets.ContainsKey(assetPath))
// remove the asset from the release timestamp dictionary. So it won't be released.
RemoveFromReleaseAssetDictionary(assetPath);
if (_loadedPrefabAssets.ContainsKey(assetPath))
{
return _loadedAssets[assetPath].Result;
BMLogger.Log($"AddressableManager: Asset already loaded: {assetPath} is valid: (${_loadedPrefabAssets[assetPath].Result != null})");
return _loadedPrefabAssets[assetPath].Result;
}
try
{
var handle = Addressables.LoadAssetAsync<GameObject>(assetPath);
await handle.Task;
_loadedAssets[assetPath] = handle;
_loadedPrefabAssets[assetPath] = handle;
return handle.Result;
}
catch (System.Exception e)
@@ -163,23 +147,40 @@ namespace BrewMonster.Scripts
}
/// <summary>
/// When the asset is no longer needed, call this method to unload it.
/// When the asset is no longer needed, call this method to unload it. <br/>
/// The asset will be released after a certain amount of time. <br/>
/// </summary>
/// <param name="assetPath">The asset path used when loading the asset</param>
public void ReleaseAsset(string assetPath)
{
if (_loadedAssets.TryGetValue(assetPath, out var handle))
// If multiple release requests are made for the same asset, we only need to store the earliest release time.
float currentReleaseTime = Time.realtimeSinceStartup;
if (_releaseAssetTimestamps.TryGetValue(assetPath, out var timeStamp))
{
if (handle.IsValid())
currentReleaseTime = Mathf.Min(currentReleaseTime, timeStamp);
}
_releaseAssetTimestamps[assetPath] = currentReleaseTime;
}
public void ForceReleaseAsset(string assetPath)
{
if (_loadedPrefabAssets.TryGetValue(assetPath, out var loadedPrefabHandle))
{
if (loadedPrefabHandle.IsValid())
{
Addressables.Release(handle);
Addressables.Release(loadedPrefabHandle);
}
_loadedAssets.Remove(assetPath);
_loadedPrefabAssets.Remove(assetPath);
BMLogger.Log($"AddressableManager: Released asset: {assetPath}");
}
else
else if (_loadedTextAssets.TryGetValue(assetPath, out var loadedTextHandle))
{
BMLogger.LogWarning($"AddressableManager: Asset not found in cache: {assetPath}");
if (loadedTextHandle.IsValid())
{
Addressables.Release(loadedTextHandle);
}
_loadedTextAssets.Remove(assetPath);
BMLogger.Log($"AddressableManager: Released text asset: {assetPath}");
}
}
@@ -200,14 +201,14 @@ namespace BrewMonster.Scripts
/// </summary>
public void ReleaseAllAssets()
{
foreach (var kvp in _loadedAssets)
foreach (var kvp in _loadedPrefabAssets)
{
if (kvp.Value.IsValid())
{
Addressables.Release(kvp.Value);
}
}
_loadedAssets.Clear();
_loadedPrefabAssets.Clear();
BMLogger.Log("AddressableManager: Released all assets");
}
@@ -218,13 +219,11 @@ namespace BrewMonster.Scripts
/// <returns>True if the asset is loaded</returns>
public bool IsAssetLoaded(string assetPath)
{
return _loadedAssets.ContainsKey(assetPath) && _loadedAssets[assetPath].IsValid();
return _loadedPrefabAssets.ContainsKey(assetPath) && _loadedPrefabAssets[assetPath].IsValid();
}
#endregion
/// <summary>
/// Get the count of currently loaded assets.
/// </summary>
public int LoadedAssetCount => _loadedAssets.Count;
private void OnDestroy()
{
@@ -4,7 +4,7 @@ using UnityEngine.SceneManagement;
namespace BrewMonster
{
public class BoostrapSceneController : MonoBehaviour
public class BootstrapSceneController : MonoBehaviour
{
[SerializeField] private string _nextSceneName;
@@ -66,7 +66,7 @@ namespace BrewMonster
else
{
_cinemachineCamera.Follow = CECGameRun.Instance.GetHostPlayer().transform;
_cinemachineCamera.ForceCameraPosition(CECGameRun.Instance.GetHostPlayer().transform.position, Quaternion.identity);
_cinemachineCamera.ForceCameraPosition(CECGameRun.Instance.GetHostPlayer().ObjectPosition, Quaternion.identity);
orbital.HorizontalAxis.Value = 208;
orbital.VerticalAxis.Value = -268;
}
@@ -0,0 +1,17 @@
using Unity.Cinemachine;
using UnityEngine;
namespace BrewMonster.Scripts
{
public class CameraProvider : MonoSingleton<CameraProvider>
{
[SerializeField]private CinemachineBrain _cinemachineBrain;
public CinemachineBrain CinemachineBrain
{
get => _cinemachineBrain;
private set => _cinemachineBrain = value;
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 536ca7dcb1b8e4e0fae1bb97ef326ed3
@@ -0,0 +1,12 @@
using UnityEngine;
namespace BrewMonster.Scripts
{
public class ConsistentObjectContainer : MonoBehaviour
{
private void Awake()
{
DontDestroyOnLoad(gameObject);
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 7e565f914738e4e68a1c2688272d0ee5
@@ -1,3 +1,4 @@
using BrewMonster.Scripts;
using Unity.Cinemachine;
using UnityEngine;
@@ -21,7 +22,7 @@ public class LookAtCamera : MonoBehaviour
{
if (targetCamera == null)
{
var brain = FindFirstObjectByType<CinemachineBrain>();
var brain = CameraProvider.Instance.CinemachineBrain;
if (brain != null)
targetCamera = brain.OutputCamera;
if (targetCamera == null && Camera.main != null)
@@ -539,10 +539,11 @@ namespace BrewMonster
}
public void SpawnGFX(long IDTarget)
{
#if UNITY_EDITOR
BMLogger.LogError("HoangDev: Load A3DSkillGfxComposer GFX name: " + flyGfxName);
BMLogger.LogError("HoangDev: Load A3DSkillGfxComposer GFX name: " + hitGfxName);
BMLogger.LogError("HoangDev: Load A3DSkillGfxComposer GFX name: " + hitGrdGfxName);
#endif
var obj = EC_ManMessageMono.Instance.GetObject(IDTarget, 0);
if (obj != null && flyGFX != null)
{
@@ -1300,7 +1300,7 @@ namespace BrewMonster.Scripts
protected virtual uint GetMoveRelDirMask()
{
// TODO: hook up CECHostPlayer move-direction flags when available.
return 0;
return m_pHost.m_dwMoveRelDir;
}
private void UpdateFacingFromDelta(A3DVECTOR3 nextPos)
@@ -158,19 +158,15 @@ namespace BrewMonster.Scripts.Managers
{
if (buttons == null)
{
Debug.LogWarning($"[UpdatePackageCooldowns] Buttons list is null for package {package}");
return;
}
var items = model.GetInventoryData(package);
if (items == null)
{
Debug.LogWarning($"[UpdatePackageCooldowns] Items dictionary is null for package {package}");
return;
}
Debug.Log($"[UpdatePackageCooldowns] Updating package {package} with {buttons.Count} buttons and {items.Count} items");
for (int slot = 0; slot < buttons.Count; slot++)
{
var button = buttons[slot];
@@ -1088,6 +1088,16 @@ namespace BrewMonster.Scripts.Managers
/// </summary>
public virtual bool SetItemInfo(byte[] pInfoData, int iDataLen)
{
if (pInfoData != null && iDataLen > 0)
{
this.Content = new byte[iDataLen];
Buffer.BlockCopy(pInfoData, 0, this.Content, 0, iDataLen);
}
else
{
this.Content = null;
}
m_bNeedUpdate = false;
m_bUpdating = false;
m_strDesc = string.Empty;
@@ -20,6 +20,11 @@ public class CECObject : MonoBehaviour
protected Quaternion targetRotation;
protected Quaternion startRotation; // Store starting rotation for Slerp
protected Vector3 g_vAxisY = Vector3.up;
protected Transform _objectTransform;
protected Vector3 objectPosition;
public Vector3 ObjectPosition { get => objectPosition; }
// Class ID
public static class Class_ID
{
@@ -137,13 +142,20 @@ public class CECObject : MonoBehaviour
return v / mag;
}
public A3DVECTOR3 GetPos()
/// <summary>
/// Get the position of the object. <br/>
/// Consider NOT use the transform position if you get the data from outside of the MainThread.
/// </summary>
/// <param name="useTransform">If true, use the transform position, otherwise use the object position for slighly better performance.</param>
/// <returns></returns>
public A3DVECTOR3 GetPos(bool useTransform = true)
{
return EC_Utility.ToA3DVECTOR3(transform.position);
return EC_Utility.ToA3DVECTOR3(useTransform ? _objectTransform.position : objectPosition);
}
public Vector3 GetPosVector3()
public Vector3 GetPosVector3(bool useTransform = true)
{
return transform.position;
return useTransform ? _objectTransform.position : objectPosition;
}
// Turn around object and face to specified object
@@ -189,6 +201,11 @@ public class CECObject : MonoBehaviour
}
protected virtual void Update()
{
if (_objectTransform == null)
{
_objectTransform = transform;
}
objectPosition = _objectTransform.position;
if (m_bAdjustOrient)
AdjustOrientation(Time.deltaTime);
}
@@ -245,7 +245,7 @@ namespace BrewMonster.Scripts
{
// Fallback: assume maps/{mapName}/movemap/ structure
// 回退:假设 maps/{mapName}/movemap/ 结构
Debug.LogWarning($"[CECIntelligentRoute] ResolveAddressableBytes: cannot resolve relative key '{key}' with basePath '{basePath}'");
BMLogger.LogWarning($"[CECIntelligentRoute] ResolveAddressableBytes: cannot resolve relative key '{key}' with basePath '{basePath}'");
return null;
}
}
@@ -279,18 +279,18 @@ namespace BrewMonster.Scripts
// it means the files need to be properly configured in Addressables.
// 如果资产存在但注册为 DefaultAsset(文件夹)而不是 TextAsset
// 这意味着文件需要在 Addressables 中正确配置。
Debug.LogError($"[CECIntelligentRoute] ResolveAddressableBytes: Asset '{address}' is registered as DefaultAsset (folder) instead of TextAsset. " +
BMLogger.LogError($"[CECIntelligentRoute] ResolveAddressableBytes: Asset '{address}' is registered as DefaultAsset (folder) instead of TextAsset. " +
$"Please ensure the file is properly imported as a TextAsset in Unity and marked as Addressable. " +
$"You may need to: 1) Select the file in Unity, 2) Set Import Type to 'Text' in Inspector, 3) Mark as Addressable. Error: {ex.Message}");
return null;
}
Debug.LogWarning($"[CECIntelligentRoute] ResolveAddressableBytes: failed to load '{address}' (asset is null or has no bytes)");
BMLogger.LogWarning($"[CECIntelligentRoute] ResolveAddressableBytes: failed to load '{address}' (asset is null or has no bytes)");
return null;
}
catch (Exception ex)
{
Debug.LogWarning($"[CECIntelligentRoute] ResolveAddressableBytes failed for '{key}': {ex.Message}");
BMLogger.LogWarning($"[CECIntelligentRoute] ResolveAddressableBytes failed for '{key}': {ex.Message}");
return null;
}
}
@@ -309,7 +309,7 @@ namespace BrewMonster.Scripts
ResetSearch();
if (m_moveAgents.Count == 0)
{
if (DEBUG_AUTOPF) Debug.LogWarning("[CECIntelligentRoute] Search: no moveAgents (uninitialized)");
if (DEBUG_AUTOPF) BMLogger.LogWarning("[CECIntelligentRoute] Search: no moveAgents (uninitialized)");
return SearchResult.enumSearchUnInitialized;
}
@@ -364,7 +364,7 @@ namespace BrewMonster.Scripts
{
if (DEBUG_AUTOPF)
{
Debug.LogWarning($"[CECIntelligentRoute] Search: no path. start=({start.x:F2},{start.y:F2},{start.z:F2}) end=({end.x:F2},{end.y:F2},{end.z:F2}) agentIndex={idx}");
BMLogger.LogWarning($"[CECIntelligentRoute] Search: no path. start=({start.x:F2},{start.y:F2},{start.z:F2}) end=({end.x:F2},{end.y:F2},{end.z:F2}) agentIndex={idx}");
}
ResetSearch();
return SearchResult.enumSearchNoPath;
@@ -374,7 +374,7 @@ namespace BrewMonster.Scripts
m_iCurDest = 0;
if (DEBUG_AUTOPF)
{
Debug.Log($"[CECIntelligentRoute] Search: success pathCount={agent.GetPathCount()} start=({start.x:F2},{start.z:F2}) end=({end.x:F2},{end.z:F2})");
BMLogger.Log($"[CECIntelligentRoute] Search: success pathCount={agent.GetPathCount()} start=({start.x:F2},{start.z:F2}) end=({end.x:F2},{end.z:F2})");
}
return SearchResult.enumSearchSuccess;
}
@@ -112,7 +112,7 @@ namespace BrewMonster
int m_iBuddyId;
int m_idCandBuddy; // ID of candidate buddy
EC_ManPlayer m_pPlayerMan => EC_ManMessageMono.Instance?.GetECManPlayer; // Player manager
protected Transform playerTransform => transform;
protected Transform playerTransform => _objectTransform ??= transform;
public MOVECONST m_MoveConst; // Const used when moving control
public Move_Mode m_MoveMode;
+10 -7
View File
@@ -108,7 +108,7 @@ namespace BrewMonster
static LayerMask UsedMask_Ground() => TerrainMask;
public static bool CollideWithEnv(ref env_trace_t pEnvTrc)
public static bool CollideWithEnv(ref env_trace_t pEnvTrc, bool isNeedCheckGr = true)
{
pEnvTrc.fFraction = 100.0f;
pEnvTrc.bStartSolid = false;
@@ -150,10 +150,13 @@ namespace BrewMonster
dir = vTerStart + vDelta;
countHits = 0;
countHits = Physics.RaycastNonAlloc(vStart, Vector3.down, fHitsTerrain, vExt.y, TerrainMask);
if(countHits > 0 && fHitsTerrain[0].point.y >= vTerStart.y)
if (isNeedCheckGr)
{
vTerStart.y = fHitsTerrain[0].point.y;
countHits = Physics.RaycastNonAlloc(vStart, Vector3.down, fHitsTerrain, vExt.y, TerrainMask);
if(countHits > 0 && fHitsTerrain[0].point.y >= vTerStart.y)
{
vTerStart.y = fHitsTerrain[0].point.y;
}
}
fHitsTerrain = new RaycastHit[5];
countHits = Physics.RaycastNonAlloc(vTerStart, dir.normalized, fHitsTerrain, vDelta.magnitude, TerrainMask);
@@ -466,7 +469,7 @@ namespace BrewMonster
float VEL_EPSILON = 1E-4f;
float DIST_EPSILON = 1e-4f;
float NORMAL_EPSILON = 1e-2f;
float MAX_TRY = 1;
float MAX_TRY = 4;
float VEL_MAX_SPEED = 200.0f;
float VEL_REFLECT = 0.3f;
@@ -586,7 +589,7 @@ namespace BrewMonster
tmpInfo.vDelta = vDelta;
tmpInfo.vTerStart = vStart;
tmpInfo.vTerStart.y -= vExt.y;
bool bMove = !CollideWithEnv(ref tmpInfo);
bool bMove = !CollideWithEnv(ref tmpInfo, false);
if (!bMove)
{
vDelta *= tmpInfo.fFraction;
@@ -736,7 +739,7 @@ namespace BrewMonster
return false;
}
pTrc.vEnd = trcInfo.vStart + trcInfo.vDelta * trcInfo.fFraction;
pTrc.vEnd.y += 0.2f;
pTrc.vEnd.y += 0.05f; // need add delta Y for Support Plane when check with brush mask.
pTrc.vHitNormal = trcInfo.normal;
float fUp = pTrc.vExt.y;
@@ -3,9 +3,11 @@ using BrewMonster.Network;
using BrewMonster.Scripts;
using BrewMonster.Scripts.Task;
using CSNetwork.GPDataType;
using Cysharp.Threading.Tasks;
using System;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using static CECNPC;
@@ -18,6 +20,8 @@ public class CECNPCServer : CECNPC
private IconTaskType m_TaskIcon = IconTaskType.QI_NONE;
private CECCounter m_TaskCounter = new CECCounter();
private bool _needUpdateTaskIcon = false;
public override void SetUpCECNPC(CECNPCMan pNPCMan)
{
base.SetUpCECNPC(pNPCMan);
@@ -68,13 +72,29 @@ public class CECNPCServer : CECNPC
return true;
}
protected override void Awake()
{
base.Awake();
var destroyToken = this.GetCancellationTokenOnDestroy();
UniTask.RunOnThreadPool(UpdateCurTaskIconProcess, false, cancellationToken: destroyToken).Forget();
}
protected override void Update()
{
base.Update();
if (m_TaskCounter.IncCounter(Time.deltaTime * 1000))
if (_needUpdateTaskIcon)
{
m_TaskCounter.Reset();
UpdateTaskIconUI();
_needUpdateTaskIcon = false;
}
}
private async UniTask UpdateCurTaskIconProcess()
{
while (true)
{
await Task.Delay(1000);
UpdateCurTaskIcon();
}
}
@@ -165,7 +185,7 @@ public class CECNPCServer : CECNPC
{
m_TaskIcon = IconTaskType.QI_IN_K;
BMLogger.Log($"[UpdateCurTaskIcon] Set icon QI_IN_K for task {idTask}");
UpdateTaskIconUI();
_needUpdateTaskIcon = true;
return;
}
else if (pTaskTemp.GetType() == (uint)ENUM_TASK_TYPE.enumTTEvent || pTaskTemp.GetType() == (uint)ENUM_TASK_TYPE.enumTTDaily)
@@ -211,7 +231,7 @@ public class CECNPCServer : CECNPC
m_TaskIcon = IconTaskType.QI_IN_TYPE1;
BMLogger.Log($"[UpdateCurTaskIcon] Set complete icon {m_TaskIcon}");
UpdateTaskIconUI();
_needUpdateTaskIcon = true;
return;
}
@@ -255,7 +275,7 @@ public class CECNPCServer : CECNPC
if (pTaskTemp.IsKeyTask())
{
m_TaskIcon = IconTaskType.QI_OUT_K;
UpdateTaskIconUI();
_needUpdateTaskIcon = true;
return;
}
else if (pTaskTemp.GetType() == (uint)ENUM_TASK_TYPE.enumTTEvent || pTaskTemp.GetType() == (uint)ENUM_TASK_TYPE.enumTTDaily)
@@ -304,7 +324,7 @@ public class CECNPCServer : CECNPC
m_TaskIcon = IconTaskType.QI_OUT_N;
//BMLogger.Log($"[UpdateCurTaskIcon] Final icon {m_TaskIcon}, taskFlag={taskFlag}");
UpdateTaskIconUI();
_needUpdateTaskIcon = true;
}
private void UpdateTaskIconUI()
@@ -1,8 +1,7 @@
fileFormatVersion: 2
guid: e87c0edb5abf70047b61a962856e094a
NativeFormatImporter:
guid: d0c06c588e2a6442488a3542551fb243
DefaultImporter:
externalObjects: {}
mainObjectFileID: 4300000
userData:
assetBundleName:
assetBundleVariant:
@@ -26,6 +26,8 @@ namespace CSNetwork
public Queue<ECMSG> m_MsgList = new Queue<ECMSG>();
private IMsgHandler m_tempHandler; // so we don't have to allocate a new one every time
private static ECMSG _currentMsg;
private EC_ManMessage() { }
/// <summary>Post a message to the message queue</summary>
@@ -63,16 +65,16 @@ namespace CSNetwork
int i, count = Instance.m_MsgList.Count;
for (i = 0; i < count; i++)
{
ECMSG msg = Instance.m_MsgList.Dequeue();
if (!Instance.m_MsgHandlerList.ContainsKey(msg.iManager))
_currentMsg = Instance.m_MsgList.Dequeue();
if (!Instance.m_MsgHandlerList.ContainsKey(_currentMsg.iManager))
{
BMLogger.LogError("Did not find handler ID: " + msg.iManager);
BMLogger.LogError("Did not find handler ID: " + _currentMsg.iManager);
continue;
}
Instance.m_tempHandler = Instance.m_MsgHandlerList[msg.iManager];
Instance.m_tempHandler = Instance.m_MsgHandlerList[_currentMsg.iManager];
if (Instance.m_tempHandler != null)
{
Instance.m_tempHandler.ProcessMessage(msg);
Instance.m_tempHandler.ProcessMessage(_currentMsg);
}
}
}
@@ -1305,9 +1305,17 @@ namespace CSNetwork.GPDataType
public uint count;
public ushort crc;
public ushort content_length;
public byte[] content;
//public byte[] content;
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct cmd_empty_item_slot
{
public byte byPackage;
public byte bySlot;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct cmd_get_own_money
{
@@ -512,14 +512,14 @@ namespace CSNetwork
{
_logger.Log(LogType.Debug,
$"Sending protocol: {protocol.GetType().Name} (Detail: {protocol.ToString})");
Debug.Log($"[GameSession] Sending protocol: {protocol.GetType().Name} (Type: {protocol.GetPType()})");
BMLogger.Log($"[GameSession] Sending protocol: {protocol.GetType().Name} (Type: {protocol.GetPType()})");
_networkManager.Send(protocol);
complete?.Invoke();
}
else
{
_logger.Log(LogType.Warning, $"Cannot send protocol ({protocol.GetType().Name}), not connected.");
Debug.LogError($"[GameSession] Cannot send protocol ({protocol.GetType().Name}), not connected.");
BMLogger.LogError($"[GameSession] Cannot send protocol ({protocol.GetType().Name}), not connected.");
}
}
@@ -150,7 +150,7 @@ namespace BrewMonster.Network
public void c2s_SendCmdStopMove(in Vector3 vDest, float fSpeed, int iMoveMode,
byte byDir, ushort wStamp, int iTime)
{
Debug.LogWarning("HoangDev : c2s_SendCmdStopMove");
BMLogger.LogWarning("HoangDev : c2s_SendCmdStopMove");
Instance._gameSession.c2s_SendCmdStopMove(vDest, fSpeed, iMoveMode, byDir, wStamp, iTime);
}
public void c2s_CmdPlayerMove(in Vector3 vCurPos, in Vector3 vDest,
@@ -347,6 +347,17 @@ namespace BrewMonster.Network
{
return _gameSession.GetRoleInfo();
}
public string GetWorldInstanceName()
{
switch (_gameSession.GetRoleInfo().worldtag)
{
case 161:
return "a61";
default:
return "a61";
}
}
/// <summary>Make sure username and password is set before calling this method</summary>
private async Task ConnectAsync(string ip, int port)
{
@@ -376,7 +387,7 @@ namespace BrewMonster.Network
public static void EnterWorldAsync(RoleInfo roleInfo, Action callback = null)
{
Debug.Log("EnterWorldAsync !!!!! nay ");
BMLogger.Log("EnterWorldAsync !!!!! nay ");
Instance._gameSession.EnterWorldAsync(roleInfo, callback);
}
public static void SendChatData(byte cChannel, in string szMsg, int iPack, int iSlot)
@@ -629,13 +640,13 @@ namespace BrewMonster.Network
Instance._gameSession.GetRoleCustomizeData(iNumRole, aRoleIDs);
}
public void LoadScene(string sceneName, LoadSceneMode mode, Action<bool> actDone)
public void LoadScene(string sceneName, LoadSceneMode mode, Action<float> actProgress, Action<bool> actDone)
{
// SceneLoadService.Load(sceneName, mode, actDone);
StartCoroutine(LoadSceneCoroutine(sceneName, mode, actDone));
StartCoroutine(LoadSceneCoroutine(sceneName, mode, actProgress, actDone));
}
private IEnumerator LoadSceneCoroutine(string sceneName, LoadSceneMode mode, Action<bool> actDone)
private IEnumerator LoadSceneCoroutine(string sceneName, LoadSceneMode mode, Action<float> actProgress, Action<bool> actDone)
{
AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(sceneName, mode);
asyncLoad.allowSceneActivation = false;
@@ -235,6 +235,8 @@ namespace PerfectWorld.Scripts
private new void Update()
{
base.Update();
// Recovery: after Unity domain reload, manager dictionaries reset but scene objects persist.
// Keep trying until we successfully register.
if (!m_registeredToManMatter)
@@ -30,24 +30,6 @@ namespace BrewMonster
public void ShowLoadingScene(bool active)
{
goContent.SetActive(active);
// if (active)
// {
// Debug.LogError("Loading scene controller started");
//
// finished = false;
// loadingText.text = "Loading...";
// UpdateUI(0);
//
// cts?.Cancel();
// cts = new CancellationTokenSource();
//
// ObserveLoadingAsync(cts.Token).Forget();
// }
// else
// {
// cts?.Cancel();
// }
}
async UniTaskVoid ObserveLoadingAsync(CancellationToken token)
@@ -6,6 +6,11 @@ namespace BrewMonster
{
public GameObject InstantiateObject(GameObject prefab, Transform parent =null, bool setThisAsParent = true)
{
if (prefab == null)
{
BMLogger.LogError("ObjectSpawner::InstantiateObject, prefab is null");
return GameObject.CreatePrimitive(PrimitiveType.Cube);
}
if (setThisAsParent)
{
return Instantiate(prefab, transform);
@@ -434,7 +434,7 @@ namespace BrewMonster.Scripts.Task
pTaskMan.Release();
LoadingSceneController.Instance.ShowLoadingScene(true);
LoadingSceneController.Instance.UpdateUI(0f);
LoadingSceneController.Instance.SetLoadingText("Loading Tasks From Pack");
LoadingSceneController.Instance.SetLoadingText("Du Nhập Thế Giới Hoàn Mỹ");
//string task_data_path = Path.Combine(Application.streamingAssetsPath, "data/tasks.data");
string task_data_path = "Assets/PerfectWorld/Data/tasks.txt";
@@ -444,15 +444,17 @@ namespace BrewMonster.Scripts.Task
LoadingSceneController.Instance.SetProgress(x);
}, _cts.Token);
LoadingSceneController.Instance.UpdateUI(0.3f);
//var task_npc_path = Path.Combine(Application.streamingAssetsPath, "data/task_npc.data");
var task_npc_path = "Assets/PerfectWorld/Data/task_npc.txt";
await pTaskMan.LoadNPCInfoFromPack(task_npc_path);
LoadingSceneController.Instance.UpdateUI(0.8f);
//var dyn_tasks_path = Path.Combine(Application.streamingAssetsPath, "data/dyn_tasks.data");
var dyn_tasks_path = "Assets/PerfectWorld/Data/dyn_tasks.txt";
await pTaskMan.VerifyDynTasksPack(dyn_tasks_path);
LoadingSceneController.Instance.UpdateUI(1f);
InitActiveTaskList();
SceneLoader.SceneLoadProcess = SceneLoadProcess.EndLoading;
LoadingSceneController.Instance.ShowLoadingScene(false);
@@ -868,7 +870,7 @@ namespace BrewMonster.Scripts.Task
public int GetPos(float[] pos)
{
A3DVECTOR3 vPos = m_pHost.GetPos();
A3DVECTOR3 vPos = m_pHost.GetPos(false);
if (pos != null && pos.Length >= 3)
{
pos[0] = vPos.x;
@@ -1757,7 +1757,7 @@ namespace BrewMonster.Scripts.Task
public uint CheckHistoryStage(TaskInterface pTask)
{
int index = pTask.GetCurHistoryStageIndex();
if (m_FixedData.m_iPremHistoryStageIndex == null) return TaskInterfaceConstants.TASK_PREREQU_FAIL_HISTORYSTAGE;
if (m_FixedData.m_iPremHistoryStageIndex[0] != 0 && (index <=0 || index < m_FixedData.m_iPremHistoryStageIndex[0]))
return (uint)TaskInterfaceConstants.TASK_PREREQU_FAIL_HISTORYSTAGE;
if (m_FixedData.m_iPremHistoryStageIndex[1] != 0 && (index <=0 || index > m_FixedData.m_iPremHistoryStageIndex[1]))
@@ -411,12 +411,17 @@ namespace BrewMonster
private void ClearEquipSlot()
{
if (m_FirstInvSlot >= 0)
{
ReturnItemToInventory(m_FirstInvSlot);
}
m_SelectedEquip?.Freeze(false);
m_SelectedEquip = null;
m_FirstInvSlot = -1;
m_TxtFirstName.text = "___";
ClearSlotIcon(m_SlotFirstParent);
if(m_Mode == InstallMode.Disenchase)
if (m_Mode == InstallMode.Disenchase)
{
m_install_price = -1;
m_TxtMoney.text = "0";
@@ -425,6 +430,11 @@ namespace BrewMonster
private void ClearMaterialSlot()
{
if (m_SecondInvSlot >= 0)
{
ReturnItemToInventory(m_SecondInvSlot);
}
m_SelectedMaterial?.Freeze(false);
m_SelectedMaterial = null;
m_SecondInvSlot = -1;
@@ -450,7 +460,7 @@ namespace BrewMonster
// PAUIDIALOG pMsgBox;
CECHostPlayer pHost = GetHostPlayer();
if (pHost != null || m_Mode == InstallMode.Enchase)
if (pHost != null && m_Mode == InstallMode.Enchase)
{
// if( !m_pItema->GetDataPtr("ptr_CECIvtrItem") ) return;
string message = "";
@@ -529,16 +539,18 @@ namespace BrewMonster
// pMsgBox.SetLife(3);
return;
}
//pr
UnityGameSession.c2s_CmdNPCSevEmbed(
(ushort)m_SecondInvSlot, (ushort)m_FirstInvSlot,
pIvtrB.GetTemplateID(), pIvtrA.GetTemplateID());
// ClearEquipment();
// ClearStone();
ClearEquipSlot();
ClearMaterialSlot();
pHost.GetPack(InventoryConst.IVTRTYPE_PACK).UnfreezeAllItems();
message = GetGameUIMan().GetStringFromTable(228);
CECUIManager.Instance.ShowMessageBox("", message);
// GetGameUIMan().MessageBox("", GetGameUIMan().GetStringFromTable(228),
// MB_OK, A3DCOLORRGBA(255, 255, 255, 160), &pMsgBox);
// pMsgBox.SetLife(3);
@@ -40,6 +40,14 @@ namespace BrewMonster.UI
{
// Ensure wrapper created early (Tech3C SDK).
_ = Tech3CSDKWrapper.Instance;
#if UNITY_EDITOR
_usernameInputField.gameObject.SetActive(true);
_passwordInputField.gameObject.SetActive(true);
#else
_usernameInputField.gameObject.SetActive(false);
_passwordInputField.gameObject.SetActive(false);
#endif
}
void OnEnable()
@@ -61,11 +69,11 @@ namespace BrewMonster.UI
context = SynchronizationContext.Current;
// Requirement: Login UI should also have a61 loaded.
var world = SceneManager.GetSceneByName("a61");
if (!world.IsValid() || !world.isLoaded)
{
SceneManager.LoadSceneAsync("a61", LoadSceneMode.Additive);
}
// var world = SceneManager.GetSceneByName("a61");
// if (!world.IsValid() || !world.isLoaded)
// {
// SceneManager.LoadSceneAsync("a61", LoadSceneMode.Additive);
// }
_usernameInputField.text = PlayerPrefs.GetString("username", "");
_passwordInputField.text = PlayerPrefs.GetString("password", "");
@@ -259,6 +267,7 @@ namespace BrewMonster.UI
private void OnClickSelectCharacter(RoleInfo roleInfo)
{
LoadingSceneController.Instance.ShowLoadingScene(true);
UnityGameSession.SelectRoleAsync(roleInfo, OnSelectRoleComplete);
}
@@ -327,7 +336,6 @@ namespace BrewMonster.UI
};
SceneLoader.SceneLoadProcess = SceneLoadProcess.Loading;
SceneLoader.LoadingProgress = 0;
LoadingSceneController.Instance.ShowLoadingScene(true);
#if TESTFAST
string nameScene = "LoginScene";
SceneManager.UnloadSceneAsync(nameScene);
@@ -336,16 +344,17 @@ namespace BrewMonster.UI
actLoadChar?.Invoke();
UnityGameSession.EnterWorldAsync(roleInfo, OnEnterWorldComplete);
#else
string nameScene = "NPCRender";
UnityGameSession.Instance.LoadScene(nameScene, LoadSceneMode.Single, (value) =>
string nameScene = UnityGameSession.Instance.GetWorldInstanceName();
UnityGameSession.Instance.LoadScene(nameScene, LoadSceneMode.Single,
(progress) =>
{
isDoneNPCRender = value;
actLoadChar?.Invoke();
});
nameScene = "a61";
UnityGameSession.Instance.LoadScene(nameScene, LoadSceneMode.Additive, (value) =>
LoadingSceneController.Instance.SetProgress(progress);
},
(value) =>
{
isDoneWorldRender = value;
isDoneNPCRender = true;
isDoneWorldRender = true;
actLoadChar?.Invoke();
UnityGameSession.EnterWorldAsync(roleInfo, OnEnterWorldComplete);
@@ -65,6 +65,10 @@ namespace PerfectWorld.UI.MiniMap
UpdateMiniMap();
}
/// <summary>
/// We keep the player icon at the center of the minimap. Then we update the position of the map itself.
/// TODO: We have to keep track of the NPC icons on the map also.
/// </summary>
private void UpdateMiniMap()
{
m_pHostPlayer = GetHostPlayer();
@@ -84,6 +88,10 @@ namespace PerfectWorld.UI.MiniMap
_hostPlayerIcon.localRotation = Quaternion.Euler(0, 0, -hostTransform.localRotation.eulerAngles.y);
}
/// <summary>
/// Get the Host Player instance.
/// </summary>
/// <returns></returns>
private CECHostPlayer GetHostPlayer()
{
return CECGameRun.Instance.GetHostPlayer();
@@ -114,6 +122,8 @@ namespace PerfectWorld.UI.MiniMap
}
}
// this is for debuging/testing while this feature was in development
[ContextMenu("MoveHostPlayerIconToPos")]
public void MoveHostPlayerIconToPos()
{
@@ -10,8 +10,8 @@ namespace BrewMonster
{
public static class AddressableTools
{
private static string _modelPathPrefixToRemove = "Assets/ModelRenderer/Art/Models";
private static string _gfxPathPrefixToRemove = "Assets/ModelRenderer/Art/Gfx";
public static string _modelPathPrefixToRemove = "Assets/ModelRenderer/Art/Models";
public static string _gfxPathPrefixToRemove = "Assets/ModelRenderer/Art/Gfx";
[MenuItem("Tools/Addressable/Get All Asset Name")]
public static void GetAllAssetName()
@@ -76,6 +76,12 @@ namespace BrewMonster
UpdateAddressableAddressesPath("gfx", _gfxPathPrefixToRemove, ".gfx");
}
[MenuItem("Tools/Addressable/Update Addressable Path For a61")]
public static void UpdateAddressablePathFora61()
{
UpdateAddressableAddressesPath("a61", _modelPathPrefixToRemove, "");
}
public static void UpdateAddressableAddressesPath(string groupName, string prefixToRemove, string subfix)
{
AddressableAssetSettings settings = AddressableAssetSettingsDefaultObject.Settings;
@@ -0,0 +1,132 @@
using BrewMonster.Scripts;
using Cysharp.Threading.Tasks;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
public class AddressableObject : MonoBehaviour
{
public string assetPath;
private GameObject _instance;
public bool _isLoading;
public bool _isLoaded;
private int _loadRequestId;
public bool IsLoaded => _isLoaded;
public bool IsLoading => _isLoading;
public Vector3 ObjectPosition;
public Vector3 ObjectPositionOxz;
void Awake()
{
ObjectPosition = transform.position;
ObjectPositionOxz = new Vector3(ObjectPosition.x, 0, ObjectPosition.z);
}
public async UniTask LoadAsset()
{
if (string.IsNullOrEmpty(assetPath))
{
return;
}
if (_instance != null || _isLoading)
{
return;
}
_isLoading = true;
int requestId = ++_loadRequestId;
var model = await AddressableManager.Instance.LoadPrefabAsync(assetPath);
// Object might have been destroyed while awaiting.
if (this == null || gameObject == null)
{
return;
}
// If we got unloaded while loading, release the cached handle to avoid keeping RAM.
if (requestId != _loadRequestId)
{
_isLoading = false;
AddressableManager.Instance.ReleaseAsset(assetPath);
return;
}
_isLoading = false;
if (model != null && _instance == null)
{
_instance = Instantiate(model);
var modelTransform = _instance.transform;
modelTransform.SetParent(transform);
modelTransform.localPosition = Vector3.zero;
modelTransform.localRotation = Quaternion.identity;
modelTransform.localScale = Vector3.one;
_instance.SetActive(true);
_isLoaded = true;
}
}
public void UnloadAsset()
{
// make the loading request invalid.
_loadRequestId++;
_isLoading = false;
_isLoaded = false;
if (_instance != null)
{
Destroy(_instance);
_instance = null;
}
else if (transform.childCount > 0)
{
// Backward-compatible cleanup if older versions instantiated children without tracking.
for (int i = transform.childCount - 1; i >= 0; i--)
{
Destroy(transform.GetChild(i).gameObject);
}
}
if (string.IsNullOrEmpty(assetPath))
{
return;
}
AddressableManager.Instance.ReleaseAsset(assetPath);
}
#if UNITY_EDITOR
public static string _modelPathPrefixToRemove = "Assets/ModelRenderer/Art/Models";
[ContextMenu("Get Asset Path")]
public void GetAssetPath()
{
var prefabObject = PrefabUtility.GetCorrespondingObjectFromSource(this.gameObject);
if (prefabObject != null)
{
var path = AssetDatabase.GetAssetPath(prefabObject);
//remove the prefix from the path
path = path.Substring(_modelPathPrefixToRemove.Length + 1);
//remove the .prefab suffix
path = path.Substring(0, path.Length - ".prefab".Length);
assetPath = path;
// now delete all the children of this object
while (transform.childCount > 0)
{
DestroyImmediate(transform.GetChild(0).gameObject);
}
//unpack completely the prefab
PrefabUtility.UnpackPrefabInstance(this.gameObject, PrefabUnpackMode.Completely, InteractionMode.UserAction);
}
else
{
Debug.LogError("No prefab object found for this object");
}
}
#endif
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 08803e758aec64c6b9957fd870e24bb5
@@ -0,0 +1,444 @@
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using BrewMonster;
using BrewMonster.Scripts;
using Cysharp.Threading.Tasks;
using UnityEngine;
public class LitModelHolder : MonoSingleton<LitModelHolder>
{
#region Fields
[SerializeField] private AddressableObject[] addressableObjects;
private CECHostPlayer _hostPlayer;
[Header("Distance Streaming")]
[Tooltip("The distance from the host player to the object to be loaded immediately.")]
[SerializeField] private float _loadImmediateDistance = 200f;
[Tooltip("Objects need to go outside of this distance to be unloaded.")]
[SerializeField] private float _unloadDistance = 400f;
[Header("Performance")]
[SerializeField] private float _checkIntervalSeconds = 0.25f;
[Tooltip("How long a candidate object need to be in the immediate loading range to be loaded.")]
[SerializeField] private float _candidateWaitTimeSeconds = 1f;
[Tooltip("The minimum distance the host player needs to move to update the streaming.")]
[SerializeField] private float _minHostMoveToUpdate = 2.0f;
#endregion
#region Private Fields
// when an object enters the immediate loading range, we add it to this dictionary.
// The key is the object, the value is the enter timestamp.
private Dictionary<AddressableObject, float> _candidatesForLoading = new Dictionary<AddressableObject, float>();
private HashSet<AddressableObject> _loadedObjects = new HashSet<AddressableObject>();
private List<AddressableObject> _objectsToUnload = new List<AddressableObject>();
private Vector3 _lastHostPosOxz;
private bool _hasLastHostPos = false;
private Vector3 _currentHostPos;
private Vector3 _currentHostPosOxz;
private bool _hostPosReady = false;
private AddressableObject _currentObjectToCheck; // the object that we're currently checking for loading/unloading.
private bool _needToProcessLoadAndUnload = false;
private float _realTimeSinceStartUp;
private CancellationTokenSource _cts;
#endregion
#region Unity Lifecycle
protected override async void Initialize()
{
_currentHostPos = Vector3.zero;
_currentHostPosOxz = Vector3.zero;
await StartStreamingProcess();
}
private void Update()
{
// run every frame.
// We have to update the MainThread data here. Since other processes run on a different thread.
_realTimeSinceStartUp = Time.realtimeSinceStartup;
UpdateHostPlayerPosition();
// if load flag is set, process the load and unload objects.
if (_needToProcessLoadAndUnload)
{
ProcessLoadAndUnloadObjects();
_needToProcessLoadAndUnload = false;
}
}
private void OnDestroy()
{
if (_cts != null)
{
_cts.Cancel();
_cts.Dispose();
}
if (addressableObjects == null)
{
return;
}
// go through candidate list and loaded list, unload all objects in those lists.
foreach (var kvp in _candidatesForLoading)
{
kvp.Key.UnloadAsset();
}
foreach (var obj in _loadedObjects)
{
obj.UnloadAsset();
}
}
#endregion
#region Private Functions
private async UniTask StartStreamingProcess()
{
if (_cts != null)
{
_cts.Cancel();
_cts.Dispose();
}
_cts = new CancellationTokenSource();
CancellationToken destroyToken = _cts.Token;
// Wait until Addressables are initialized.
while (!AddressableManager.Instance.IsInitialized())
{
await Task.Delay(100, destroyToken);
}
while (_hostPlayer == null)
{
_hostPlayer = GetHostPlayer();
await Task.Delay(100, destroyToken);
continue;
}
while (!_hostPlayer.IsAllResReady())
{
await Task.Delay(100, destroyToken);
continue;
}
// run this once at the beginning of the game. So we can load all the objects that are close to the host player.
await LoadObjectBaseOnDistance(destroyToken);
// Start distance-based streaming loop. This will be running continuously in the background.
UniTask.RunOnThreadPool(async () =>
{
await StreamByDistanceLoop(destroyToken : destroyToken);
}
).Forget();
}
/// <summary>
/// Immediately load the objects that are close to the host player. <br/>
/// Run this once at the beginning of the game. So we can load all the objects that are close to the host player.
/// </summary>
/// <param name="destroyToken"></param>
/// <returns></returns>
private async UniTask LoadObjectBaseOnDistance(CancellationToken destroyToken)
{
if (_unloadDistance < _loadImmediateDistance)
{
_unloadDistance = _loadImmediateDistance;
}
while (_hostPlayer == null)
{
_hostPlayer = GetHostPlayer();
if (_hostPlayer != null) break; // we found the host player.
await UniTask.Delay(10);
continue;
}
await Task.Delay(100, destroyToken); // wait for the host player to be initialized.
_currentHostPosOxz = _hostPlayer.GetPosVector3();
_currentHostPosOxz.y = 0;
LoadAllObjectsNearPosition(_currentHostPosOxz, destroyToken);
}
/// <summary>
/// This function will load all the objects that are close to the host player immediately. <br/> <br/>
/// <b>Use this once at the beginning of the game. Or when player is revived/GOTO/Teleported.</b>
/// </summary>
/// <returns></returns>
private void LoadAllObjectsNearPosition(Vector3 targetPosition, CancellationToken destroyToken)
{
if (addressableObjects == null || addressableObjects.Length == 0)
{
return;
}
if (_unloadDistance < _loadImmediateDistance)
{
_unloadDistance = _loadImmediateDistance;
}
float immediateSqr = _loadImmediateDistance * _loadImmediateDistance;
float paddingSqr = _unloadDistance * _unloadDistance;
List<AddressableObject> objectsToLoad = new List<AddressableObject>();
targetPosition.y = 0; // only consider Oxz plane
// go through all the objects, check for the immediateSqr and load the objects that are in the range.
TickStreaming(targetPosition, immediateSqr, paddingSqr, destroyToken);
}
/// <summary>
/// This function will be running continuously in the background.
/// </summary>
/// <param name="destroyToken"></param>
/// <returns></returns>
private async UniTask StreamByDistanceLoop(CancellationToken destroyToken)
{
if (_unloadDistance < _loadImmediateDistance)
{
_unloadDistance = _loadImmediateDistance;
}
float immediateSqr = _loadImmediateDistance * _loadImmediateDistance;
float paddingSqr = _unloadDistance * _unloadDistance;
int intervalMs = Mathf.Max(10, Mathf.RoundToInt(_checkIntervalSeconds * 1000f));
float minMoveSqr = _minHostMoveToUpdate * _minHostMoveToUpdate;
while (!destroyToken.IsCancellationRequested)
{
if (!_hostPosReady)
{
continue;
}
if (_hasLastHostPos)
{
if ((_currentHostPosOxz - _lastHostPosOxz).sqrMagnitude < minMoveSqr)
{
await Task.Delay(intervalMs, destroyToken);
continue;
}
}
_hasLastHostPos = true;
_lastHostPosOxz = _currentHostPosOxz;
TickStreaming(_currentHostPosOxz, immediateSqr, paddingSqr, destroyToken);
await Task.Delay(intervalMs, destroyToken);
}
}
/// <summary>
/// The main loop of the distance streaming.
/// Go through all the objects and check if they are in the immediate loading range or padding range.
/// </summary>
/// <returns></returns>
private void TickStreaming(Vector3 hostPos, float immediateSqr, float paddingSqr, CancellationToken destroyToken)
{
if (addressableObjects == null || addressableObjects.Length == 0)
{
return;
}
int count = addressableObjects.Length;
for (int i = 0; i < count; i++)
{
_currentObjectToCheck = addressableObjects[i];
if (_currentObjectToCheck == null)
{
continue;
}
float distSqr = (_currentObjectToCheck.ObjectPositionOxz - hostPos).sqrMagnitude;
if (distSqr <= immediateSqr)
{
if (_currentObjectToCheck.IsLoaded || _currentObjectToCheck.IsLoading)
{
continue;
}
if (!_candidatesForLoading.ContainsKey(_currentObjectToCheck))
{
_candidatesForLoading[_currentObjectToCheck] = _realTimeSinceStartUp;
}
}
else if (distSqr > paddingSqr)
{
if (_currentObjectToCheck.IsLoaded || _currentObjectToCheck.IsLoading)
{
if (!_objectsToUnload.Contains(_currentObjectToCheck))
{
_objectsToUnload.Add(_currentObjectToCheck);
}
}
}
}
_needToProcessLoadAndUnload = true;
}
private void ProcessLoadAndUnloadObjects()
{
// load the objects that are in the loading range long enough. (_candidateWaitTimeSeconds)
foreach (var kvp in _candidatesForLoading)
{
kvp.Key.LoadAsset().Forget();
_loadedObjects.Add(kvp.Key);
}
// remove the loaded objects from the candidates for loading list.
foreach (var obj in _loadedObjects)
{
_candidatesForLoading.Remove(obj);
}
// unload the objects that are too far away.
for (int i = 0; i < _objectsToUnload.Count; i++)
{
_objectsToUnload[i].UnloadAsset();
// remove the object from the candidates for loading and loaded objects lists.
_loadedObjects.Remove(_objectsToUnload[i]);
_candidatesForLoading.Remove(_objectsToUnload[i]);
}
}
/// <summary>
/// Get the Host Player instance.
/// </summary>
/// <returns></returns>
private CECHostPlayer GetHostPlayer()
{
return CECGameRun.Instance.GetHostPlayer();
}
private void UpdateHostPlayerPosition()
{
_hostPlayer = GetHostPlayer();
if (_hostPlayer != null)
{
_currentHostPosOxz = _hostPlayer.GetPosVector3(false);
_currentHostPosOxz.y = 0;
_hostPosReady = true;
}
}
#endregion
#region Public Functions
public async UniTask LoadAllObjectsNearTargetPosition(Vector3 targetPosition = default, bool useHostPlayerPosition = false)
{
if (!useHostPlayerPosition)
{
_currentHostPosOxz = targetPosition;
_currentHostPosOxz.y = 0;
}
else
{
while (_hostPlayer == null)
{
UpdateHostPlayerPosition();
await Task.Delay(10);
continue;
}
}
UniTask.RunOnThreadPool(() => {LoadAllObjectsNearPosition(_currentHostPosOxz, _cts.Token);}).Forget();
}
#endregion
// Keep this part of the code for the initial setup of the addressable objects.
// We have to run this once on every scene.
#if UNITY_EDITOR
[Space(10)]
[Header("FOR EDITOR SETUP ONLY")]
[SerializeField] private GameObject[] originalObjects;
[ContextMenu("Setup Addressable Objects")]
public void SetupAddressableObjects()
{
foreach (var originalObject in originalObjects)
{
var addressableObject = originalObject.GetComponent<AddressableObject>();
if (addressableObject == null)
{
addressableObject = originalObject.AddComponent<AddressableObject>();
}
if (addressableObject != null)
{
addressableObject.GetAssetPath();
}
}
}
[ContextMenu("Validate Addressable Objects")]
private void ValidateAddressableObjects()
{
if (addressableObjects == null || addressableObjects.Length == 0)
{
Debug.LogWarning("[LitModelHolder] addressableObjects is empty.");
return;
}
int nullCount = 0;
int emptyPathCount = 0;
int multiChildCount = 0;
var pathCounts = new System.Collections.Generic.Dictionary<string, int>();
for (int i = 0; i < addressableObjects.Length; i++)
{
AddressableObject obj = addressableObjects[i];
if (obj == null)
{
nullCount++;
continue;
}
if (string.IsNullOrEmpty(obj.assetPath))
{
emptyPathCount++;
}
else
{
pathCounts.TryGetValue(obj.assetPath, out int c);
pathCounts[obj.assetPath] = c + 1;
}
// If this is > 1 it often indicates duplicate instantiation under the anchor.
if (obj.transform.childCount > 1)
{
multiChildCount++;
}
}
int duplicatePathKeys = 0;
foreach (var kvp in pathCounts)
{
if (kvp.Value > 1)
{
duplicatePathKeys++;
}
}
Debug.Log($"[LitModelHolder] ValidateAddressableObjects:\n" +
$"- total={addressableObjects.Length}\n" +
$"- nullEntries={nullCount}\n" +
$"- emptyAssetPath={emptyPathCount}\n" +
$"- duplicateAssetPathKeys={duplicatePathKeys}\n" +
$"- anchorsWithMoreThanOneChild={multiChildCount}");
}
#endif
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 52b568195aaf24c5897ad5983d096f23
+4 -50
View File
@@ -1,50 +1,5 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &695809075354249832
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2466055582606182659}
- component: {fileID: 6694799068998335831}
m_Layer: 0
m_Name: Boostrap (1)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2466055582606182659
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 695809075354249832}
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: 8647913387955223815}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &6694799068998335831
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 695809075354249832}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2781611f0f83bf54290a9ec600543440, type: 3}
m_Name:
m_EditorClassIdentifier:
_nextSceneName: LoginScene
--- !u!1 &4031863963514808284
GameObject:
m_ObjectHideFlags: 0
@@ -76,7 +31,6 @@ Transform:
m_Children:
- {fileID: 5828095428458008759}
- {fileID: 3304007787827206689}
- {fileID: 2466055582606182659}
- {fileID: 1374891186888298875}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -92,7 +46,7 @@ GameObject:
- component: {fileID: 7143671611729110091}
- component: {fileID: 1552922004895094615}
m_Layer: 0
m_Name: GameSession (1)
m_Name: GameSession
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -149,7 +103,7 @@ GameObject:
- component: {fileID: 5828095428458008759}
- component: {fileID: 7028019933536463136}
m_Layer: 0
m_Name: AutoIniializer (1)
m_Name: AutoIniializer
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -192,11 +146,11 @@ PrefabInstance:
m_Modifications:
- target: {fileID: 132536, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
propertyPath: m_Name
value: IngameDebugConsole (1)
value: IngameDebugConsole
objectReference: {fileID: 0}
- target: {fileID: 11414302, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
propertyPath: m_Size
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 11414302, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
propertyPath: m_Value
+4 -4
View File
@@ -1556,7 +1556,7 @@ RectTransform:
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0.0009808608, y: -0.00012207031}
m_SizeDelta: {x: 0.024810791, y: -496.19458}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 1}
--- !u!114 &4021128748820168485
MonoBehaviour:
@@ -3294,9 +3294,9 @@ RectTransform:
- {fileID: 5320464328943649663}
m_Father: {fileID: 5444603765313937912}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 237.0925, y: -93.38}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 474.185, y: 186.76}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &946827543569852510
+2 -2
View File
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8d097871fd2de79f64a6527f97d2043554bfa5ead80936e385e2353b5b8375b4
size 200515435
oid sha256:8afbdb17249969e64a11fbda64cda8d83eebcc9fa65a12a47dfa60670304a597
size 196460134
+4
View File
@@ -75,7 +75,11 @@ public partial class CECGameRun
}
public void Init()
{
#if !UNITY_EDITOR
Debug.unityLogger.logEnabled = false;
QualitySettings.vSyncCount = 0;
Application.targetFrameRate = 60;
#endif
instance = this;
// _gameRunConfig = Resources.Load<GameRunConfig>("GameRunConfig");
// _playerPrefab = _gameRunConfig.PlayerPrefab;
+4 -7
View File
@@ -8,6 +8,7 @@ using System.Runtime.InteropServices;
using BrewMonster.Network;
using BrewMonster.UI;
using Cysharp.Threading.Tasks;
using System.Threading.Tasks;
namespace BrewMonster
{
@@ -128,17 +129,13 @@ namespace BrewMonster
TaskClient.OnServerNotify(pInterface, data, (uint)size);
}
private void TickTask()
private async UniTask TickTask()
{
// Update task
// C ++ code uses dwDeltaTime from Tick function parameter
if (m_pTaskInterface != null &&
m_TaskCounter.IncCounter(Time.deltaTime * 1000f))
while (true)
{
m_TaskCounter.Reset();
TaskClient.OnTaskCheckStatus(m_pTaskInterface);
// TODO: Update task UI if needed
// m_pTaskInterface.UpdateEmotionDlg();
await Task.Delay(1000);
}
}
+152 -60
View File
@@ -1,5 +1,6 @@
using BrewMonster;
using BrewMonster.Assets.PerfectWorld.Scripts.Players;
using BrewMonster.Assets.PerfectWorld.Scripts.UI;
using BrewMonster.Managers;
using BrewMonster.Network;
using BrewMonster.PerfectWorld.Scripts.Vfx;
@@ -13,12 +14,14 @@ using CSNetwork;
using CSNetwork.GPDataType;
using CSNetwork.Protocols.RPCData;
using CSNetwork.S2CCommand;
using Cysharp.Threading.Tasks;
using ModelRenderer.Scripts.GameData;
using PerfectWorld.Scripts;
using PerfectWorld.Scripts.Managers;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using UnityEngine;
@@ -27,9 +30,8 @@ using static BrewMonster.Scripts.Managers.EC_Inventory;
using static CECPlayerWrapper;
using cmd_select_target = CSNetwork.GPDataType.cmd_select_target;
using Host_work_ID = BrewMonster.Scripts.CECHPWork.Host_work_ID;
using Trace_reason = BrewMonster.CECHPWorkTrace.Trace_reason;
using ObjectCoords = System.Collections.Generic.List<CSNetwork.GPDataType.OBJECT_COORD>;
using System.Linq;
using Trace_reason = BrewMonster.CECHPWorkTrace.Trace_reason;
namespace BrewMonster
{
@@ -179,6 +181,7 @@ namespace BrewMonster
int[] targetsCastSkill;
public bool IsChangingFace()
{
return m_bChangingFace;
@@ -334,6 +337,9 @@ namespace BrewMonster
m_GatherCnt.Reset(true);
m_PetOptCnt.SetPeriod(1000);
m_PetOptCnt.Reset(true);
// run a process on background to keep track of task status.
UniTask.RunOnThreadPool(TickTask, false, this.GetCancellationTokenOnDestroy()).Forget();
}
public bool LoadResources()
@@ -435,8 +441,6 @@ namespace BrewMonster
EstimateMoveEnv(GetPos());
OnKeyDown();
// track status of Task
TickTask();
// Update timers
UpdateTimers(Time.deltaTime);
@@ -560,71 +564,71 @@ namespace BrewMonster
//Debug.LogError("HoangDev : ProcessMessageProcessMessageProcessMessage " + msg);
switch (msg)
{
case int value when value == EC_MsgDef.MSG_HST_CORRECTPOS: OnMsgHstCorrectPos(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_GOTO: OnMsgHstGoto(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_IVTRINFO:
case EC_MsgDef.MSG_HST_CORRECTPOS: OnMsgHstCorrectPos(Msg); break;
case EC_MsgDef.MSG_HST_GOTO: OnMsgHstGoto(Msg); break;
case EC_MsgDef.MSG_HST_IVTRINFO:
{
OnMsgHstIvtrInfo(Msg);
break;
}
case int value when value == EC_MsgDef.MSG_HST_OWNITEMINFO:
case EC_MsgDef.MSG_HST_OWNITEMINFO:
{
OnMsgHstOwnItemInfo(Msg);
break;
}
case int value when value == EC_MsgDef.MSG_HST_TASKDATA:
case EC_MsgDef.MSG_HST_TASKDATA:
{
OnMsgHstTaskData(Msg).Forget();
//Debug.LogError("[Dat]- OnMsgHstTaskData");
break;
}
case int value when value == EC_MsgDef.MSG_HST_ITEMOPERATION:
case EC_MsgDef.MSG_HST_ITEMOPERATION:
OnMsgHstItemOperation(Msg);
break;
case int value when value == EC_MsgDef.MSG_HST_PICKUPITEM:
case EC_MsgDef.MSG_HST_PICKUPITEM:
OnMsgHstPickupItem(Msg);
break;
case int value when value == EC_MsgDef.MSG_HST_PRODUCEITEM:
case EC_MsgDef.MSG_HST_PRODUCEITEM:
OnMsgHstProduceItem(Msg);
break;
case int value when value == EC_MsgDef.MSG_HST_SELTARGET:
case EC_MsgDef.MSG_HST_SELTARGET:
OnMsgHstSelTarget(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_USEITEM:
case EC_MsgDef.MSG_HST_USEITEM:
OnMsgHstUseItem(Msg);
break;
case int value when value == EC_MsgDef.MSG_HST_ATKRESULT: OnMsgHstAttackResult(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_ATTACKED: OnMsgHstAttacked(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_HURTRESULT: OnMsgHstHurtResult(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_INFO00: OnMsgHstInfo00(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_NPCGREETING: OnMsgHstNPCGreeting(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_WAYPOINT: OnMsgHstWayPoint(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_SKILLDATA: OnMsgHstSkillData(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_DIED: OnMsgHstDied(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_STARTATTACK: OnMsgHstStartAttack(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_STOPATTACK: OnMsgHstStopAttack(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_SKILLRESULT: OnMsgHstSkillResult(Msg); break;
case int value when value == EC_MsgDef.MSG_PM_CASTSKILL: OnMsgPlayerCastSkill(Msg); break;
case int value when value == EC_MsgDef.MSG_PM_ENCHANTRESULT: OnMsgEnchantResult(Msg); break;
case EC_MsgDef.MSG_HST_ATKRESULT: OnMsgHstAttackResult(Msg); break;
case EC_MsgDef.MSG_HST_ATTACKED: OnMsgHstAttacked(Msg); break;
case EC_MsgDef.MSG_HST_HURTRESULT: OnMsgHstHurtResult(Msg); break;
case EC_MsgDef.MSG_HST_INFO00: OnMsgHstInfo00(Msg); break;
case EC_MsgDef.MSG_HST_NPCGREETING: OnMsgHstNPCGreeting(Msg); break;
case EC_MsgDef.MSG_HST_WAYPOINT: OnMsgHstWayPoint(Msg); break;
case EC_MsgDef.MSG_HST_SKILLDATA: OnMsgHstSkillData(Msg); break;
case EC_MsgDef.MSG_HST_DIED: OnMsgHstDied(Msg); break;
case EC_MsgDef.MSG_HST_STARTATTACK: OnMsgHstStartAttack(Msg); break;
case EC_MsgDef.MSG_HST_STOPATTACK: OnMsgHstStopAttack(Msg); break;
case EC_MsgDef.MSG_HST_SKILLRESULT: OnMsgHstSkillResult(Msg); break;
case EC_MsgDef.MSG_PM_CASTSKILL: OnMsgPlayerCastSkill(Msg); break;
case EC_MsgDef.MSG_PM_ENCHANTRESULT: OnMsgEnchantResult(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_OWNEXTPROP: OnMsgHstExtProp(Msg); break;
case int value when value == EC_MsgDef.MSG_PM_PLAYERDOEMOTE: OnMsgPlayerDoEmote(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_TARGETISFAR: OnMsgHstTargetIsFar(Msg); break;
case int value when value == EC_MsgDef.MSG_PM_PLAYERGATHER: OnMsgPlayerGather(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_COOLTIMEDATA: OnMsgHstCoolTimeData(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_SETCOOLTIME: OnMsgHstSetCoolTime(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_PRESSCANCEL: OnMsgHstPressCancel(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_LEARNSKILL: OnMsgHstLearnSkill(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_COMBO_SKILL_PREPARE: OnMsgComboSkillPrepare(Msg); break;
case int value when value == EC_MsgDef.MSG_PM_PLAYERFLY: OnMsgPlayerFly(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_PETOPT: OnMsgHstPetOpt(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_SETPLAYERLIMIT: OnMsgHstSetPlayerLimit(Msg); break;
case int value when value == EC_MsgDef.MSG_PM_PLAYERMOUNT: OnMsgPlayerMount(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_EMBEDITEM: OnMsgHstEmbedItem(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_JOINTEAM: OnMsgHstJoinTeam(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_LEAVETEAM: OnMsgHstLeaveTeam(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_NEWTEAMMEM: OnMsgHstNewTeamMem(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_TEAMMEMBERDATA: OnMsgHstTeamMemberData(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_CONTINUECOMBOSKILL: OnMsgContinueComboSkill(Msg); break;
case EC_MsgDef.MSG_HST_OWNEXTPROP: OnMsgHstExtProp(Msg); break;
case EC_MsgDef.MSG_PM_PLAYERDOEMOTE: OnMsgPlayerDoEmote(Msg); break;
case EC_MsgDef.MSG_HST_TARGETISFAR: OnMsgHstTargetIsFar(Msg); break;
case EC_MsgDef.MSG_PM_PLAYERGATHER: OnMsgPlayerGather(Msg); break;
case EC_MsgDef.MSG_HST_COOLTIMEDATA: OnMsgHstCoolTimeData(Msg); break;
case EC_MsgDef.MSG_HST_SETCOOLTIME: OnMsgHstSetCoolTime(Msg); break;
case EC_MsgDef.MSG_HST_PRESSCANCEL: OnMsgHstPressCancel(Msg); break;
case EC_MsgDef.MSG_HST_LEARNSKILL: OnMsgHstLearnSkill(Msg); break;
case EC_MsgDef.MSG_HST_COMBO_SKILL_PREPARE: OnMsgComboSkillPrepare(Msg); break;
case EC_MsgDef.MSG_PM_PLAYERFLY: OnMsgPlayerFly(Msg); break;
case EC_MsgDef.MSG_HST_PETOPT: OnMsgHstPetOpt(Msg); break;
case EC_MsgDef.MSG_HST_SETPLAYERLIMIT: OnMsgHstSetPlayerLimit(Msg); break;
case EC_MsgDef.MSG_PM_PLAYERMOUNT: OnMsgPlayerMount(Msg); break;
case EC_MsgDef.MSG_HST_EMBEDITEM: OnMsgHstEmbedItem(Msg); break;
case EC_MsgDef.MSG_HST_JOINTEAM: OnMsgHstJoinTeam(Msg); break;
case EC_MsgDef.MSG_HST_LEAVETEAM: OnMsgHstLeaveTeam(Msg); break;
case EC_MsgDef.MSG_HST_NEWTEAMMEM: OnMsgHstNewTeamMem(Msg); break;
case EC_MsgDef.MSG_HST_TEAMMEMBERDATA: OnMsgHstTeamMemberData(Msg); break;
case EC_MsgDef.MSG_HST_CONTINUECOMBOSKILL: OnMsgContinueComboSkill(Msg); break;
}
/*if (bActionStartSkill)
@@ -1040,7 +1044,7 @@ namespace BrewMonster
switch (Convert.ToInt32(Msg.dwParam2))
{
case int value2 when value2 == CommandID.OBJECT_CAST_SKILL:
case CommandID.OBJECT_CAST_SKILL:
{
cmd_object_cast_skill pCmd =
GPDataTypeHelper.FromBytes<cmd_object_cast_skill>((byte[])Msg.dwParam1);
@@ -1105,7 +1109,7 @@ namespace BrewMonster
}
break;
}
case int value2 when value2 == CommandID.SKILL_PERFORM:
case CommandID.SKILL_PERFORM:
{
// Skill perform
// 技能执行
@@ -1125,7 +1129,7 @@ namespace BrewMonster
break;
}
case int value2 when value2 == CommandID.HOST_STOP_SKILL:
case CommandID.HOST_STOP_SKILL:
{
m_pPrepSkill = null;
@@ -1162,7 +1166,7 @@ namespace BrewMonster
m_idCurSkillTarget = 0;
break;
}
case int value2 when value2 == CommandID.SELF_SKILL_INTERRUPTED:
case CommandID.SELF_SKILL_INTERRUPTED:
{
// Skill interrupted
// 技能被打断
@@ -1209,7 +1213,7 @@ namespace BrewMonster
CECAutoPolicy.GetInstance().SendEvent_SkillInterrupt(skill_id);
break;
}
case int value2 when value2 == CommandID.OBJECT_CAST_INSTANT_SKILL:
case CommandID.OBJECT_CAST_INSTANT_SKILL:
{
// Cast instant skill
// 施放即时技能
@@ -1232,7 +1236,7 @@ namespace BrewMonster
bActionStartSkill = true;
break;
}
case int value2 when value2 == CommandID.OBJECT_CAST_POS_SKILL:
case CommandID.OBJECT_CAST_POS_SKILL:
{
// Cast position skill (target position instead of target object)
// 施放位置技能(目标位置而不是目标对象)
@@ -1357,7 +1361,7 @@ namespace BrewMonster
bActionStartSkill = true;
break;
}
case int value2 when value2 == CommandID.PLAYER_CAST_RUNE_SKILL:
case CommandID.PLAYER_CAST_RUNE_SKILL:
{
// Cast rune skill (item skill)
// 施放符文技能(物品技能)
@@ -1420,7 +1424,7 @@ namespace BrewMonster
Debug.Log($"Cast rune skill({m_pCurSkill.GetSkillID()})");
break;
}
case int value2 when value2 == CommandID.PLAYER_CAST_RUNE_INSTANT_SKILL:
case CommandID.PLAYER_CAST_RUNE_INSTANT_SKILL:
{
// Cast instant rune skill
// 施放即时符文技能
@@ -1448,7 +1452,7 @@ namespace BrewMonster
bActionStartSkill = true;
break;
}
case int value2 when value2 == CommandID.ERROR_MESSAGE:
case CommandID.ERROR_MESSAGE:
bDoOtherThing = true;
break;
@@ -2745,10 +2749,97 @@ namespace BrewMonster
{
case CommandID.OWN_ITEM_INFO:
{
Debug.Log("[Inventory] OWN_ITEM_INFO received");
//Debug.Log("[Inventory] OWN_ITEM_INFO received");
//var data = Msg.dwParam1 as byte[];
//int hostId = Convert.ToInt32(Msg.dwParam3);
//LogInventoryPacket("OWN_ITEM_INFO", data, hostId);
//Handmade
var data = Msg.dwParam1 as byte[];
int hostId = Convert.ToInt32(Msg.dwParam3);
LogInventoryPacket("OWN_ITEM_INFO", data, hostId);
if (data == null || data.Length == 0)
return;
byte byPackage = data[0];
byte bySlot = data[1];
int type = BitConverter.ToInt32(data, 2);
int expire_date = BitConverter.ToInt32(data, 6);
int state = BitConverter.ToInt32(data, 10);
uint count = BitConverter.ToUInt32(data, 14);
ushort crc = BitConverter.ToUInt16(data, 18);
ushort content_length = BitConverter.ToUInt16(data, 20);
byte[] content = null;
if (content_length > 0 && 22 + content_length <= data.Length)
{
content = new byte[content_length];
Buffer.BlockCopy(data, 22, content, 0, content_length);
string hexDebug = BitConverter.ToString(content);
//Debug.Log($"[OWN_ITEM_INFO] Full Content Hex ({content_length} bytes): {hexDebug}");
}
//Debug.Log($"[OWN_ITEM_INFO] Parsed: package={byPackage}, slot={bySlot}, tid={type}, count={count}, content_len={content_length}");
EC_Inventory pInventory = GetInventory(byPackage);
EC_IvtrItem newItem = EC_IvtrItem.CreateItem(type, expire_date, (int)count);
if (newItem != null)
{
newItem.SetProcType(state);
newItem.GetDetailDataFromLocal();
if (content != null && content.Length > 0)
{
newItem.SetItemInfo(content, content_length);
}
pInventory.SetItem(bySlot, newItem);
//Debug.Log($"[OWN_ITEM_INFO] Fixed Update: Pack {byPackage} Slot {bySlot} - Type {type}");
}
if (byPackage == InventoryConst.IVTRTYPE_EQUIPPACK)
{
UpdateEquipSkins();
}
else if (byPackage == InventoryConst.IVTRTYPE_PACK)
{
if (newItem.IsEquipment())
{
// TODO
}
}
var ui = GameObject.FindFirstObjectByType<EC_InventoryUI>();
if (ui != null)
{
ui.RefreshAll();
//Debug.Log($"[OWN_ITEM_INFO] Refreshed inventory UI after updating item at package={byPackage}, slot={bySlot}");
}
break;
}
case CommandID.EMPTY_ITEM_SLOT:
{
var data = Msg.dwParam1 as byte[];
cmd_empty_item_slot pCmd = GPDataTypeHelper.FromBytes<cmd_empty_item_slot>(data);
EC_Inventory pInventory = GetPack(pCmd.byPackage);
if (pInventory == null)
return;
EC_IvtrItem pItem = pInventory.GetItem(pCmd.bySlot);
if (pItem != null)
{
//UpdateRemovedItemSC(pItem->GetTemplateID(), pCmd->byPackage, pCmd->bySlot);
}
pInventory.SetItem(pCmd.bySlot, null);
var ui = GameObject.FindFirstObjectByType<EC_InventoryUI>();
if (ui != null)
{
ui.RefreshAll();
}
break;
}
}
@@ -2941,7 +3032,7 @@ namespace BrewMonster
// 调用 Goto 方法来正确处理传送
if (!Goto(idInst, vPos, iLine))
{
Debug.LogError($"OnMsgHstGoto: Failed to teleport to instance {idInst}");
BMLogger.LogError($"OnMsgHstGoto: Failed to teleport to instance {idInst}");
return;
}
}
@@ -2997,6 +3088,7 @@ namespace BrewMonster
// 如果可用则更新相机
// UpdateFollowCamera(false, 10); // Uncomment if UpdateFollowCamera method exists
LitModelHolder.Instance.LoadAllObjectsNearTargetPosition(vPos).Forget();
return true;
}
@@ -7527,7 +7619,7 @@ namespace BrewMonster
}
return iReason == 0 ? true : false;
}
private void OnMsgHstEmbedItem(ECMSG Msg)
public void OnMsgHstEmbedItem(ECMSG Msg)
{
cmd_embed_item pCmd = GPDataTypeHelper.FromBytes<cmd_embed_item>((byte[])Msg.dwParam1);
EC_IvtrItem pEquip = m_pPack.GetItem(pCmd.equip_idx);
+3 -1
View File
@@ -8,10 +8,11 @@ using BrewMonster.Scripts.Managers;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.UIElements;
using TMPro;
public class CECUIManager : MonoSingleton<CECUIManager>
{
[SerializeField] private Transform uiRoot; // nơi chứa UI được spawn (Canvas hoặc Transform)
[SerializeField] private TMP_Text _fpsText;
[SerializeField] private List<GameObject> uiPrefabs; // drag các prefab UI vào đây
private readonly Dictionary<System.Type, GameObject> _spawnedUIs = new();
@@ -54,6 +55,7 @@ public class CECUIManager : MonoSingleton<CECUIManager>
}
private void Update()
{
// _fpsText.text = $"{Mathf.RoundToInt(1f / Time.deltaTime)}";
if (m_pDlgQuickBar1 != null)
{ m_pDlgQuickBar1.UpdateShortcuts(); }
}
+6 -6
View File
@@ -26,7 +26,7 @@ MonoBehaviour:
m_SupportsHDR: 1
m_HDRColorBufferPrecision: 0
m_MSAA: 1
m_RenderScale: 0.8
m_RenderScale: 1
m_UpscalingFilter: 3
m_FsrOverrideSharpness: 0
m_FsrSharpness: 0.92
@@ -45,7 +45,7 @@ MonoBehaviour:
m_MainLightShadowsSupported: 1
m_MainLightShadowmapResolution: 1024
m_AdditionalLightsRenderingMode: 1
m_AdditionalLightsPerObjectLimit: 4
m_AdditionalLightsPerObjectLimit: 0
m_AdditionalLightShadowsSupported: 0
m_AdditionalLightsShadowmapResolution: 2048
m_AdditionalLightsShadowResolutionTierLow: 256
@@ -54,9 +54,9 @@ MonoBehaviour:
m_ReflectionProbeBlending: 1
m_ReflectionProbeBoxProjection: 1
m_ShadowDistance: 50
m_ShadowCascadeCount: 1
m_ShadowCascadeCount: 3
m_Cascade2Split: 0.25
m_Cascade3Split: {x: 0.1, y: 0.3}
m_Cascade3Split: {x: 0.10250626, y: 0.28145128}
m_Cascade4Split: {x: 0.067, y: 0.2, z: 0.467}
m_CascadeBorder: 0.2
m_ShadowDepthBias: 1
@@ -100,10 +100,10 @@ MonoBehaviour:
m_Keys: []
m_Values:
m_PrefilteringModeMainLightShadows: 3
m_PrefilteringModeAdditionalLight: 0
m_PrefilteringModeAdditionalLight: 3
m_PrefilteringModeAdditionalLightShadows: 0
m_PrefilterXRKeywords: 1
m_PrefilteringModeForwardPlus: 2
m_PrefilteringModeForwardPlus: 0
m_PrefilteringModeDeferredRendering: 0
m_PrefilteringModeScreenSpaceOcclusion: 0
m_PrefilterDebugKeywords: 1
+6 -5
View File
@@ -13,11 +13,9 @@ MonoBehaviour:
m_Name: Mobile_Renderer
m_EditorClassIdentifier:
debugShaders:
debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7,
type: 3}
debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, type: 3}
hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3}
probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959,
type: 3}
probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, type: 3}
probeVolumeResources:
probeVolumeDebugShader: {fileID: 0}
probeVolumeFragmentationDebugShader: {fileID: 0}
@@ -29,6 +27,7 @@ MonoBehaviour:
m_RendererFeatures: []
m_RendererFeatureMap:
m_UseNativeRenderPass: 1
xrSystemData: {fileID: 0}
postProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2}
m_AssetVersion: 2
m_OpaqueLayerMask:
@@ -45,8 +44,10 @@ MonoBehaviour:
failOperation: 0
zFailOperation: 0
m_ShadowTransparentReceive: 0
m_RenderingMode: 2
m_RenderingMode: 0
m_DepthPrimingMode: 0
m_CopyDepthMode: 0
m_DepthAttachmentFormat: 0
m_DepthTextureFormat: 0
m_AccurateGbufferNormals: 0
m_IntermediateTextureMode: 0

Some files were not shown because too many files have changed in this diff Show More