diff --git a/Client/Assets/Prefab/Animation.prefab b/Client/Assets/Prefab/Animation.prefab
index 5859295..5ee3c0a 100644
--- a/Client/Assets/Prefab/Animation.prefab
+++ b/Client/Assets/Prefab/Animation.prefab
@@ -77,7 +77,7 @@ SpriteRenderer:
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
- m_Sprite: {fileID: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, type: 3}
+ m_Sprite: {fileID: 21300000, guid: 620e16cb0aec3684db9ef80bdcc85695, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0
m_FlipY: 0
diff --git a/Client/Assets/Prefab/EntityPrefab.prefab b/Client/Assets/Prefab/EntityPrefab.prefab
index 92fb1cf..15f2904 100644
--- a/Client/Assets/Prefab/EntityPrefab.prefab
+++ b/Client/Assets/Prefab/EntityPrefab.prefab
@@ -173,8 +173,8 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- - {fileID: 1697214530303839877}
- {fileID: 5549544358816209289}
+ - {fileID: 1697214530303839877}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &3332598847335032684
diff --git a/Client/Assets/Prefab/Image.prefab b/Client/Assets/Prefab/Image.prefab
index 91a375a..88bd3ef 100644
--- a/Client/Assets/Prefab/Image.prefab
+++ b/Client/Assets/Prefab/Image.prefab
@@ -100,7 +100,4 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 0c360a9f1baf4eaf9afa85617c395b0d, type: 3}
m_Name:
m_EditorClassIdentifier:
- _defaultSprite: {fileID: 21300000, guid: 620e16cb0aec3684db9ef80bdcc85695, type: 3}
- _tintColor: {r: 1, g: 1, b: 1, a: 1}
- _alpha: 1
- _preserveAspect: 1
+ defaultSprite: {fileID: 21300000, guid: 620e16cb0aec3684db9ef80bdcc85695, type: 3}
diff --git a/Client/Assets/Resources/Default/DefaultAnimation.meta b/Client/Assets/Resources/Default/DefaultAnimation.meta
new file mode 100644
index 0000000..0ebbc20
--- /dev/null
+++ b/Client/Assets/Resources/Default/DefaultAnimation.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e0d6e117bfb89f14689759c2ed37bcb4
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Client/Assets/Resources/Default/DefaultAnimation/00.png b/Client/Assets/Resources/Default/DefaultAnimation/00.png
new file mode 100644
index 0000000..f92c6e1
Binary files /dev/null and b/Client/Assets/Resources/Default/DefaultAnimation/00.png differ
diff --git a/Client/Assets/Resources/Default/DefaultAnimation/00.png.meta b/Client/Assets/Resources/Default/DefaultAnimation/00.png.meta
new file mode 100644
index 0000000..95332ba
--- /dev/null
+++ b/Client/Assets/Resources/Default/DefaultAnimation/00.png.meta
@@ -0,0 +1,117 @@
+fileFormatVersion: 2
+guid: 3c21903d3e2b0754faf71558957968d5
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 40
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Client/Assets/Resources/Default/DefaultAnimation/01.png b/Client/Assets/Resources/Default/DefaultAnimation/01.png
new file mode 100644
index 0000000..6864ae5
Binary files /dev/null and b/Client/Assets/Resources/Default/DefaultAnimation/01.png differ
diff --git a/Client/Assets/Resources/Default/DefaultAnimation/01.png.meta b/Client/Assets/Resources/Default/DefaultAnimation/01.png.meta
new file mode 100644
index 0000000..fb7d81b
--- /dev/null
+++ b/Client/Assets/Resources/Default/DefaultAnimation/01.png.meta
@@ -0,0 +1,117 @@
+fileFormatVersion: 2
+guid: d306bc49c39e71f40870ef415657b5ba
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 40
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Client/Assets/Resources/Default/DefaultEntity.prefab b/Client/Assets/Resources/Default/DefaultEntity.prefab
new file mode 100644
index 0000000..e1f6ff9
--- /dev/null
+++ b/Client/Assets/Resources/Default/DefaultEntity.prefab
@@ -0,0 +1,145 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1001 &4172273043265116072
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ serializedVersion: 3
+ m_TransformParent: {fileID: 978302365984264250}
+ m_Modifications:
+ - target: {fileID: 2113064398104960506, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
+ propertyPath: _sprites.Array.size
+ value: 2
+ objectReference: {fileID: 0}
+ - target: {fileID: 2113064398104960506, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
+ propertyPath: '_sprites.Array.data[0]'
+ value:
+ objectReference: {fileID: 21300000, guid: 3c21903d3e2b0754faf71558957968d5, type: 3}
+ - target: {fileID: 2113064398104960506, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
+ propertyPath: '_sprites.Array.data[1]'
+ value:
+ objectReference: {fileID: 21300000, guid: d306bc49c39e71f40870ef415657b5ba, type: 3}
+ - target: {fileID: 5021031438404678310, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
+ propertyPath: m_Name
+ value: Animation
+ objectReference: {fileID: 0}
+ - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_RemovedGameObjects: []
+ m_AddedGameObjects: []
+ m_AddedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
+--- !u!4 &5706548514770437405 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
+ m_PrefabInstance: {fileID: 4172273043265116072}
+ m_PrefabAsset: {fileID: 0}
+--- !u!1001 &4652308439801383347
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ serializedVersion: 3
+ m_TransformParent: {fileID: 0}
+ m_Modifications:
+ - target: {fileID: 697189026367054479, guid: 6cd8b01a0f57372438dc30c864ae1530, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: -0.93
+ objectReference: {fileID: 0}
+ - target: {fileID: 697189026367054479, guid: 6cd8b01a0f57372438dc30c864ae1530, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: -0.25
+ objectReference: {fileID: 0}
+ - target: {fileID: 697189026367054479, guid: 6cd8b01a0f57372438dc30c864ae1530, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 697189026367054479, guid: 6cd8b01a0f57372438dc30c864ae1530, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 697189026367054479, guid: 6cd8b01a0f57372438dc30c864ae1530, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 697189026367054479, guid: 6cd8b01a0f57372438dc30c864ae1530, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 697189026367054479, guid: 6cd8b01a0f57372438dc30c864ae1530, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 697189026367054479, guid: 6cd8b01a0f57372438dc30c864ae1530, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 697189026367054479, guid: 6cd8b01a0f57372438dc30c864ae1530, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 697189026367054479, guid: 6cd8b01a0f57372438dc30c864ae1530, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 887327274103887133, guid: 6cd8b01a0f57372438dc30c864ae1530, type: 3}
+ propertyPath: m_Name
+ value: DefaultEntity Variant
+ objectReference: {fileID: 0}
+ - target: {fileID: 887327274103887133, guid: 6cd8b01a0f57372438dc30c864ae1530, type: 3}
+ propertyPath: m_IsActive
+ value: 1
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_RemovedGameObjects: []
+ m_AddedGameObjects:
+ - targetCorrespondingSourceObject: {fileID: 5549544358816209289, guid: 6cd8b01a0f57372438dc30c864ae1530, type: 3}
+ insertIndex: -1
+ addedObject: {fileID: 5706548514770437405}
+ m_AddedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: 6cd8b01a0f57372438dc30c864ae1530, type: 3}
+--- !u!4 &978302365984264250 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 5549544358816209289, guid: 6cd8b01a0f57372438dc30c864ae1530, type: 3}
+ m_PrefabInstance: {fileID: 4652308439801383347}
+ m_PrefabAsset: {fileID: 0}
diff --git a/Client/Assets/Resources/Default/DefaultEntity.prefab.meta b/Client/Assets/Resources/Default/DefaultEntity.prefab.meta
new file mode 100644
index 0000000..51ea59e
--- /dev/null
+++ b/Client/Assets/Resources/Default/DefaultEntity.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 89661daa5f100c64783f0ad9cd37a7ff
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Client/Assets/Scenes/Test.unity b/Client/Assets/Scenes/Test.unity
index ff90861..c6005b0 100644
--- a/Client/Assets/Scenes/Test.unity
+++ b/Client/Assets/Scenes/Test.unity
@@ -686,6 +686,7 @@ MonoBehaviour:
isGlobal: 1
entityLevel: {fileID: 309861628}
entityPrefab: {fileID: 3332598847335032684, guid: 6cd8b01a0f57372438dc30c864ae1530, type: 3}
+ defaultEntityPrefab: {fileID: 0}
--- !u!114 &2036983434
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -743,120 +744,6 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1001 &4078005684296227559
-PrefabInstance:
- m_ObjectHideFlags: 0
- serializedVersion: 2
- m_Modification:
- serializedVersion: 3
- m_TransformParent: {fileID: 0}
- m_Modifications:
- - target: {fileID: 4201281305206751642, guid: a6657f26d735fab4690c8185980fda29, type: 3}
- propertyPath: m_LocalPosition.x
- value: -5.781
- objectReference: {fileID: 0}
- - target: {fileID: 4201281305206751642, guid: a6657f26d735fab4690c8185980fda29, type: 3}
- propertyPath: m_LocalPosition.y
- value: -0.39
- objectReference: {fileID: 0}
- - target: {fileID: 4201281305206751642, guid: a6657f26d735fab4690c8185980fda29, type: 3}
- propertyPath: m_LocalPosition.z
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 4201281305206751642, guid: a6657f26d735fab4690c8185980fda29, type: 3}
- propertyPath: m_LocalRotation.w
- value: 1
- objectReference: {fileID: 0}
- - target: {fileID: 4201281305206751642, guid: a6657f26d735fab4690c8185980fda29, type: 3}
- propertyPath: m_LocalRotation.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 4201281305206751642, guid: a6657f26d735fab4690c8185980fda29, type: 3}
- propertyPath: m_LocalRotation.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 4201281305206751642, guid: a6657f26d735fab4690c8185980fda29, type: 3}
- propertyPath: m_LocalRotation.z
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 4201281305206751642, guid: a6657f26d735fab4690c8185980fda29, type: 3}
- propertyPath: m_LocalEulerAnglesHint.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 4201281305206751642, guid: a6657f26d735fab4690c8185980fda29, type: 3}
- propertyPath: m_LocalEulerAnglesHint.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 4201281305206751642, guid: a6657f26d735fab4690c8185980fda29, type: 3}
- propertyPath: m_LocalEulerAnglesHint.z
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 5309816858037840717, guid: a6657f26d735fab4690c8185980fda29, type: 3}
- propertyPath: m_Name
- value: Image
- objectReference: {fileID: 0}
- m_RemovedComponents: []
- m_RemovedGameObjects: []
- m_AddedGameObjects: []
- m_AddedComponents: []
- m_SourcePrefab: {fileID: 100100000, guid: a6657f26d735fab4690c8185980fda29, type: 3}
---- !u!1001 &7665142047032752812
-PrefabInstance:
- m_ObjectHideFlags: 0
- serializedVersion: 2
- m_Modification:
- serializedVersion: 3
- m_TransformParent: {fileID: 0}
- m_Modifications:
- - target: {fileID: 5021031438404678310, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
- propertyPath: m_Name
- value: Animation
- objectReference: {fileID: 0}
- - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
- propertyPath: m_LocalPosition.x
- value: -7.758
- objectReference: {fileID: 0}
- - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
- propertyPath: m_LocalPosition.y
- value: -0.34
- objectReference: {fileID: 0}
- - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
- propertyPath: m_LocalPosition.z
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
- propertyPath: m_LocalRotation.w
- value: 1
- objectReference: {fileID: 0}
- - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
- propertyPath: m_LocalRotation.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
- propertyPath: m_LocalRotation.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
- propertyPath: m_LocalRotation.z
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
- propertyPath: m_LocalEulerAnglesHint.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
- propertyPath: m_LocalEulerAnglesHint.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
- propertyPath: m_LocalEulerAnglesHint.z
- value: 0
- objectReference: {fileID: 0}
- m_RemovedComponents: []
- m_RemovedGameObjects: []
- m_AddedGameObjects: []
- m_AddedComponents: []
- m_SourcePrefab: {fileID: 100100000, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
@@ -867,5 +754,3 @@ SceneRoots:
- {fileID: 309861630}
- {fileID: 2036983432}
- {fileID: 1371068282}
- - {fileID: 7665142047032752812}
- - {fileID: 4078005684296227559}
diff --git a/Client/Assets/Scripts/Configs/ConfigProcessor.cs b/Client/Assets/Scripts/Configs/ConfigProcessor.cs
index 9dc772a..d4bc34e 100644
--- a/Client/Assets/Scripts/Configs/ConfigProcessor.cs
+++ b/Client/Assets/Scripts/Configs/ConfigProcessor.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.IO;
+using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Xml.Linq;
@@ -339,5 +340,53 @@ namespace Configs
return null;
}
}
+ ///
+ /// 获取指定目录下所有匹配后缀名的文件路径(可递归)
+ ///
+ /// 目标文件夹路径
+ /// 后缀名列表(如 ["txt", "jpg"])
+ /// 是否包含子文件夹
+ /// 匹配的文件路径列表
+ public static List GetFilesByExtensions(
+ string directoryPath,
+ string[] extensions,
+ SearchOption searchOption = SearchOption.AllDirectories)
+ {
+ if (string.IsNullOrWhiteSpace(directoryPath))
+ throw new ArgumentException("目录路径不能为空", nameof(directoryPath));
+
+ if (!Directory.Exists(directoryPath))
+ throw new DirectoryNotFoundException($"目录不存在: {directoryPath}");
+
+ if (extensions == null || extensions.Length == 0)
+ throw new ArgumentException("后缀名列表不能为空", nameof(extensions));
+
+ // 标准化后缀名(去掉点,转小写)
+ var normalizedExtensions = new HashSet(
+ extensions.Select(ext => ext.TrimStart('.').ToLower())
+ );
+
+ var result = new List();
+
+ try
+ {
+ var files = Directory.GetFiles(directoryPath, "*", searchOption);
+ foreach (var file in files)
+ {
+ var ext = Path.GetExtension(file).TrimStart('.').ToLower();
+ if (normalizedExtensions.Contains(ext))
+ {
+ result.Add(file);
+ }
+ }
+ }
+ catch (UnauthorizedAccessException ex)
+ {
+ // 可选:记录日志或忽略无权限目录
+ Console.WriteLine($"访问被拒绝: {ex.Message}");
+ }
+
+ return result;
+ }
}
}
\ No newline at end of file
diff --git a/Client/Assets/Scripts/Entity/Entity.cs b/Client/Assets/Scripts/Entity/Entity.cs
index e8dc4be..d91d736 100644
--- a/Client/Assets/Scripts/Entity/Entity.cs
+++ b/Client/Assets/Scripts/Entity/Entity.cs
@@ -16,7 +16,7 @@ namespace Entity
public AIBase aiTree;
public JobBase currentJob;
- public AttributesDef attributes;
+ public AttributesDef attributes=new();
public Vector3 direction;
public GameObject body;
public string affiliation;
@@ -42,15 +42,18 @@ namespace Entity
private bool _isPlayerControlled = false;
private bool _warning = false;
- private Dictionary> bodyNode=new();
- private Orientation currentOrientation=Orientation.Down;
+ private Dictionary> bodyAnimationNode=new();
+ private Dictionary bodyNodes = new();
+
+ private Orientation currentOrientation = Orientation.Down;
public virtual void Init(PawnDef pawnDef)
{
attributes = pawnDef.attributes.Clone();
aiTree = ConvertToAIBase(pawnDef.behaviorTree);
- affiliation=pawnDef.affiliation;
+ affiliation = pawnDef.affiliation;
InitBody(pawnDef.drawingOrder);
+
}
public virtual void InitBody(DrawingOrderDef drawingOrder)
@@ -60,8 +63,8 @@ namespace Entity
foreach (var orientation in orientations)
{
- currentOrientation=orientation;
- bodyNode[orientation]=new();
+ currentOrientation = orientation;
+ bodyAnimationNode[orientation] = new();
// 获取当前方向的绘图节点
var drawNode = drawingOrder.GetDrawingOrder(orientation);
@@ -70,8 +73,15 @@ namespace Entity
directionRoot.transform.SetParent(body.transform, false);
InitBodyPart(drawNode, directionRoot);
+ bodyNodes[orientation] = directionRoot;
}
- currentOrientation=Orientation.Down;
+ currentOrientation = Orientation.Down;
+
+ foreach (var bodyNode in bodyNodes)
+ {
+ bodyNode.Value.SetActive(false);
+ }
+ SetOrientation(Orientation.Down);
}
// 递归初始化单个绘图节点及其子节点
@@ -83,19 +93,19 @@ namespace Entity
switch (drawNode.drawNodeType)
{
case DrawNodeType.Image:
- nodeObject = Instantiate(imagePrefab.gameObject);
+ nodeObject = Instantiate(imagePrefab.gameObject,parent.transform);
break;
case DrawNodeType.Animation:
- nodeObject = Instantiate(animatorPrefab.gameObject);
+ nodeObject = Instantiate(animatorPrefab.gameObject,parent.transform);
ITick tick = nodeObject.GetComponent();
if (tick != null)
- bodyNode[currentOrientation].Add(tick);
+ bodyAnimationNode[currentOrientation].Add(tick);
break;
default:
throw new ArgumentOutOfRangeException();
}
-
+ nodeObject.transform.localPosition = drawNode.position;
// 递归初始化子节点
foreach (var child in drawNode.children)
{
@@ -113,9 +123,9 @@ namespace Entity
AutoBehave();
}
- foreach (var bodyPart in bodyNode.Values)
+ if (bodyAnimationNode.TryGetValue(currentOrientation, out var ticks))
{
- foreach (var tick in bodyPart)
+ foreach (var tick in ticks)
{
tick.Tick();
}
@@ -126,12 +136,19 @@ namespace Entity
{
}
+
+ public virtual void SetOrientation(Orientation orientation)
+ {
+ bodyNodes[currentOrientation]?.SetActive(false);
+ currentOrientation = orientation;
+ bodyNodes[orientation]?.SetActive(true);
+ }
///
/// 往对应朝向移动moveSpeed*deltaTime的距离
///
public virtual void TryMove()
{
- transform.position+=direction * (attributes.moveSpeed * Time.deltaTime * (IsChase ? 1 : 0.5f));
+ transform.position += direction * (attributes.moveSpeed * Time.deltaTime * (IsChase ? 1 : 0.5f));
}
public virtual void OnHit(Entity from)
@@ -156,6 +173,8 @@ namespace Entity
private void AutoBehave()
{
+ if(aiTree == null)
+ return;
if (currentJob == null || !currentJob.Running)
{
currentJob = aiTree.GetJob(this);
diff --git a/Client/Assets/Scripts/Managers/DefineManager.cs b/Client/Assets/Scripts/Managers/DefineManager.cs
index 44c06b3..964320f 100644
--- a/Client/Assets/Scripts/Managers/DefineManager.cs
+++ b/Client/Assets/Scripts/Managers/DefineManager.cs
@@ -14,9 +14,11 @@ namespace Managers
public class DefineManager : Singleton
{
private static readonly string[] dataSetFilePath = { "Data", "Mods" };
-
+ //类别,定义名,定义
public Dictionary> defines = new();
+ //包id,包
public Dictionary packs = new();
+ //类别,定义
public Dictionary> anonymousDefines = new();
///
/// 初始化定义管理器,加载所有定义包并构建定义字典。
@@ -46,12 +48,14 @@ namespace Managers
Dictionary fieldCache = new();
// 需要链接的定义、需要链接的字段、链接信息
List> defineCache = new();
+
+ string currentPackID = string.Empty;
void ProcessDefine(Define def)
{
if (def == null || def.isReferene)
return;
-
+ def.packID = currentPackID;
// 如果字段信息已经缓存,则直接使用缓存
if (!fieldCache.TryGetValue(def.GetType(), out var defineFields))
{
@@ -89,11 +93,12 @@ namespace Managers
foreach (var pack in packs)
{
+ currentPackID = pack.Value.packID;
foreach (var (typeName, defList) in pack.Value.defines)
{
if (!defines.ContainsKey(typeName))
defines[typeName] = new Dictionary();
-
+
foreach (var def in defList)
{
defines[typeName][def.defName] = def;
diff --git a/Client/Assets/Scripts/Managers/EntityManage.cs b/Client/Assets/Scripts/Managers/EntityManage.cs
index 5610772..6d968d1 100644
--- a/Client/Assets/Scripts/Managers/EntityManage.cs
+++ b/Client/Assets/Scripts/Managers/EntityManage.cs
@@ -1,3 +1,4 @@
+using System;
using System.Collections.Generic;
using System.Linq;
using Base;
@@ -12,6 +13,8 @@ namespace Managers
public GameObject entityLevel;
public EntityPrefab entityPrefab;
+
+ public EntityPrefab defaultEntityPrefab;
public void Tick()
{
@@ -57,6 +60,7 @@ namespace Managers
if (entityPrefab == null)
{
Debug.LogError("Error: entityPrefab is null. Please assign a valid prefab.");
+ GenerateDefaultEntity(pos);
return;
}
@@ -64,6 +68,7 @@ namespace Managers
if (pawnDef == null)
{
Debug.LogError("Error: PawnDef is null. Cannot generate entity without a valid PawnDef.");
+ GenerateDefaultEntity(pos);
return;
}
@@ -79,6 +84,7 @@ namespace Managers
if (entityComponent == null)
{
Debug.LogError($"Error: EntityPrefab component not found on the instantiated object: {entity.name}");
+ GenerateDefaultEntity(pos);
return;
}
@@ -96,12 +102,32 @@ namespace Managers
{
// 捕获并记录任何异常
Debug.LogError($"An error occurred while generating the entity: {ex.Message}");
+ GenerateDefaultEntity(pos);
}
}
+ public void GenerateDefaultEntity(Vector3 pos)
+ {
+ var entity = Instantiate(entityPrefab.gameObject, pos, Quaternion.identity, entityLevel.transform);
+ var entityComponent = entity.GetComponent();
+ const string factionKey = "default";
+ if (!factionEntities.ContainsKey(factionKey))
+ {
+ factionEntities[factionKey] = new List();
+ }
+ factionEntities[factionKey].Add(entityComponent);
+ }
protected override void OnStart()
{
factionEntities.Clear();
+
+ }
+
+ private void Start()
+ {
+ var pre = Resources.Load("Default/DefaultEntity");
+ defaultEntityPrefab = pre.GetComponent();
+
}
}
}
\ No newline at end of file
diff --git a/Client/Assets/Scripts/Managers/PackagesImageManager.cs b/Client/Assets/Scripts/Managers/PackagesImageManager.cs
index 39f60bb..7acc03c 100644
--- a/Client/Assets/Scripts/Managers/PackagesImageManager.cs
+++ b/Client/Assets/Scripts/Managers/PackagesImageManager.cs
@@ -1,6 +1,8 @@
+using System;
using System.Collections.Generic;
using System.IO;
using Data;
+using NUnit.Framework;
using UnityEngine;
namespace Managers
@@ -8,17 +10,25 @@ namespace Managers
public class PackagesImageManager : Utils.Singleton
{
public Sprite defaultSprite;
-
+ //包名,图片名
public Dictionary> packagesImages = new();
+ //包名,图片名
public Dictionary> sprites = new();
-
+ //包名,文件路径,身体部件名
+ public Dictionary>>> bodyTexture = new();
+
public void Init()
{
if (packagesImages.Count > 0)
return;
defaultSprite = Resources.Load("Default/DefaultImage");
- if(defaultSprite)
- Debug.Log("加载成功");
+ InitImageDef();
+ InitDrawOrder();
+ packagesImages = null;
+ }
+
+ public void InitImageDef()
+ {
var imageDef = Managers.DefineManager.Instance.QueryDefinesByType();
foreach (var ima in imageDef)
{
@@ -38,6 +48,44 @@ namespace Managers
SplitTextureIntoSprites(packId, ima.name, texture, ima.hCount, ima.wCount, ima.pixelsPerUnit);
}
+
+ }
+
+ public void InitDrawOrder()
+ {
+ var drawOrderDef = Managers.DefineManager.Instance.QueryDefinesByType();
+ if (drawOrderDef == null || drawOrderDef.Length == 0)
+ {
+ return;
+ }
+ Dictionary packRootSite = new();
+ foreach (var drawOrder in drawOrderDef)
+ {
+ if (string.IsNullOrEmpty(drawOrder.texturePath) || string.IsNullOrEmpty(drawOrder.packID))
+ continue;
+ if (!packRootSite.ContainsKey(drawOrder.packID))
+ packRootSite[drawOrder.packID] = Managers.DefineManager.Instance.GetPackagePath(drawOrder.packID);
+ var rootPath= packRootSite[drawOrder.packID];
+ var folderPath=Path.Combine(rootPath, drawOrder.texturePath);
+ var imagePath = Configs.ConfigProcessor.GetFilesByExtensions(folderPath,
+ new[]
+ {
+ "jpg", "jpeg", "png", "tga", "tif", "tiff", "psd", "bmp"
+ });
+ foreach (var path in imagePath)
+ {
+ var image=Configs.ConfigProcessor.LoadTextureByIO(path);
+ if (image == null)
+ continue;
+ var spr=Sprite.Create(
+ image,
+ new Rect(0, 0, image.width, image.height),
+ new Vector2(0.5f, 0.5f) // 中心点
+ );
+ var name=Path.GetFileNameWithoutExtension(path);
+ InsertBodySprite(drawOrder.packID, drawOrder.texturePath, name, spr);
+ }
+ }
}
private void SplitTextureIntoSprites(
@@ -131,5 +179,35 @@ namespace Managers
var fullName = $"{name}_{index}";
return GetSprite(packID, fullName);
}
+ ///
+ /// 插入 Sprite 到指定的嵌套字典中。
+ ///
+ /// 包名。
+ /// 文件路径。
+ /// 身体部件名。
+ /// 要插入的 Sprite 对象。
+ public void InsertBodySprite(string packageName, string filePath, string bodyPartName, Sprite sprite)
+ {
+ // 确保第一层字典(包名)存在
+ if (!bodyTexture.ContainsKey(packageName))
+ {
+ bodyTexture[packageName] = new Dictionary>>();
+ }
+
+ // 确保第二层字典(文件路径)存在
+ if (!bodyTexture[packageName].ContainsKey(filePath))
+ {
+ bodyTexture[packageName][filePath] = new Dictionary>();
+ }
+
+ // 确保第三层字典(身体部件名)存在
+ if (!bodyTexture[packageName][filePath].ContainsKey(bodyPartName))
+ {
+ bodyTexture[packageName][filePath][bodyPartName] = new List();
+ }
+
+ // 将 Sprite 添加到列表中
+ bodyTexture[packageName][filePath][bodyPartName].Add(sprite);
+ }
}
}
\ No newline at end of file
diff --git a/Client/Assets/Scripts/Prefab/ImagePrefab.cs b/Client/Assets/Scripts/Prefab/ImagePrefab.cs
index 07ab9b7..b7c4ebf 100644
--- a/Client/Assets/Scripts/Prefab/ImagePrefab.cs
+++ b/Client/Assets/Scripts/Prefab/ImagePrefab.cs
@@ -3,142 +3,42 @@ using UnityEngine;
namespace Prefab
{
- [RequireComponent(typeof(SpriteRenderer))]
+
+ [RequireComponent(typeof(SpriteRenderer))]
public class ImagePrefab : MonoBehaviour
{
- [Header("Display Settings")] [SerializeField]
- private Sprite _defaultSprite;
+ public Sprite defaultSprite;
- [SerializeField] private Color _tintColor = Color.white;
- [SerializeField, Range(0, 1)] private float _alpha = 1f;
- [SerializeField] private bool _preserveAspect = true;
-
- private SpriteRenderer _renderer;
- private Vector2 _originalSize;
- private bool _isInitialized;
-
- public Sprite DisplayedSprite => _renderer.sprite;
- public Color CurrentColor => _renderer.color;
+ private SpriteRenderer spriteRenderer;
private void Awake()
{
- InitializeRenderer();
- }
-
- private void InitializeRenderer()
- {
- if (_isInitialized) return;
-
- _renderer = GetComponent();
-
- // 初始尺寸记录
- if (_defaultSprite != null)
+ spriteRenderer = GetComponent();
+ if (spriteRenderer == null)
{
- _originalSize = new Vector2(
- _defaultSprite.rect.width / _defaultSprite.pixelsPerUnit,
- _defaultSprite.rect.height / _defaultSprite.pixelsPerUnit
- );
+ Debug.LogError("SpriteRenderer组件未找到,请确保预制体包含该组件!");
+ return;
}
-
- // 设置初始状态
- ApplyVisualSettings();
- _isInitialized = true;
- }
-
- private void ApplyVisualSettings()
- {
- if (!_isInitialized) InitializeRenderer();
-
- // 设置精灵和颜色
- _renderer.sprite = _defaultSprite;
- _renderer.color = new Color(_tintColor.r, _tintColor.g, _tintColor.b, _alpha);
-
- // 保持原始纵横比
- if (_preserveAspect && _defaultSprite != null)
+ if (defaultSprite != null)
{
- MaintainAspectRatio();
+ spriteRenderer.sprite = defaultSprite;
}
}
- private void MaintainAspectRatio()
- {
- Vector2 currentSize = transform.lossyScale;
- float aspectRatio = _originalSize.x / _originalSize.y;
-
- if (currentSize.x == 0 || currentSize.y == 0) return;
-
- float currentAspect = currentSize.x / currentSize.y;
-
- if (Mathf.Abs(currentAspect - aspectRatio) > 0.01f)
- {
- Vector2 newScale = currentSize;
- if (currentAspect > aspectRatio)
- {
- newScale.x = currentSize.y * aspectRatio;
- }
- else
- {
- newScale.y = currentSize.x / aspectRatio;
- }
-
- transform.localScale = newScale;
- }
- }
-
- // 公共控制方法
public void SetSprite(Sprite newSprite)
{
- _defaultSprite = newSprite;
- if (_defaultSprite != null)
+ if (spriteRenderer != null && newSprite != null)
{
- _originalSize = new Vector2(
- _defaultSprite.rect.width / _defaultSprite.pixelsPerUnit,
- _defaultSprite.rect.height / _defaultSprite.pixelsPerUnit
- );
+ spriteRenderer.sprite = newSprite;
}
-
- ApplyVisualSettings();
}
public void SetColor(Color newColor)
{
- _tintColor = newColor;
- ApplyVisualSettings();
- }
-
- public void SetAlpha(float newAlpha)
- {
- _alpha = Mathf.Clamp01(newAlpha);
- ApplyVisualSettings();
- }
-
- public void ToggleVisibility(bool isVisible)
- {
- if (!_isInitialized) InitializeRenderer();
- _renderer.enabled = isVisible;
- }
-
- public void SetSortingLayer(string layerName, int order)
- {
- if (!_isInitialized) InitializeRenderer();
- _renderer.sortingLayerName = layerName;
- _renderer.sortingOrder = order;
- }
-
-#if UNITY_EDITOR
- private void OnValidate()
- {
- // 编辑器模式下实时预览变化
- if (UnityEditor.EditorApplication.isPlaying)
+ if (spriteRenderer != null)
{
- ApplyVisualSettings();
- }
- else if (GetComponent() != null)
- {
- GetComponent().sprite = _defaultSprite;
- GetComponent().color = new Color(_tintColor.r, _tintColor.g, _tintColor.b, _alpha);
+ spriteRenderer.color = newColor;
}
}
-#endif
}
}
\ No newline at end of file
diff --git a/Client/Assets/Scripts/Test/TestDefine.cs b/Client/Assets/Scripts/Test/TestDefine.cs
index 673746a..55333bb 100644
--- a/Client/Assets/Scripts/Test/TestDefine.cs
+++ b/Client/Assets/Scripts/Test/TestDefine.cs
@@ -13,12 +13,14 @@ namespace Test
void Awake()
{
Managers.DefineManager.Instance.Init();
+
}
private void Start()
{
var chicken = Managers.DefineManager.Instance.FindDefine("testPawn");
entityManager.GenerateEntity(chicken,Vector3.zero);
+ entityManager.GenerateDefaultEntity(Vector3.down);
Debug.Log(chicken);
}
diff --git a/Client/Data/Core/Define/Map/Map.xml b/Client/Data/Core/Define/Map/Map.xml
index cccc224..48aa780 100644
--- a/Client/Data/Core/Define/Map/Map.xml
+++ b/Client/Data/Core/Define/Map/Map.xml
@@ -22,7 +22,7 @@
-
+
diff --git a/Client/Data/Core/Resources/Character/Test/Body/ab3cf10a9bf5bf22b4a28da98a2ecd3b.png b/Client/Data/Core/Resources/Character/Test/Body/ab3cf10a9bf5bf22b4a28da98a2ecd3b.png
new file mode 100644
index 0000000..2c1d5ce
Binary files /dev/null and b/Client/Data/Core/Resources/Character/Test/Body/ab3cf10a9bf5bf22b4a28da98a2ecd3b.png differ