Compare commits
25 Commits
2621093d7d
...
370f31990a
Author | SHA1 | Date | |
---|---|---|---|
370f31990a | |||
27cf9d2f41 | |||
a8bcb403ed | |||
c7fb3a3e27 | |||
58177350da | |||
c6baa7834d | |||
7dce32a71b | |||
2c57b1cf09 | |||
3be3a98968 | |||
7bb80e2e1f | |||
94c20de88f | |||
4e7b1ee954 | |||
6ab1b05397 | |||
7b596e11e8 | |||
4454a77bc7 | |||
72892d459e | |||
95d88e11ee | |||
ea7dab8eb6 | |||
677de647fd | |||
550c5d23f4 | |||
862eed60a2 | |||
d8d031bc1d | |||
21c2f3eee3 | |||
27bea5cff6 | |||
e7ae25db79 |
@ -1,117 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7df47ab88bc919c40831e8bdd2a64fbd
|
||||
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: 2
|
||||
spriteExtrude: 0
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 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:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -1,117 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0136a97b0760b7846a6839d0aff90863
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
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:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
BIN
Client/Assets/Plugins/Google.Protobuf.dll
Normal file
2
Client/Assets/Plugins/Google.Protobuf.dll.meta
Normal file
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 58793fbd79d5dc64fb809643ce24f665
|
BIN
Client/Assets/Plugins/Grpc.Core.Api.dll
Normal file
2
Client/Assets/Plugins/Grpc.Core.Api.dll.meta
Normal file
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b1e08ff72cdd6064883254a020cad051
|
BIN
Client/Assets/Plugins/Grpc.Net.Client.Web.dll
Normal file
2
Client/Assets/Plugins/Grpc.Net.Client.Web.dll.meta
Normal file
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d7e4bcae5efb0b14bad366d9e2cbfc3d
|
BIN
Client/Assets/Plugins/Grpc.Net.Client.dll
Normal file
2
Client/Assets/Plugins/Grpc.Net.Client.dll.meta
Normal file
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c61f603b1eefa51489d220166ce921ba
|
BIN
Client/Assets/Plugins/Grpc.Net.Common.dll
Normal file
2
Client/Assets/Plugins/Grpc.Net.Common.dll.meta
Normal file
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 992230fc9ae81744aa9c6d6f1998273f
|
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b719d2506760e4e43954921863684f40
|
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 081ac1838dc3211419aad66a1ea6a883
|
8
Client/Assets/Resources.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 822da0aa922f7f24582dbfe06e97cc55
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Before Width: | Height: | Size: 656 B After Width: | Height: | Size: 656 B |
Before Width: | Height: | Size: 680 B After Width: | Height: | Size: 680 B |
Before Width: | Height: | Size: 876 B After Width: | Height: | Size: 876 B |
Before Width: | Height: | Size: 1001 B After Width: | Height: | Size: 1001 B |
487
Client/Assets/Resources/Image/TileMap/GrassSoild.png.meta
Normal file
@ -0,0 +1,487 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7df47ab88bc919c40831e8bdd2a64fbd
|
||||
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: 0
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 0
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 2
|
||||
spriteExtrude: 0
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 16
|
||||
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:
|
||||
- serializedVersion: 2
|
||||
name: GrassSoild_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 48
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 7609998b30efb32439c0d371d2147293
|
||||
internalID: 1275623906
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassSoild_1
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 16
|
||||
y: 48
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 59c4962bbdb9ab74cb68d301f01ae9af
|
||||
internalID: -1651804695
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassSoild_2
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 32
|
||||
y: 48
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 596a8a7c637843743b18c6d433e25327
|
||||
internalID: -959520997
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassSoild_3
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 48
|
||||
y: 48
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: d02f642459ac7c743b2b08ddadb0b7ad
|
||||
internalID: -165938839
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassSoild_4
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 32
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: edfb6865b816dc043930627570242ea3
|
||||
internalID: 312896309
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassSoild_5
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 16
|
||||
y: 32
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 6d63e0432d8b1ef4c81656fe6f6e8c41
|
||||
internalID: 1837549606
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassSoild_6
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 32
|
||||
y: 32
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 778cf78999c40c0479a4b23a18283f5e
|
||||
internalID: 774617176
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassSoild_7
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 48
|
||||
y: 32
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: d4ef1e05863c0b04ab934bc361f10994
|
||||
internalID: 1252287581
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassSoild_8
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 16
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 5b197864071738e4e836bb20f61aa695
|
||||
internalID: -1521935608
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassSoild_9
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 16
|
||||
y: 16
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: dedc0d1b2d046474e94404de3618a4ef
|
||||
internalID: -762293138
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassSoild_10
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 32
|
||||
y: 16
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 21a1c2168c4a3c9439ca12f1231dd5c3
|
||||
internalID: 2025820583
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassSoild_11
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 48
|
||||
y: 16
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 04081c7a9a22d444987b1e0219ede074
|
||||
internalID: -982041411
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassSoild_12
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: ad89b2de2cd4a5f4b93752758a7e3450
|
||||
internalID: -1258520409
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassSoild_13
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 16
|
||||
y: 0
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: e98011415e5aa57468119aa9ad0b91a8
|
||||
internalID: 1107013079
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassSoild_14
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 32
|
||||
y: 0
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 96eb05642cd4a184d82f9e0ef8b753f1
|
||||
internalID: -1414388895
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassSoild_15
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 48
|
||||
y: 0
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: ff716e3da3e683441bdcf28f42356042
|
||||
internalID: -835259504
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: f5ae6ca9c58b20849b004aa8829c2f59
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries:
|
||||
- key: SpriteEditor.SliceSettings
|
||||
value: '{"sliceOnImport":false,"gridCellCount":{"x":1.0,"y":1.0},"gridSpriteSize":{"x":16.0,"y":16.0},"gridSpriteOffset":{"x":0.0,"y":0.0},"gridSpritePadding":{"x":0.0,"y":0.0},"pivot":{"x":0.0,"y":0.0},"autoSlicingMethod":0,"spriteAlignment":0,"slicingType":1,"keepEmptyRects":false,"isAlternate":false}'
|
||||
nameFileIdTable:
|
||||
GrassSoild_0: 1275623906
|
||||
GrassSoild_1: -1651804695
|
||||
GrassSoild_10: 2025820583
|
||||
GrassSoild_11: -982041411
|
||||
GrassSoild_12: -1258520409
|
||||
GrassSoild_13: 1107013079
|
||||
GrassSoild_14: -1414388895
|
||||
GrassSoild_15: -835259504
|
||||
GrassSoild_2: -959520997
|
||||
GrassSoild_3: -165938839
|
||||
GrassSoild_4: 312896309
|
||||
GrassSoild_5: 1837549606
|
||||
GrassSoild_6: 774617176
|
||||
GrassSoild_7: 1252287581
|
||||
GrassSoild_8: -1521935608
|
||||
GrassSoild_9: -762293138
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
487
Client/Assets/Resources/Image/TileMap/GrassWater.png.meta
Normal file
@ -0,0 +1,487 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0136a97b0760b7846a6839d0aff90863
|
||||
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: 0
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 0
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 2
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 16
|
||||
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:
|
||||
- serializedVersion: 2
|
||||
name: GrassWater_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 48
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 7a1cddcb98a74ad479836f79431a73ce
|
||||
internalID: -896420851
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassWater_1
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 16
|
||||
y: 48
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 6713748c1f2ce3948bbf133391513475
|
||||
internalID: 840105254
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassWater_2
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 32
|
||||
y: 48
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 959a1f18af882a64ba4de4fe9c9fad72
|
||||
internalID: -917425871
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassWater_3
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 48
|
||||
y: 48
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: f6ffb4168d9353e4ca99922b093fcac9
|
||||
internalID: -813287833
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassWater_4
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 32
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: bdd54cb5d327aae499852f1be0d8d01d
|
||||
internalID: -188781367
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassWater_5
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 16
|
||||
y: 32
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: aa5be6c3b6e99e648bd4c73d26af1948
|
||||
internalID: 1213113931
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassWater_6
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 32
|
||||
y: 32
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 9d73e8b78edae3e4cbd95181e7639b3f
|
||||
internalID: -1117061937
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassWater_7
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 48
|
||||
y: 32
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: ee2fce1f46313ca4684fcbdafa7a98ed
|
||||
internalID: 1026651763
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassWater_8
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 16
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 68c2897714bf1fc49892c577d2b7b4b6
|
||||
internalID: -538296849
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassWater_9
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 16
|
||||
y: 16
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: b73ae7634f9ba8b4781c906fef12a9ca
|
||||
internalID: 1191125718
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassWater_10
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 32
|
||||
y: 16
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 92e946de68aab384e977a6ca066c96ce
|
||||
internalID: -992808395
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassWater_11
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 48
|
||||
y: 16
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 67e743d98a5a91449b63f23ae12e3845
|
||||
internalID: -412815323
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassWater_12
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 4a8c2c2ca2cfc8e48a9fb50ae7332541
|
||||
internalID: -1916319736
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassWater_13
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 16
|
||||
y: 0
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 68c19bb22cc3618448a6da869bb20e08
|
||||
internalID: -526799999
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassWater_14
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 32
|
||||
y: 0
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 6f6c38e84dcafd4498cb2f1a6ea02615
|
||||
internalID: 358965833
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: GrassWater_15
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 48
|
||||
y: 0
|
||||
width: 16
|
||||
height: 16
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 01aa5674b9db2ff47aee82773330350f
|
||||
internalID: -151054341
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 3cac9e4880c345341a890eebece7638b
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries:
|
||||
- key: SpriteEditor.SliceSettings
|
||||
value: '{"sliceOnImport":false,"gridCellCount":{"x":1.0,"y":1.0},"gridSpriteSize":{"x":16.0,"y":16.0},"gridSpriteOffset":{"x":0.0,"y":0.0},"gridSpritePadding":{"x":0.0,"y":0.0},"pivot":{"x":0.0,"y":0.0},"autoSlicingMethod":0,"spriteAlignment":0,"slicingType":1,"keepEmptyRects":false,"isAlternate":false}'
|
||||
nameFileIdTable:
|
||||
GrassWater_0: -896420851
|
||||
GrassWater_1: 840105254
|
||||
GrassWater_10: -992808395
|
||||
GrassWater_11: -412815323
|
||||
GrassWater_12: -1916319736
|
||||
GrassWater_13: -526799999
|
||||
GrassWater_14: 358965833
|
||||
GrassWater_15: -151054341
|
||||
GrassWater_2: -917425871
|
||||
GrassWater_3: -813287833
|
||||
GrassWater_4: -188781367
|
||||
GrassWater_5: 1213113931
|
||||
GrassWater_6: -1117061937
|
||||
GrassWater_7: 1026651763
|
||||
GrassWater_8: -538296849
|
||||
GrassWater_9: 1191125718
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Before Width: | Height: | Size: 915 B After Width: | Height: | Size: 915 B |
8
Client/Assets/Resources/TileMap.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6594553846de62a4faaf69202016b61c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
36
Client/Assets/Resources/TileMap/GrassSoild_0.asset
Normal file
@ -0,0 +1,36 @@
|
||||
%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: 13312, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_Name: GrassSoild_0
|
||||
m_EditorClassIdentifier:
|
||||
m_Sprite: {fileID: 1275623906, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Transform:
|
||||
e00: 1
|
||||
e01: 0
|
||||
e02: 0
|
||||
e03: 0
|
||||
e10: 0
|
||||
e11: 1
|
||||
e12: 0
|
||||
e13: 0
|
||||
e20: 0
|
||||
e21: 0
|
||||
e22: 1
|
||||
e23: 0
|
||||
e30: 0
|
||||
e31: 0
|
||||
e32: 0
|
||||
e33: 1
|
||||
m_InstancedGameObject: {fileID: 0}
|
||||
m_Flags: 1
|
||||
m_ColliderType: 1
|
8
Client/Assets/Resources/TileMap/GrassSoild_0.asset.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a66c4b205a526f6488344cae59016692
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
36
Client/Assets/Resources/TileMap/GrassSoild_1.asset
Normal file
@ -0,0 +1,36 @@
|
||||
%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: 13312, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_Name: GrassSoild_1
|
||||
m_EditorClassIdentifier:
|
||||
m_Sprite: {fileID: -1651804695, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Transform:
|
||||
e00: 1
|
||||
e01: 0
|
||||
e02: 0
|
||||
e03: 0
|
||||
e10: 0
|
||||
e11: 1
|
||||
e12: 0
|
||||
e13: 0
|
||||
e20: 0
|
||||
e21: 0
|
||||
e22: 1
|
||||
e23: 0
|
||||
e30: 0
|
||||
e31: 0
|
||||
e32: 0
|
||||
e33: 1
|
||||
m_InstancedGameObject: {fileID: 0}
|
||||
m_Flags: 1
|
||||
m_ColliderType: 1
|
8
Client/Assets/Resources/TileMap/GrassSoild_1.asset.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: adb932fa8c0e98e42812fac3ef489d1a
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
36
Client/Assets/Resources/TileMap/GrassSoild_10.asset
Normal file
@ -0,0 +1,36 @@
|
||||
%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: 13312, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_Name: GrassSoild_10
|
||||
m_EditorClassIdentifier:
|
||||
m_Sprite: {fileID: 2025820583, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Transform:
|
||||
e00: 1
|
||||
e01: 0
|
||||
e02: 0
|
||||
e03: 0
|
||||
e10: 0
|
||||
e11: 1
|
||||
e12: 0
|
||||
e13: 0
|
||||
e20: 0
|
||||
e21: 0
|
||||
e22: 1
|
||||
e23: 0
|
||||
e30: 0
|
||||
e31: 0
|
||||
e32: 0
|
||||
e33: 1
|
||||
m_InstancedGameObject: {fileID: 0}
|
||||
m_Flags: 1
|
||||
m_ColliderType: 1
|
8
Client/Assets/Resources/TileMap/GrassSoild_10.asset.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4e5db9650f0caae459d2cae16e7c03d4
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
36
Client/Assets/Resources/TileMap/GrassSoild_11.asset
Normal file
@ -0,0 +1,36 @@
|
||||
%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: 13312, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_Name: GrassSoild_11
|
||||
m_EditorClassIdentifier:
|
||||
m_Sprite: {fileID: -982041411, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Transform:
|
||||
e00: 1
|
||||
e01: 0
|
||||
e02: 0
|
||||
e03: 0
|
||||
e10: 0
|
||||
e11: 1
|
||||
e12: 0
|
||||
e13: 0
|
||||
e20: 0
|
||||
e21: 0
|
||||
e22: 1
|
||||
e23: 0
|
||||
e30: 0
|
||||
e31: 0
|
||||
e32: 0
|
||||
e33: 1
|
||||
m_InstancedGameObject: {fileID: 0}
|
||||
m_Flags: 1
|
||||
m_ColliderType: 1
|
8
Client/Assets/Resources/TileMap/GrassSoild_11.asset.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dacf9ff887f871e4a95f2a2b76a6cbd7
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
36
Client/Assets/Resources/TileMap/GrassSoild_12.asset
Normal file
@ -0,0 +1,36 @@
|
||||
%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: 13312, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_Name: GrassSoild_12
|
||||
m_EditorClassIdentifier:
|
||||
m_Sprite: {fileID: -1258520409, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Transform:
|
||||
e00: 1
|
||||
e01: 0
|
||||
e02: 0
|
||||
e03: 0
|
||||
e10: 0
|
||||
e11: 1
|
||||
e12: 0
|
||||
e13: 0
|
||||
e20: 0
|
||||
e21: 0
|
||||
e22: 1
|
||||
e23: 0
|
||||
e30: 0
|
||||
e31: 0
|
||||
e32: 0
|
||||
e33: 1
|
||||
m_InstancedGameObject: {fileID: 0}
|
||||
m_Flags: 1
|
||||
m_ColliderType: 1
|
8
Client/Assets/Resources/TileMap/GrassSoild_12.asset.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ce1d003ccbf433c41a490e9683f2b885
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
36
Client/Assets/Resources/TileMap/GrassSoild_13.asset
Normal file
@ -0,0 +1,36 @@
|
||||
%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: 13312, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_Name: GrassSoild_13
|
||||
m_EditorClassIdentifier:
|
||||
m_Sprite: {fileID: 1107013079, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Transform:
|
||||
e00: 1
|
||||
e01: 0
|
||||
e02: 0
|
||||
e03: 0
|
||||
e10: 0
|
||||
e11: 1
|
||||
e12: 0
|
||||
e13: 0
|
||||
e20: 0
|
||||
e21: 0
|
||||
e22: 1
|
||||
e23: 0
|
||||
e30: 0
|
||||
e31: 0
|
||||
e32: 0
|
||||
e33: 1
|
||||
m_InstancedGameObject: {fileID: 0}
|
||||
m_Flags: 1
|
||||
m_ColliderType: 1
|
8
Client/Assets/Resources/TileMap/GrassSoild_13.asset.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fed4dd95775cc024382a7f98be9dac70
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
36
Client/Assets/Resources/TileMap/GrassSoild_14.asset
Normal file
@ -0,0 +1,36 @@
|
||||
%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: 13312, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_Name: GrassSoild_14
|
||||
m_EditorClassIdentifier:
|
||||
m_Sprite: {fileID: -1414388895, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Transform:
|
||||
e00: 1
|
||||
e01: 0
|
||||
e02: 0
|
||||
e03: 0
|
||||
e10: 0
|
||||
e11: 1
|
||||
e12: 0
|
||||
e13: 0
|
||||
e20: 0
|
||||
e21: 0
|
||||
e22: 1
|
||||
e23: 0
|
||||
e30: 0
|
||||
e31: 0
|
||||
e32: 0
|
||||
e33: 1
|
||||
m_InstancedGameObject: {fileID: 0}
|
||||
m_Flags: 1
|
||||
m_ColliderType: 1
|
8
Client/Assets/Resources/TileMap/GrassSoild_14.asset.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 75fc44e0e2c76d8499095deba226fdfa
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
36
Client/Assets/Resources/TileMap/GrassSoild_15.asset
Normal file
@ -0,0 +1,36 @@
|
||||
%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: 13312, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_Name: GrassSoild_15
|
||||
m_EditorClassIdentifier:
|
||||
m_Sprite: {fileID: -835259504, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Transform:
|
||||
e00: 1
|
||||
e01: 0
|
||||
e02: 0
|
||||
e03: 0
|
||||
e10: 0
|
||||
e11: 1
|
||||
e12: 0
|
||||
e13: 0
|
||||
e20: 0
|
||||
e21: 0
|
||||
e22: 1
|
||||
e23: 0
|
||||
e30: 0
|
||||
e31: 0
|
||||
e32: 0
|
||||
e33: 1
|
||||
m_InstancedGameObject: {fileID: 0}
|
||||
m_Flags: 1
|
||||
m_ColliderType: 1
|
8
Client/Assets/Resources/TileMap/GrassSoild_15.asset.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dbd2cefe86e443a47a01b02f431b60a2
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
36
Client/Assets/Resources/TileMap/GrassSoild_2.asset
Normal file
@ -0,0 +1,36 @@
|
||||
%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: 13312, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_Name: GrassSoild_2
|
||||
m_EditorClassIdentifier:
|
||||
m_Sprite: {fileID: -959520997, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Transform:
|
||||
e00: 1
|
||||
e01: 0
|
||||
e02: 0
|
||||
e03: 0
|
||||
e10: 0
|
||||
e11: 1
|
||||
e12: 0
|
||||
e13: 0
|
||||
e20: 0
|
||||
e21: 0
|
||||
e22: 1
|
||||
e23: 0
|
||||
e30: 0
|
||||
e31: 0
|
||||
e32: 0
|
||||
e33: 1
|
||||
m_InstancedGameObject: {fileID: 0}
|
||||
m_Flags: 1
|
||||
m_ColliderType: 1
|
8
Client/Assets/Resources/TileMap/GrassSoild_2.asset.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 53279ed64c282a843bba6c54e0b9ffbf
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
36
Client/Assets/Resources/TileMap/GrassSoild_3.asset
Normal file
@ -0,0 +1,36 @@
|
||||
%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: 13312, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_Name: GrassSoild_3
|
||||
m_EditorClassIdentifier:
|
||||
m_Sprite: {fileID: -165938839, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Transform:
|
||||
e00: 1
|
||||
e01: 0
|
||||
e02: 0
|
||||
e03: 0
|
||||
e10: 0
|
||||
e11: 1
|
||||
e12: 0
|
||||
e13: 0
|
||||
e20: 0
|
||||
e21: 0
|
||||
e22: 1
|
||||
e23: 0
|
||||
e30: 0
|
||||
e31: 0
|
||||
e32: 0
|
||||
e33: 1
|
||||
m_InstancedGameObject: {fileID: 0}
|
||||
m_Flags: 1
|
||||
m_ColliderType: 1
|
8
Client/Assets/Resources/TileMap/GrassSoild_3.asset.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: faaf900ad6a7c3d4681c80397f7c3d65
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
36
Client/Assets/Resources/TileMap/GrassSoild_4.asset
Normal file
@ -0,0 +1,36 @@
|
||||
%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: 13312, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_Name: GrassSoild_4
|
||||
m_EditorClassIdentifier:
|
||||
m_Sprite: {fileID: 312896309, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Transform:
|
||||
e00: 1
|
||||
e01: 0
|
||||
e02: 0
|
||||
e03: 0
|
||||
e10: 0
|
||||
e11: 1
|
||||
e12: 0
|
||||
e13: 0
|
||||
e20: 0
|
||||
e21: 0
|
||||
e22: 1
|
||||
e23: 0
|
||||
e30: 0
|
||||
e31: 0
|
||||
e32: 0
|
||||
e33: 1
|
||||
m_InstancedGameObject: {fileID: 0}
|
||||
m_Flags: 1
|
||||
m_ColliderType: 1
|
8
Client/Assets/Resources/TileMap/GrassSoild_4.asset.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b96801fb73875664c910a8a772e8cf59
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
36
Client/Assets/Resources/TileMap/GrassSoild_5.asset
Normal file
@ -0,0 +1,36 @@
|
||||
%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: 13312, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_Name: GrassSoild_5
|
||||
m_EditorClassIdentifier:
|
||||
m_Sprite: {fileID: 1837549606, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Transform:
|
||||
e00: 1
|
||||
e01: 0
|
||||
e02: 0
|
||||
e03: 0
|
||||
e10: 0
|
||||
e11: 1
|
||||
e12: 0
|
||||
e13: 0
|
||||
e20: 0
|
||||
e21: 0
|
||||
e22: 1
|
||||
e23: 0
|
||||
e30: 0
|
||||
e31: 0
|
||||
e32: 0
|
||||
e33: 1
|
||||
m_InstancedGameObject: {fileID: 0}
|
||||
m_Flags: 1
|
||||
m_ColliderType: 1
|
8
Client/Assets/Resources/TileMap/GrassSoild_5.asset.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fcf24c19caa8ce140a7240825ae2834c
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
36
Client/Assets/Resources/TileMap/GrassSoild_6.asset
Normal file
@ -0,0 +1,36 @@
|
||||
%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: 13312, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_Name: GrassSoild_6
|
||||
m_EditorClassIdentifier:
|
||||
m_Sprite: {fileID: 774617176, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Transform:
|
||||
e00: 1
|
||||
e01: 0
|
||||
e02: 0
|
||||
e03: 0
|
||||
e10: 0
|
||||
e11: 1
|
||||
e12: 0
|
||||
e13: 0
|
||||
e20: 0
|
||||
e21: 0
|
||||
e22: 1
|
||||
e23: 0
|
||||
e30: 0
|
||||
e31: 0
|
||||
e32: 0
|
||||
e33: 1
|
||||
m_InstancedGameObject: {fileID: 0}
|
||||
m_Flags: 1
|
||||
m_ColliderType: 1
|
8
Client/Assets/Resources/TileMap/GrassSoild_6.asset.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5b99c5db50e5d884d80abc10f5b111c4
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
36
Client/Assets/Resources/TileMap/GrassSoild_7.asset
Normal file
@ -0,0 +1,36 @@
|
||||
%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: 13312, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_Name: GrassSoild_7
|
||||
m_EditorClassIdentifier:
|
||||
m_Sprite: {fileID: 1252287581, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Transform:
|
||||
e00: 1
|
||||
e01: 0
|
||||
e02: 0
|
||||
e03: 0
|
||||
e10: 0
|
||||
e11: 1
|
||||
e12: 0
|
||||
e13: 0
|
||||
e20: 0
|
||||
e21: 0
|
||||
e22: 1
|
||||
e23: 0
|
||||
e30: 0
|
||||
e31: 0
|
||||
e32: 0
|
||||
e33: 1
|
||||
m_InstancedGameObject: {fileID: 0}
|
||||
m_Flags: 1
|
||||
m_ColliderType: 1
|
8
Client/Assets/Resources/TileMap/GrassSoild_7.asset.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ada3b309141b5764f94092c2881f8e10
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
36
Client/Assets/Resources/TileMap/GrassSoild_8.asset
Normal file
@ -0,0 +1,36 @@
|
||||
%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: 13312, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_Name: GrassSoild_8
|
||||
m_EditorClassIdentifier:
|
||||
m_Sprite: {fileID: -1521935608, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Transform:
|
||||
e00: 1
|
||||
e01: 0
|
||||
e02: 0
|
||||
e03: 0
|
||||
e10: 0
|
||||
e11: 1
|
||||
e12: 0
|
||||
e13: 0
|
||||
e20: 0
|
||||
e21: 0
|
||||
e22: 1
|
||||
e23: 0
|
||||
e30: 0
|
||||
e31: 0
|
||||
e32: 0
|
||||
e33: 1
|
||||
m_InstancedGameObject: {fileID: 0}
|
||||
m_Flags: 1
|
||||
m_ColliderType: 1
|
8
Client/Assets/Resources/TileMap/GrassSoild_8.asset.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 783eb64fca93bfe49a4b5a5762dfd71c
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
36
Client/Assets/Resources/TileMap/GrassSoild_9.asset
Normal file
@ -0,0 +1,36 @@
|
||||
%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: 13312, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_Name: GrassSoild_9
|
||||
m_EditorClassIdentifier:
|
||||
m_Sprite: {fileID: -762293138, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Transform:
|
||||
e00: 1
|
||||
e01: 0
|
||||
e02: 0
|
||||
e03: 0
|
||||
e10: 0
|
||||
e11: 1
|
||||
e12: 0
|
||||
e13: 0
|
||||
e20: 0
|
||||
e21: 0
|
||||
e22: 1
|
||||
e23: 0
|
||||
e30: 0
|
||||
e31: 0
|
||||
e32: 0
|
||||
e33: 1
|
||||
m_InstancedGameObject: {fileID: 0}
|
||||
m_Flags: 1
|
||||
m_ColliderType: 1
|
8
Client/Assets/Resources/TileMap/GrassSoild_9.asset.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d6a055af314e9d34cbc0d4077b2035db
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
429
Client/Assets/Resources/TileMap/New Tile Palette.prefab
Normal file
@ -0,0 +1,429 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &2388439063770187076
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7337181866313697544}
|
||||
- component: {fileID: 52469753740625856}
|
||||
m_Layer: 0
|
||||
m_Name: New Tile Palette
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &7337181866313697544
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2388439063770187076}
|
||||
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:
|
||||
- {fileID: 2608526879671573921}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!156049354 &52469753740625856
|
||||
Grid:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2388439063770187076}
|
||||
m_Enabled: 1
|
||||
m_CellSize: {x: 1, y: 1, z: 0}
|
||||
m_CellGap: {x: 0, y: 0, z: 0}
|
||||
m_CellLayout: 0
|
||||
m_CellSwizzle: 0
|
||||
--- !u!1 &8919849953490985661
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2608526879671573921}
|
||||
- component: {fileID: 6340222049933911700}
|
||||
- component: {fileID: 8479819329709119745}
|
||||
m_Layer: 0
|
||||
m_Name: Layer1
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &2608526879671573921
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8919849953490985661}
|
||||
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: 7337181866313697544}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1839735485 &6340222049933911700
|
||||
Tilemap:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8919849953490985661}
|
||||
m_Enabled: 1
|
||||
m_Tiles:
|
||||
- first: {x: -1, y: -4, z: 0}
|
||||
second:
|
||||
serializedVersion: 2
|
||||
m_TileIndex: 12
|
||||
m_TileSpriteIndex: 12
|
||||
m_TileMatrixIndex: 0
|
||||
m_TileColorIndex: 0
|
||||
m_TileObjectToInstantiateIndex: 65535
|
||||
dummyAlignment: 0
|
||||
m_AllTileFlags: 1073741825
|
||||
- first: {x: 0, y: -4, z: 0}
|
||||
second:
|
||||
serializedVersion: 2
|
||||
m_TileIndex: 13
|
||||
m_TileSpriteIndex: 13
|
||||
m_TileMatrixIndex: 0
|
||||
m_TileColorIndex: 0
|
||||
m_TileObjectToInstantiateIndex: 65535
|
||||
dummyAlignment: 0
|
||||
m_AllTileFlags: 1073741825
|
||||
- first: {x: 1, y: -4, z: 0}
|
||||
second:
|
||||
serializedVersion: 2
|
||||
m_TileIndex: 14
|
||||
m_TileSpriteIndex: 14
|
||||
m_TileMatrixIndex: 0
|
||||
m_TileColorIndex: 0
|
||||
m_TileObjectToInstantiateIndex: 65535
|
||||
dummyAlignment: 0
|
||||
m_AllTileFlags: 1073741825
|
||||
- first: {x: 2, y: -4, z: 0}
|
||||
second:
|
||||
serializedVersion: 2
|
||||
m_TileIndex: 15
|
||||
m_TileSpriteIndex: 15
|
||||
m_TileMatrixIndex: 0
|
||||
m_TileColorIndex: 0
|
||||
m_TileObjectToInstantiateIndex: 65535
|
||||
dummyAlignment: 0
|
||||
m_AllTileFlags: 1073741825
|
||||
- first: {x: -1, y: -3, z: 0}
|
||||
second:
|
||||
serializedVersion: 2
|
||||
m_TileIndex: 8
|
||||
m_TileSpriteIndex: 8
|
||||
m_TileMatrixIndex: 0
|
||||
m_TileColorIndex: 0
|
||||
m_TileObjectToInstantiateIndex: 65535
|
||||
dummyAlignment: 0
|
||||
m_AllTileFlags: 1073741825
|
||||
- first: {x: 0, y: -3, z: 0}
|
||||
second:
|
||||
serializedVersion: 2
|
||||
m_TileIndex: 9
|
||||
m_TileSpriteIndex: 9
|
||||
m_TileMatrixIndex: 0
|
||||
m_TileColorIndex: 0
|
||||
m_TileObjectToInstantiateIndex: 65535
|
||||
dummyAlignment: 0
|
||||
m_AllTileFlags: 1073741825
|
||||
- first: {x: 1, y: -3, z: 0}
|
||||
second:
|
||||
serializedVersion: 2
|
||||
m_TileIndex: 10
|
||||
m_TileSpriteIndex: 10
|
||||
m_TileMatrixIndex: 0
|
||||
m_TileColorIndex: 0
|
||||
m_TileObjectToInstantiateIndex: 65535
|
||||
dummyAlignment: 0
|
||||
m_AllTileFlags: 1073741825
|
||||
- first: {x: 2, y: -3, z: 0}
|
||||
second:
|
||||
serializedVersion: 2
|
||||
m_TileIndex: 11
|
||||
m_TileSpriteIndex: 11
|
||||
m_TileMatrixIndex: 0
|
||||
m_TileColorIndex: 0
|
||||
m_TileObjectToInstantiateIndex: 65535
|
||||
dummyAlignment: 0
|
||||
m_AllTileFlags: 1073741825
|
||||
- first: {x: -1, y: -2, z: 0}
|
||||
second:
|
||||
serializedVersion: 2
|
||||
m_TileIndex: 4
|
||||
m_TileSpriteIndex: 4
|
||||
m_TileMatrixIndex: 0
|
||||
m_TileColorIndex: 0
|
||||
m_TileObjectToInstantiateIndex: 65535
|
||||
dummyAlignment: 0
|
||||
m_AllTileFlags: 1073741825
|
||||
- first: {x: 0, y: -2, z: 0}
|
||||
second:
|
||||
serializedVersion: 2
|
||||
m_TileIndex: 5
|
||||
m_TileSpriteIndex: 5
|
||||
m_TileMatrixIndex: 0
|
||||
m_TileColorIndex: 0
|
||||
m_TileObjectToInstantiateIndex: 65535
|
||||
dummyAlignment: 0
|
||||
m_AllTileFlags: 1073741825
|
||||
- first: {x: 1, y: -2, z: 0}
|
||||
second:
|
||||
serializedVersion: 2
|
||||
m_TileIndex: 6
|
||||
m_TileSpriteIndex: 6
|
||||
m_TileMatrixIndex: 0
|
||||
m_TileColorIndex: 0
|
||||
m_TileObjectToInstantiateIndex: 65535
|
||||
dummyAlignment: 0
|
||||
m_AllTileFlags: 1073741825
|
||||
- first: {x: 2, y: -2, z: 0}
|
||||
second:
|
||||
serializedVersion: 2
|
||||
m_TileIndex: 7
|
||||
m_TileSpriteIndex: 7
|
||||
m_TileMatrixIndex: 0
|
||||
m_TileColorIndex: 0
|
||||
m_TileObjectToInstantiateIndex: 65535
|
||||
dummyAlignment: 0
|
||||
m_AllTileFlags: 1073741825
|
||||
- first: {x: -1, y: -1, z: 0}
|
||||
second:
|
||||
serializedVersion: 2
|
||||
m_TileIndex: 0
|
||||
m_TileSpriteIndex: 0
|
||||
m_TileMatrixIndex: 0
|
||||
m_TileColorIndex: 0
|
||||
m_TileObjectToInstantiateIndex: 65535
|
||||
dummyAlignment: 0
|
||||
m_AllTileFlags: 1073741825
|
||||
- first: {x: 0, y: -1, z: 0}
|
||||
second:
|
||||
serializedVersion: 2
|
||||
m_TileIndex: 1
|
||||
m_TileSpriteIndex: 1
|
||||
m_TileMatrixIndex: 0
|
||||
m_TileColorIndex: 0
|
||||
m_TileObjectToInstantiateIndex: 65535
|
||||
dummyAlignment: 0
|
||||
m_AllTileFlags: 1073741825
|
||||
- first: {x: 1, y: -1, z: 0}
|
||||
second:
|
||||
serializedVersion: 2
|
||||
m_TileIndex: 2
|
||||
m_TileSpriteIndex: 2
|
||||
m_TileMatrixIndex: 0
|
||||
m_TileColorIndex: 0
|
||||
m_TileObjectToInstantiateIndex: 65535
|
||||
dummyAlignment: 0
|
||||
m_AllTileFlags: 1073741825
|
||||
- first: {x: 2, y: -1, z: 0}
|
||||
second:
|
||||
serializedVersion: 2
|
||||
m_TileIndex: 3
|
||||
m_TileSpriteIndex: 3
|
||||
m_TileMatrixIndex: 0
|
||||
m_TileColorIndex: 0
|
||||
m_TileObjectToInstantiateIndex: 65535
|
||||
dummyAlignment: 0
|
||||
m_AllTileFlags: 1073741825
|
||||
m_AnimatedTiles: {}
|
||||
m_TileAssetArray:
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 11400000, guid: a66c4b205a526f6488344cae59016692, type: 2}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 11400000, guid: adb932fa8c0e98e42812fac3ef489d1a, type: 2}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 11400000, guid: 53279ed64c282a843bba6c54e0b9ffbf, type: 2}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 11400000, guid: faaf900ad6a7c3d4681c80397f7c3d65, type: 2}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 11400000, guid: b96801fb73875664c910a8a772e8cf59, type: 2}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 11400000, guid: fcf24c19caa8ce140a7240825ae2834c, type: 2}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 11400000, guid: 5b99c5db50e5d884d80abc10f5b111c4, type: 2}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 11400000, guid: ada3b309141b5764f94092c2881f8e10, type: 2}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 11400000, guid: 783eb64fca93bfe49a4b5a5762dfd71c, type: 2}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 11400000, guid: d6a055af314e9d34cbc0d4077b2035db, type: 2}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 11400000, guid: 4e5db9650f0caae459d2cae16e7c03d4, type: 2}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 11400000, guid: dacf9ff887f871e4a95f2a2b76a6cbd7, type: 2}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 11400000, guid: ce1d003ccbf433c41a490e9683f2b885, type: 2}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 11400000, guid: fed4dd95775cc024382a7f98be9dac70, type: 2}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 11400000, guid: 75fc44e0e2c76d8499095deba226fdfa, type: 2}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 11400000, guid: dbd2cefe86e443a47a01b02f431b60a2, type: 2}
|
||||
m_TileSpriteArray:
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 1275623906, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: -1651804695, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: -959520997, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: -165938839, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 312896309, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 1837549606, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 774617176, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 1252287581, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: -1521935608, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: -762293138, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 2025820583, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: -982041411, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: -1258520409, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: 1107013079, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: -1414388895, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
- m_RefCount: 1
|
||||
m_Data: {fileID: -835259504, guid: 7df47ab88bc919c40831e8bdd2a64fbd, type: 3}
|
||||
m_TileMatrixArray:
|
||||
- m_RefCount: 16
|
||||
m_Data:
|
||||
e00: 1
|
||||
e01: 0
|
||||
e02: 0
|
||||
e03: 0
|
||||
e10: 0
|
||||
e11: 1
|
||||
e12: 0
|
||||
e13: 0
|
||||
e20: 0
|
||||
e21: 0
|
||||
e22: 1
|
||||
e23: 0
|
||||
e30: 0
|
||||
e31: 0
|
||||
e32: 0
|
||||
e33: 1
|
||||
m_TileColorArray:
|
||||
- m_RefCount: 16
|
||||
m_Data: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_TileObjectToInstantiateArray: []
|
||||
m_AnimationFrameRate: 1
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Origin: {x: -1, y: -4, z: 0}
|
||||
m_Size: {x: 4, y: 4, z: 1}
|
||||
m_TileAnchor: {x: 0.5, y: 0.5, z: 0}
|
||||
m_TileOrientation: 0
|
||||
m_TileOrientationMatrix:
|
||||
e00: 1
|
||||
e01: 0
|
||||
e02: 0
|
||||
e03: 0
|
||||
e10: 0
|
||||
e11: 1
|
||||
e12: 0
|
||||
e13: 0
|
||||
e20: 0
|
||||
e21: 0
|
||||
e22: 1
|
||||
e23: 0
|
||||
e30: 0
|
||||
e31: 0
|
||||
e32: 0
|
||||
e33: 1
|
||||
--- !u!483693784 &8479819329709119745
|
||||
TilemapRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8919849953490985661}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 0
|
||||
m_ReflectionProbeUsage: 0
|
||||
m_RayTracingMode: 0
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2}
|
||||
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: 0
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_ChunkSize: {x: 32, y: 32, z: 32}
|
||||
m_ChunkCullingBounds: {x: 0, y: 0, z: 0}
|
||||
m_MaxChunkCount: 16
|
||||
m_MaxFrameAge: 16
|
||||
m_SortOrder: 0
|
||||
m_Mode: 0
|
||||
m_DetectChunkCullingBounds: 0
|
||||
m_MaskInteraction: 0
|
||||
--- !u!114 &4204763558256733435
|
||||
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: 12395, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_Name: Palette Settings
|
||||
m_EditorClassIdentifier:
|
||||
cellSizing: 0
|
||||
m_TransparencySortMode: 0
|
||||
m_TransparencySortAxis: {x: 0, y: 0, z: 1}
|
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b7602e94ef9f77049bd6760bbb9d8b21
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -303,50 +303,6 @@ Transform:
|
||||
- {fileID: 9462743}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &912467177
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 912467178}
|
||||
- component: {fileID: 912467179}
|
||||
m_Layer: 0
|
||||
m_Name: NetworkConnectionTest
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 0
|
||||
--- !u!4 &912467178
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 912467177}
|
||||
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: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &912467179
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 912467177}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 289a7efc822fe7347adfbf218522e8a2, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!1 &1057087086
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -660,8 +616,9 @@ GameObject:
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1485465861}
|
||||
- component: {fileID: 1485465862}
|
||||
m_Layer: 0
|
||||
m_Name: CatGirl
|
||||
m_Name: Character
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
@ -682,6 +639,62 @@ Transform:
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &1485465862
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1485465860}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 757576bb4354ac54da09868e1be02eec, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!1 &2104915506
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2104915508}
|
||||
- component: {fileID: 2104915507}
|
||||
m_Layer: 0
|
||||
m_Name: GrpcClientTest
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 0
|
||||
--- !u!114 &2104915507
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2104915506}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 98c1b145899d4d97bd981b177b5c45a9, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!4 &2104915508
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2104915506}
|
||||
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: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1660057539 &9223372036854775807
|
||||
SceneRoots:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -689,5 +702,5 @@ SceneRoots:
|
||||
- {fileID: 1371068282}
|
||||
- {fileID: 1057087090}
|
||||
- {fileID: 613797070}
|
||||
- {fileID: 912467178}
|
||||
- {fileID: 1485465861}
|
||||
- {fileID: 2104915508}
|
||||
|
@ -258,5 +258,31 @@ namespace Configs
|
||||
|
||||
return result;
|
||||
}
|
||||
/// <summary>
|
||||
/// 用于加载指定路径下的所有资源,并返回资源名称和加载好的资源的键值对。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">资源类型</typeparam>
|
||||
/// <param name="path">资源路径(相对于 Resources 文件夹)</param>
|
||||
/// <returns>字典,键为资源名称,值为加载好的资源</returns>
|
||||
public static Dictionary<string, T> LoadResources<T>(string path) where T : UnityEngine.Object
|
||||
{
|
||||
// 创建一个字典来存储资源名称和加载好的资源
|
||||
Dictionary<string, T> resourceDict = new Dictionary<string, T>();
|
||||
|
||||
// 加载指定路径下的所有资源
|
||||
T[] resources = Resources.LoadAll<T>(path);
|
||||
|
||||
foreach (T resource in resources)
|
||||
{
|
||||
if (resource != null)
|
||||
{
|
||||
// 获取资源名称并存入字典
|
||||
string resourceName = resource.name;
|
||||
resourceDict[resourceName] = resource;
|
||||
}
|
||||
}
|
||||
|
||||
return resourceDict;
|
||||
}
|
||||
}
|
||||
}
|
37
Client/Assets/Scripts/Data/AttributesDefine.cs
Normal file
@ -0,0 +1,37 @@
|
||||
|
||||
|
||||
namespace Data
|
||||
{
|
||||
public class CharacterAttributesDef : Define
|
||||
{
|
||||
public int health = 10;
|
||||
public int moveSpeed = 1;
|
||||
}
|
||||
public class WeaponAttributesDef : Define
|
||||
{
|
||||
public int attack = 1;
|
||||
public int defense = 0;
|
||||
public int attackSpeed = 2;
|
||||
public int attackRange = 3;
|
||||
public int attackTargetCount = 1;
|
||||
}
|
||||
public class MonsterAttributesDef : Define
|
||||
{
|
||||
public int health = 10;
|
||||
public int moveSpeed = 1;
|
||||
public int attack = 1;
|
||||
public int defense = 0;
|
||||
public int attackSpeed = 2;
|
||||
public int attackRange = 3;
|
||||
public int attackTargetCount = 1;
|
||||
}
|
||||
public class BuildingAttributesDef : Define
|
||||
{
|
||||
public int health = 10;
|
||||
public int attack = 1;
|
||||
public int defense = 0;
|
||||
public int attackSpeed = 2;
|
||||
public int attackRange = 3;
|
||||
public int attackTargetCount = 1;
|
||||
}
|
||||
}
|
2
Client/Assets/Scripts/Data/AttributesDefine.cs.meta
Normal file
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 449907b94fa9f8742a43a61b7fc2e5dc
|
@ -1,48 +1,143 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Xml.Linq;
|
||||
using UnityEditor.ShaderGraph.Internal;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Data
|
||||
{
|
||||
public enum Orientation
|
||||
{
|
||||
Down,
|
||||
Left,
|
||||
Right,
|
||||
Up
|
||||
}
|
||||
|
||||
public enum DrawNodeType
|
||||
{
|
||||
Image,
|
||||
Animation
|
||||
}
|
||||
|
||||
public class CharacterDef : Define
|
||||
{
|
||||
public CharacterAttributesDef attributes;
|
||||
public string texturePath = null;
|
||||
public DrawingOrderDef
|
||||
drawingOrder_down,
|
||||
drawingOrder_up,
|
||||
drawingOrder_left,
|
||||
drawingOrder_right;
|
||||
|
||||
public DrawingOrderDef GetDrawingOrder(Orientation orientation)
|
||||
{
|
||||
// 定义一个临时变量用于存储结果
|
||||
DrawingOrderDef result = null;
|
||||
|
||||
// 根据传入的 Orientation 获取对应的 DrawingOrderDef
|
||||
switch (orientation)
|
||||
{
|
||||
case Orientation.Down:
|
||||
result = drawingOrder_down;
|
||||
break;
|
||||
case Orientation.Up:
|
||||
result = drawingOrder_up;
|
||||
break;
|
||||
case Orientation.Left:
|
||||
result = drawingOrder_left;
|
||||
break;
|
||||
case Orientation.Right:
|
||||
result = drawingOrder_right;
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentException("Invalid orientation value.");
|
||||
}
|
||||
|
||||
// 如果当前方向的结果为空,则尝试用 drawingOrder_down 填充
|
||||
if (result == null) result = drawingOrder_down;
|
||||
|
||||
// 如果 drawingOrder_down 仍然为空,则尝试用其他非空方向填充
|
||||
if (result == null) result = drawingOrder_up ?? drawingOrder_left ?? drawingOrder_right;
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
public class DrawingOrderDef : Define
|
||||
{
|
||||
public List<DrawNodeDef> DrawNodes { get; set; } = new List<DrawNodeDef>();
|
||||
public List<DrawNodeDef> drawNodes = new();
|
||||
|
||||
public override bool Init(XElement xmlDef)
|
||||
{
|
||||
base.Init(xmlDef);
|
||||
foreach (var node in xmlDef.Elements("DrawNodes"))
|
||||
{
|
||||
DrawNodeDef drawNode = new DrawNodeDef();
|
||||
drawNode.Init(node);
|
||||
DrawNodes.Add(drawNode);
|
||||
}
|
||||
return true;
|
||||
|
||||
var nodes = xmlDef.Elements("DrawNodeDef");
|
||||
if (nodes.Count() == 0)
|
||||
return false;
|
||||
foreach (var node in nodes)
|
||||
{
|
||||
var drawNode = new DrawNodeDef();
|
||||
drawNode.Init(node);
|
||||
drawNodes.Add(drawNode);
|
||||
}
|
||||
|
||||
return true;;
|
||||
}
|
||||
}
|
||||
public partial class DrawNodeDef : Define
|
||||
|
||||
public class DrawNodeDef : Define
|
||||
{
|
||||
public string NodeName { get; set; }
|
||||
public List<DrawNodeDef> Children { get; set; } = new();
|
||||
public List<DrawNodeDef> children = new();
|
||||
public DrawNodeType drawNodeType = DrawNodeType.Image;
|
||||
public string nodeName;
|
||||
public Vector2 position = new(0, 0);
|
||||
public float FPS = 1;
|
||||
|
||||
public override bool Init(XElement xmlDef)
|
||||
{
|
||||
base.Init(xmlDef);
|
||||
NodeName = xmlDef.Attribute("name")?.Value;
|
||||
foreach (var childNode in xmlDef.Elements("DrawNode"))
|
||||
|
||||
nodeName = xmlDef.Attribute("name")?.Value;
|
||||
drawNodeType = Enum.TryParse(xmlDef.Attribute("type")?.Value, true, out DrawNodeType typeResult)
|
||||
? typeResult
|
||||
: DrawNodeType.Image;
|
||||
|
||||
position = StringToVector(xmlDef.Attribute("position")?.Value ?? "(0 0)");
|
||||
FPS = float.TryParse(xmlDef.Attribute("FPS")?.Value, out float result) ? result : 1.0f;
|
||||
foreach (var childNode in xmlDef.Elements("DrawNodeDef"))
|
||||
{
|
||||
DrawNodeDef child = new DrawNodeDef();
|
||||
var child = new DrawNodeDef();
|
||||
child.Init(childNode);
|
||||
Children.Add(child);
|
||||
children.Add(child);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public Vector2 StringToVector(string vectorDef)
|
||||
{
|
||||
// 去掉可能存在的括号和多余的空格
|
||||
string cleanedInput = vectorDef.Replace("(", "").Replace(")", "").Trim();
|
||||
|
||||
// 使用正则表达式匹配两个浮点数
|
||||
Match match = Regex.Match(cleanedInput, @"\s*(-?\d+(\.\d*)?)\s*[, ]\s*(-?\d+(\.\d*)?)\s*");
|
||||
|
||||
if (match.Success)
|
||||
{
|
||||
// 提取匹配到的两个浮点数
|
||||
float x = float.Parse(match.Groups[1].Value);
|
||||
float y = float.Parse(match.Groups[3].Value);
|
||||
|
||||
// 返回 Vector2 对象
|
||||
return new Vector2(x, y);
|
||||
}
|
||||
else
|
||||
{
|
||||
return Vector2.zero;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,4 +1,8 @@
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Xml.Linq;
|
||||
|
||||
@ -7,29 +11,30 @@ namespace Data
|
||||
public abstract class Define
|
||||
{
|
||||
public string defName;
|
||||
public string label;
|
||||
public string description;
|
||||
public string label;
|
||||
public string packID;
|
||||
|
||||
/// <summary>
|
||||
/// 初始化方法,根据传入的 XML 元素 (<paramref name="xmlDef"/>) 进行处理。
|
||||
/// 初始化方法,根据传入的 XML 元素 (<paramref name="xmlDef" />) 进行处理。
|
||||
/// </summary>
|
||||
/// <param name="xmlDef">包含定义信息的 XML 元素。</param>
|
||||
/// <returns>
|
||||
/// 返回一个布尔值:
|
||||
/// - 如果返回 <c>false</c>,表示按照默认方式处理(依次对 XML 进行变量名识别和赋值)。
|
||||
/// - 如果返回 <c>true</c>,表示使用自定义方式处理,不进行额外的默认处理。
|
||||
/// 返回一个布尔值:
|
||||
/// - 如果返回 <c>false</c>,表示按照默认方式处理(依次对 XML 进行变量名识别和赋值)。
|
||||
/// - 如果返回 <c>true</c>,表示使用自定义方式处理,不进行额外的默认处理。
|
||||
/// </returns>
|
||||
/// <remarks>
|
||||
/// <para>
|
||||
/// 该方法的基类实现会自动识别并处理以下三个变量:
|
||||
/// - <c>defName</c>
|
||||
/// - <c>label</c>
|
||||
/// - <c>description</c>
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// 如果需要覆盖默认行为,可以在派生类中重写此方法,并返回 <c>true</c>
|
||||
/// 以指示框架跳过默认处理逻辑。
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// 该方法的基类实现会自动识别并处理以下三个变量:
|
||||
/// - <c>defName</c>
|
||||
/// - <c>label</c>
|
||||
/// - <c>description</c>
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// 如果需要覆盖默认行为,可以在派生类中重写此方法,并返回 <c>true</c>
|
||||
/// 以指示框架跳过默认处理逻辑。
|
||||
/// </para>
|
||||
/// </remarks>
|
||||
public virtual bool Init(XElement xmlDef)
|
||||
{
|
||||
@ -38,21 +43,87 @@ namespace Data
|
||||
description = xmlDef.Element("description")?.Value;
|
||||
return false;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
// 定义对齐格式(左对齐,固定宽度)
|
||||
const int labelWidth = -15; // 标签左对齐,占15字符
|
||||
const int valueWidth = -30; // 值左对齐,占30字符
|
||||
|
||||
var sb = new StringBuilder();
|
||||
|
||||
sb.AppendLine($"{"DefName:",labelWidth}{defName,valueWidth}");
|
||||
sb.AppendLine($"{"Label:",labelWidth}{label,valueWidth}");
|
||||
sb.AppendLine($"{"Description:",labelWidth}{description,valueWidth}");
|
||||
sb.AppendLine($"{"PackID:",labelWidth}{packID,valueWidth}");
|
||||
|
||||
// 使用反射获取当前类的所有字段和属性
|
||||
var fieldsAndProperties = GetAllFieldsAndProperties(this);
|
||||
|
||||
foreach (var member in fieldsAndProperties)
|
||||
{
|
||||
var name = member.Name;
|
||||
var value = GetValue(member, this);
|
||||
|
||||
if (value is IList list && list.Count > 0) // 如果是列表类型
|
||||
{
|
||||
sb.AppendLine($"{name}:");
|
||||
foreach (var item in list) sb.AppendLine($" - {FormatValue(item)}");
|
||||
}
|
||||
else if (value is Define defineObject) // 如果是继承自 Define 的子类
|
||||
{
|
||||
if (!string.IsNullOrEmpty(defineObject.defName))
|
||||
{
|
||||
sb.AppendLine($"{name}: {defineObject.defName}");
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.AppendLine($"{name}:");
|
||||
sb.AppendLine(Indent(defineObject.ToString(), " "));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.AppendLine($"{name}: {FormatValue(value)}");
|
||||
}
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
private static IEnumerable<MemberInfo> GetAllFieldsAndProperties(object obj)
|
||||
{
|
||||
var type = obj.GetType();
|
||||
return type.GetFields(BindingFlags.Public | BindingFlags.Instance)
|
||||
.Concat(type.GetProperties(BindingFlags.Public | BindingFlags.Instance).Cast<MemberInfo>());
|
||||
}
|
||||
|
||||
private static object GetValue(MemberInfo member, object obj)
|
||||
{
|
||||
switch (member)
|
||||
{
|
||||
case FieldInfo field:
|
||||
return field.GetValue(obj);
|
||||
case PropertyInfo property:
|
||||
return property.GetValue(obj);
|
||||
default:
|
||||
throw new ArgumentException("Unsupported member type.");
|
||||
}
|
||||
}
|
||||
|
||||
private static string FormatValue(object value)
|
||||
{
|
||||
return value?.ToString() ?? "null";
|
||||
}
|
||||
|
||||
private static string Indent(string text, string prefix)
|
||||
{
|
||||
return string.Join(Environment.NewLine, text.Split('\n').Select(line => prefix + line));
|
||||
}
|
||||
}
|
||||
|
||||
public class DefineReference : Define
|
||||
{
|
||||
public Define def;
|
||||
public string className;
|
||||
public string fieldName;
|
||||
|
||||
public DefineReference(string className, string defName, string fieldName)
|
||||
{
|
||||
this.defName = defName;
|
||||
this.className = className;
|
||||
this.fieldName = fieldName;
|
||||
}
|
||||
}
|
||||
}
|
@ -6,6 +6,7 @@ using System.Text;
|
||||
using System.Xml.Linq;
|
||||
using Configs;
|
||||
using UnityEngine;
|
||||
using Object = System.Object;
|
||||
|
||||
namespace Data
|
||||
{
|
||||
@ -140,21 +141,35 @@ namespace Data
|
||||
var className = element.Name.ToString();
|
||||
if (string.IsNullOrEmpty(className))
|
||||
continue;
|
||||
// Debug.Log("1");
|
||||
var def = LoadDefineClass(element);
|
||||
var def = LoadDefineClass(element,element.Name.ToString());
|
||||
if (def == null)
|
||||
continue;
|
||||
// Debug.Log("2");
|
||||
def.packID = packID;
|
||||
if (!defines.ContainsKey(className))
|
||||
defines.Add(className, new List<Define>());
|
||||
defines[className].Add(def);
|
||||
// Debug.Log($"插入{className},{def.defName}");
|
||||
}
|
||||
}
|
||||
|
||||
private Define LoadDefineClass(XElement defineDoc)
|
||||
/// <summary>
|
||||
/// 根据指定的 XML 元素 (<paramref name="defineDoc"/>) 和类名 (<paramref name="className"/>),
|
||||
/// 动态加载并初始化一个继承自 <see cref="Define"/> 的类实例。
|
||||
/// </summary>
|
||||
/// <param name="defineDoc">包含类定义的 XML 元素 (<see cref="XElement"/>)。</param>
|
||||
/// <param name="className">目标类的全限定名或简短名称。</param>
|
||||
/// <returns>
|
||||
/// 如果成功加载并初始化,则返回对应的 <see cref="Define"/> 类实例;
|
||||
/// 否则返回 null。
|
||||
/// </returns>
|
||||
/// <exception cref="ArgumentNullException">
|
||||
/// 如果 <paramref name="defineDoc"/> 或 <paramref name="className"/> 为 null 或空字符串,则抛出此异常。
|
||||
/// </exception>
|
||||
/// <remarks>
|
||||
/// 该方法通过反射动态加载指定类,并检查其是否继承自 <see cref="Define"/>。
|
||||
/// 如果类存在且满足条件,则尝试调用其 <see cref="Define.Init(XElement)"/> 方法进行初始化。
|
||||
/// 如果初始化失败,则使用默认初始化方法 (<see cref="DefaultInitDefine(Define, XElement, Type)"/>)。
|
||||
/// </remarks>
|
||||
public static Define LoadDefineClass(XElement defineDoc,string className)
|
||||
{
|
||||
var className = defineDoc.Name.ToString();
|
||||
var assembly = Assembly.GetExecutingAssembly();
|
||||
|
||||
Type type;
|
||||
@ -206,8 +221,29 @@ namespace Data
|
||||
}
|
||||
|
||||
if (define.Init(defineDoc)) return define;
|
||||
// 获取类的所有字段(不包括私有字段)
|
||||
var fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic);
|
||||
DefaultInitDefine(define,defineDoc, type);
|
||||
|
||||
return define;
|
||||
}
|
||||
/// <summary>
|
||||
/// 初始化指定的 <paramref name="define"/> 对象,根据 <paramref name="defineDoc"/> 中的 XML 元素内容,
|
||||
/// 将对应的字段值赋给 <paramref name="define"/> 对象。
|
||||
/// </summary>
|
||||
/// <param name="define">需要初始化的对象实例。</param>
|
||||
/// <param name="defineDoc">包含字段定义的 XML 元素 (<see cref="XElement"/>)。</param>
|
||||
/// <param name="defineType">目标对象的类型 (<see cref="Type"/>)。</param>
|
||||
/// <exception cref="ArgumentNullException">
|
||||
/// 如果 <paramref name="define"/>、<paramref name="defineDoc"/> 或 <paramref name="defineType"/> 为 null,则抛出此异常。
|
||||
/// </exception>
|
||||
/// <remarks>
|
||||
/// 该方法会遍历 <paramref name="defineType"/> 的所有字段(包括公共和非公共字段),
|
||||
/// 并尝试从 <paramref name="defineDoc"/> 中找到与字段名称匹配的子元素。
|
||||
/// 如果找到匹配的子元素,则将其值转换为字段的类型并赋值给字段。
|
||||
/// 如果字段类型继承自 <see cref="Define"/>,则递归调用 <see cref="LoadDefineClass(XElement, string)"/> 方法进行加载。
|
||||
/// </remarks>
|
||||
public static void DefaultInitDefine(Define define,XElement defineDoc,Type defineType)
|
||||
{
|
||||
var fields = defineType.GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic);
|
||||
|
||||
// 遍历字段并尝试从 XElement 中赋值
|
||||
foreach (var field in fields)
|
||||
@ -217,8 +253,21 @@ namespace Data
|
||||
if (element != null)
|
||||
try
|
||||
{
|
||||
// 将子元素的值转换为目标类型并赋值
|
||||
var value = Convert.ChangeType(element.Value, field.FieldType);
|
||||
Object value;
|
||||
if (IsFieldTypeInheritedFrom(field, typeof(Define)))
|
||||
{
|
||||
if (element.HasElements)
|
||||
{
|
||||
value = LoadDefineClass(element, field.FieldType.Name);
|
||||
}
|
||||
else
|
||||
{
|
||||
value = new DefineReference(field.FieldType.Name, element.Value, field.Name);
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
value = Convert.ChangeType(element.Value, field.FieldType);
|
||||
field.SetValue(define, value);
|
||||
}
|
||||
catch (Exception ex)
|
||||
@ -226,8 +275,6 @@ namespace Data
|
||||
Debug.LogWarning($"Error setting field {field.Name}: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
return define;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -278,5 +325,23 @@ namespace Data
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 检查字段的类型是否继承自指定的类
|
||||
/// </summary>
|
||||
/// <param name="field">字段信息</param>
|
||||
/// <param name="baseType">要检查的基类类型</param>
|
||||
/// <returns>如果字段的类型是基类或其派生类,则返回 true</returns>
|
||||
public static bool IsFieldTypeInheritedFrom(FieldInfo field, Type baseType)
|
||||
{
|
||||
// 获取字段的类型
|
||||
var fieldType = field.FieldType;
|
||||
// 如果字段的类型为 null 或不是基类的派生类,则返回 false
|
||||
if (!baseType.IsAssignableFrom(fieldType))
|
||||
return false;
|
||||
|
||||
// 如果字段的类型直接是基类或其派生类,则返回 true
|
||||
return fieldType != baseType && baseType.IsAssignableFrom(fieldType);
|
||||
}
|
||||
}
|
||||
}
|
50
Client/Assets/Scripts/Data/MapDefine.cs
Normal file
@ -0,0 +1,50 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Xml;
|
||||
using System.Xml.Linq;
|
||||
using UnityEditor.Animations;
|
||||
using UnityEngine.Tilemaps;
|
||||
|
||||
namespace Data
|
||||
{
|
||||
public class TileDef : Define
|
||||
{
|
||||
public string texturePath = "";
|
||||
public string name = "";
|
||||
|
||||
public override bool Init(XElement xmlDef)
|
||||
{
|
||||
base.Init(xmlDef);
|
||||
name = defName;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public class TileMappingTableDef : Define
|
||||
{
|
||||
public Dictionary<string, string> tileDict = new();
|
||||
public override bool Init(XElement xmlDef)
|
||||
{
|
||||
base.Init(xmlDef);
|
||||
// 清空字典以确保没有遗留数据
|
||||
tileDict.Clear();
|
||||
// 检查 xmlDef 是否为空
|
||||
if (xmlDef == null)
|
||||
return false;
|
||||
foreach (var element in xmlDef.Elements())
|
||||
{
|
||||
// 获取子元素的名称作为键
|
||||
var key = element.Name.LocalName;
|
||||
// 获取子元素的 value 属性作为值
|
||||
var value = element.Attribute("value")?.Value;
|
||||
// 检查 value 是否存在
|
||||
if (!string.IsNullOrEmpty(value))
|
||||
{
|
||||
tileDict[key] = value;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
3
Client/Assets/Scripts/Data/MapDefine.cs.meta
Normal file
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 67d4d2ac30e641189cdf018ad6769f0e
|
||||
timeCreated: 1752496329
|
96
Client/Assets/Scripts/Entity/Character.cs
Normal file
@ -0,0 +1,96 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using Data;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Entity
|
||||
{
|
||||
public class Character : MonoBehaviour
|
||||
{
|
||||
private void Start()
|
||||
{
|
||||
if (Managers.DefineManager.Instance.defines.TryGetValue("DrawingOrderDef",out var typeDict))
|
||||
{
|
||||
GenerateDrawNode(typeDict.Values?.FirstOrDefault()as DrawingOrderDef);
|
||||
}
|
||||
}
|
||||
|
||||
public void Init(CharacterDef def)
|
||||
{
|
||||
|
||||
if (def == null)
|
||||
return;
|
||||
GenerateDrawNode(def.GetDrawingOrder(Orientation.Down));
|
||||
}
|
||||
|
||||
// 生成图片或动画节点
|
||||
private void GenerateDrawNode(DrawingOrderDef def)
|
||||
{
|
||||
// Debug.Log(def);
|
||||
// 删除现有子节点
|
||||
DeleteAllChildren();
|
||||
|
||||
// 生成根节点下的所有节点
|
||||
foreach (var nodeDef in def.drawNodes) GenerateNode(nodeDef, transform); // 在当前节点下生成
|
||||
}
|
||||
|
||||
// 递归生成节点
|
||||
private void GenerateNode(DrawNodeDef nodeDef, Transform parent)
|
||||
{
|
||||
// Debug.Log(nodeDef.nodeName);
|
||||
// 创建新的 GameObject 表示节点
|
||||
var nodeObject = new GameObject(nodeDef.nodeName);
|
||||
|
||||
// 设置父节点
|
||||
nodeObject.transform.SetParent(parent, false);
|
||||
|
||||
// 根据节点类型生成不同的内容
|
||||
switch (nodeDef.drawNodeType)
|
||||
{
|
||||
case DrawNodeType.Image:
|
||||
CreateImageNode(nodeObject);
|
||||
break;
|
||||
|
||||
case DrawNodeType.Animation:
|
||||
CreateAnimationNode(nodeObject);
|
||||
break;
|
||||
|
||||
default:
|
||||
Debug.LogWarning($"Unsupported node type: {nodeDef.drawNodeType}");
|
||||
break;
|
||||
}
|
||||
|
||||
// 递归生成子节点
|
||||
if (nodeDef.children != null && nodeDef.children.Count > 0)
|
||||
foreach (var childNodeDef in nodeDef.children)
|
||||
GenerateNode(childNodeDef, nodeObject.transform); // 在当前节点下生成子节点
|
||||
}
|
||||
|
||||
// 创建图片节点
|
||||
private void CreateImageNode(GameObject nodeObject)
|
||||
{
|
||||
// 添加 SpriteRenderer 组件表示图片
|
||||
var spriteRenderer = nodeObject.AddComponent<SpriteRenderer>();
|
||||
spriteRenderer.sprite = Resources.Load<Sprite>("DefaultImage"); // 加载默认图片
|
||||
spriteRenderer.color = Color.white; // 设置默认颜色
|
||||
}
|
||||
|
||||
// 创建动画节点
|
||||
private void CreateAnimationNode(GameObject nodeObject)
|
||||
{
|
||||
// 添加 Animator 组件表示动画
|
||||
var animator = nodeObject.AddComponent<Animator>();
|
||||
animator.runtimeAnimatorController =
|
||||
Resources.Load<RuntimeAnimatorController>("DefaultAnimation"); // 加载默认动画控制器
|
||||
}
|
||||
|
||||
private void DeleteAllChildren()
|
||||
{
|
||||
// 获取当前对象的 Transform
|
||||
var parentTransform = transform;
|
||||
|
||||
// 删除所有子对象
|
||||
foreach (Transform child in parentTransform) Destroy(child.gameObject); // 使用 Destroy 方法删除子对象
|
||||
}
|
||||
}
|
||||
}
|
2
Client/Assets/Scripts/Entity/Character.cs.meta
Normal file
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 757576bb4354ac54da09868e1be02eec
|
@ -1,18 +1,27 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using Data;
|
||||
using UnityEngine;
|
||||
using Utils;
|
||||
|
||||
namespace Managers
|
||||
{
|
||||
public class DefineManager : Singleton<DefineManager>
|
||||
{
|
||||
private const string coreNamespace = "Data";
|
||||
private static readonly string[] dataSetFilePath = { "Data", "Mod" };
|
||||
|
||||
public Dictionary<string, Dictionary<string, Define>> defines = new();
|
||||
public Dictionary<string, DefinePack> packs = new();
|
||||
|
||||
/// <summary>
|
||||
/// 初始化定义管理器,加载所有定义包并构建定义字典。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 该方法执行以下操作:
|
||||
/// 1. 获取指定路径下的所有子文件夹,每个子文件夹代表一个定义包。
|
||||
/// 2. 遍历每个定义包,尝试加载其中的定义数据。
|
||||
/// 3. 将加载的定义数据按类型分类,并存储到定义字典中。
|
||||
/// </remarks>
|
||||
public void Init()
|
||||
{
|
||||
var packFolder = Configs.ConfigProcessor.GetSubFolders(new(dataSetFilePath));
|
||||
@ -21,8 +30,70 @@ namespace Managers
|
||||
var pack = new DefinePack();
|
||||
if (pack.LoadPack(folder)) packs.Add(pack.packID, pack);
|
||||
}
|
||||
}
|
||||
List<Tuple<Define,DefineReference>> defineRefs = new();
|
||||
foreach (var pack in packs)
|
||||
{
|
||||
foreach (var define in pack.Value.defines)
|
||||
{
|
||||
var typeName=define.Key;
|
||||
var defList=define.Value;
|
||||
if (!defines.ContainsKey(typeName))
|
||||
defines[typeName] = new Dictionary<string, Define>();
|
||||
foreach (var def in defList)
|
||||
{
|
||||
defines[typeName][def.defName] = def;
|
||||
if (def is DefineReference reference)
|
||||
{
|
||||
defineRefs.Add(new(def,reference));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var defineRef in defineRefs)
|
||||
{
|
||||
var define = defineRef.Item1;
|
||||
var reference = defineRef.Item2;
|
||||
var referenceDef=FindDefine(reference.className,define.defName);
|
||||
|
||||
var property = define.GetType().GetProperty(reference.fieldName);
|
||||
if (property != null && property.CanWrite)
|
||||
{
|
||||
property.SetValue(define, referenceDef);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 如果是字段而不是属性
|
||||
var field = define.GetType().GetField(reference.fieldName);
|
||||
if (field != null)
|
||||
{
|
||||
field.SetValue(define, referenceDef);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 处理找不到成员的情况
|
||||
Debug.LogError($"Could not find field or property '{reference.fieldName}' in type {define.GetType().Name}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 查找指定定义类型的定义名对应的 Define 对象。
|
||||
/// </summary>
|
||||
/// <param name="defineType">定义类型</param>
|
||||
/// <param name="defineName">定义名</param>
|
||||
/// <returns>如果找到,返回 Define 对象;否则返回 null。</returns>
|
||||
public Define FindDefine(string defineType, string defineName)
|
||||
{
|
||||
if (defines.TryGetValue(defineType, out var typeDict))
|
||||
{
|
||||
if (typeDict.TryGetValue(defineName, out var define))
|
||||
{
|
||||
return define;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
public override string ToString()
|
||||
{
|
||||
if (packs == null || packs.Count == 0)
|
||||
|
@ -1,3 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Tilemaps;
|
||||
|
||||
@ -7,15 +9,24 @@ namespace Map
|
||||
{
|
||||
public Tilemap dataLevel;
|
||||
public Tilemap textureLevel;
|
||||
|
||||
public Dictionary<string, TileBase> tileDict = new();
|
||||
void Start()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
|
||||
tileDict = Configs.ConfigProcessor.LoadResources<TileBase>("TileMap");
|
||||
var tile= tileDict.Values;
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
for (int j = 0; j < 100; j++)
|
||||
{
|
||||
textureLevel.SetTile(new(i,j),tile.First());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class TileMappingTable:Utils.Singleton<TileMappingTable>
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 36bb272d9a70ff347965919811a887de
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
guid: 178450a3675642d799764a426bcb236f
|
||||
timeCreated: 1752480692
|
48
Client/Assets/Scripts/Network/GrpcClient.cs
Normal file
@ -0,0 +1,48 @@
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
using Grpc.Net.Client;
|
||||
using Grpc.Net.Client.Web;
|
||||
using Protocol;
|
||||
using Utils;
|
||||
|
||||
namespace Network
|
||||
{
|
||||
public class GrpcClient : Singleton<GrpcClient>
|
||||
{
|
||||
// The address must adopt HTTP.
|
||||
private const string ServerAddress = "http://127.0.0.1:12345";
|
||||
|
||||
private readonly GrpcChannel _channel;
|
||||
private readonly GameService.GameServiceClient _game;
|
||||
private readonly GeneralService.GeneralServiceClient _general;
|
||||
|
||||
public GrpcClient()
|
||||
{
|
||||
var httpHandler = new GrpcWebHandler(GrpcWebMode.GrpcWeb, new HttpClientHandler());
|
||||
var channelOptions = new GrpcChannelOptions
|
||||
{
|
||||
HttpHandler = httpHandler
|
||||
};
|
||||
|
||||
_channel = GrpcChannel.ForAddress(ServerAddress, channelOptions);
|
||||
|
||||
_general = new GeneralService.GeneralServiceClient(_channel);
|
||||
_game = new GameService.GameServiceClient(_channel);
|
||||
}
|
||||
|
||||
~GrpcClient()
|
||||
{
|
||||
_channel.ShutdownAsync().Wait();
|
||||
}
|
||||
|
||||
public async Task<ServerInfo> GetServerInfo()
|
||||
{
|
||||
return await _general.GetServerInfoAsync(new Empty());
|
||||
}
|
||||
|
||||
public async Task<LoginResponse> Login(string username, string password)
|
||||
{
|
||||
return await _game.LoginAsync(new LoginRequest { Username = username, Password = password });
|
||||
}
|
||||
}
|
||||
}
|
3
Client/Assets/Scripts/Network/GrpcClient.cs.meta
Normal file
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bd54dd152e0e4bbda802e9aa04078197
|
||||
timeCreated: 1752480707
|
@ -1,152 +0,0 @@
|
||||
using System;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
using Utils;
|
||||
|
||||
namespace Network
|
||||
{
|
||||
public class UnityTcpClient : Singleton<UnityTcpClient>
|
||||
{
|
||||
private TcpClient _tcpClient;
|
||||
public bool IsConnected => _tcpClient?.Connected ?? false;
|
||||
|
||||
/// <summary>
|
||||
/// 尝试连接到指定的地址和端口
|
||||
/// </summary>
|
||||
/// <param name="address">服务器地址</param>
|
||||
/// <param name="port">端口号</param>
|
||||
/// <returns>连接是否成功</returns>
|
||||
public async Task<bool> Connect(string address, int port)
|
||||
{
|
||||
if (IsConnected)
|
||||
{
|
||||
Debug.LogWarning("Already connected to a server.");
|
||||
return true;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// 创建一个新的 TcpClient 实例
|
||||
_tcpClient = new TcpClient();
|
||||
|
||||
// 尝试连接到指定的地址和端口
|
||||
await _tcpClient.ConnectAsync(address, port);
|
||||
|
||||
// 如果连接成功
|
||||
if (IsConnected)
|
||||
{
|
||||
Debug.Log($"Successfully connected to server at {address}:{port}");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (SocketException ex)
|
||||
{
|
||||
Debug.LogError($"Failed to connect to server at {address}:{port}. Error: {ex.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"An unexpected error occurred: {ex.Message}");
|
||||
}
|
||||
|
||||
// 如果发生任何错误或连接失败
|
||||
Disconnect();
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 断开与服务器的连接
|
||||
/// </summary>
|
||||
public void Disconnect()
|
||||
{
|
||||
if (!IsConnected)
|
||||
{
|
||||
Debug.LogWarning("Not currently connected to any server.");
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// 关闭 TcpClient 连接
|
||||
_tcpClient?.Close();
|
||||
|
||||
Debug.Log("Disconnected from the server.");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"Error while disconnecting: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 发送数据到服务器
|
||||
/// </summary>
|
||||
/// <param name="message">要发送的消息</param>
|
||||
public async Task Send(string message)
|
||||
{
|
||||
if (!IsConnected)
|
||||
{
|
||||
Debug.LogError("Cannot send data. Not connected to any server.");
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// 获取网络流
|
||||
var stream = _tcpClient.GetStream();
|
||||
|
||||
// 将消息转换为字节数组
|
||||
var data = Encoding.UTF8.GetBytes(message);
|
||||
|
||||
// 发送数据
|
||||
await stream.WriteAsync(data, 0, data.Length);
|
||||
|
||||
Debug.Log($"Sent message to server: {message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"Error while sending: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 接收来自服务器的数据
|
||||
/// </summary>
|
||||
/// <returns>接收到的消息</returns>
|
||||
public async Task<string> Receive()
|
||||
{
|
||||
if (!IsConnected)
|
||||
{
|
||||
Debug.LogError("Cannot receive data. Not connected to any server.");
|
||||
return null;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// 获取网络流
|
||||
var stream = _tcpClient.GetStream();
|
||||
|
||||
// 检查是否有可用数据
|
||||
if (stream.DataAvailable)
|
||||
{
|
||||
// 读取数据
|
||||
var buffer = new byte[1024];
|
||||
var bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
|
||||
|
||||
// 将字节数组转换为字符串
|
||||
var message = Encoding.UTF8.GetString(buffer, 0, bytesRead);
|
||||
|
||||
Debug.Log($"Received message from server: {message}");
|
||||
return message;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"Error while receiving: {ex.Message}");
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3cfed6461b8d6714bbc44fdac509c880
|
8
Client/Assets/Scripts/Protocol.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0aabb2c54fff484382fda9415503276b
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
1404
Client/Assets/Scripts/Protocol/Message.cs
Normal file
2
Client/Assets/Scripts/Protocol/Message.cs.meta
Normal file
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8afd87f1b9f31bb44be8c224d8fc7270
|
387
Client/Assets/Scripts/Protocol/MessageGrpc.cs
Normal file
@ -0,0 +1,387 @@
|
||||
// <auto-generated>
|
||||
// Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
// source: message.proto
|
||||
// </auto-generated>
|
||||
#pragma warning disable 0414, 1591, 8981, 0612
|
||||
#region Designer generated code
|
||||
|
||||
using grpc = global::Grpc.Core;
|
||||
|
||||
namespace Protocol {
|
||||
public static partial class GeneralService
|
||||
{
|
||||
static readonly string __ServiceName = "protocol.GeneralService";
|
||||
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
static void __Helper_SerializeMessage(global::Google.Protobuf.IMessage message, grpc::SerializationContext context)
|
||||
{
|
||||
#if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
|
||||
if (message is global::Google.Protobuf.IBufferMessage)
|
||||
{
|
||||
context.SetPayloadLength(message.CalculateSize());
|
||||
global::Google.Protobuf.MessageExtensions.WriteTo(message, context.GetBufferWriter());
|
||||
context.Complete();
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
context.Complete(global::Google.Protobuf.MessageExtensions.ToByteArray(message));
|
||||
}
|
||||
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
static class __Helper_MessageCache<T>
|
||||
{
|
||||
public static readonly bool IsBufferMessage = global::System.Reflection.IntrospectionExtensions.GetTypeInfo(typeof(global::Google.Protobuf.IBufferMessage)).IsAssignableFrom(typeof(T));
|
||||
}
|
||||
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
static T __Helper_DeserializeMessage<T>(grpc::DeserializationContext context, global::Google.Protobuf.MessageParser<T> parser) where T : global::Google.Protobuf.IMessage<T>
|
||||
{
|
||||
#if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
|
||||
if (__Helper_MessageCache<T>.IsBufferMessage)
|
||||
{
|
||||
return parser.ParseFrom(context.PayloadAsReadOnlySequence());
|
||||
}
|
||||
#endif
|
||||
return parser.ParseFrom(context.PayloadAsNewBuffer());
|
||||
}
|
||||
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
static readonly grpc::Marshaller<global::Protocol.Empty> __Marshaller_protocol_Empty = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Protocol.Empty.Parser));
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
static readonly grpc::Marshaller<global::Protocol.ServerInfo> __Marshaller_protocol_ServerInfo = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Protocol.ServerInfo.Parser));
|
||||
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
static readonly grpc::Method<global::Protocol.Empty, global::Protocol.ServerInfo> __Method_GetServerInfo = new grpc::Method<global::Protocol.Empty, global::Protocol.ServerInfo>(
|
||||
grpc::MethodType.Unary,
|
||||
__ServiceName,
|
||||
"GetServerInfo",
|
||||
__Marshaller_protocol_Empty,
|
||||
__Marshaller_protocol_ServerInfo);
|
||||
|
||||
/// <summary>Service descriptor</summary>
|
||||
public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor
|
||||
{
|
||||
get { return global::Protocol.MessageReflection.Descriptor.Services[0]; }
|
||||
}
|
||||
|
||||
/// <summary>Base class for server-side implementations of GeneralService</summary>
|
||||
[grpc::BindServiceMethod(typeof(GeneralService), "BindService")]
|
||||
public abstract partial class GeneralServiceBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Get server info from server.
|
||||
///
|
||||
/// This parameter actually doesn't accept any arguments,
|
||||
/// but it is still required owing to Protobuf grammar.
|
||||
/// </summary>
|
||||
/// <param name="request">The request received from the client.</param>
|
||||
/// <param name="context">The context of the server-side call handler being invoked.</param>
|
||||
/// <returns>The response to send back to the client (wrapped by a task).</returns>
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public virtual global::System.Threading.Tasks.Task<global::Protocol.ServerInfo> GetServerInfo(global::Protocol.Empty request, grpc::ServerCallContext context)
|
||||
{
|
||||
throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>Client for GeneralService</summary>
|
||||
public partial class GeneralServiceClient : grpc::ClientBase<GeneralServiceClient>
|
||||
{
|
||||
/// <summary>Creates a new client for GeneralService</summary>
|
||||
/// <param name="channel">The channel to use to make remote calls.</param>
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public GeneralServiceClient(grpc::ChannelBase channel) : base(channel)
|
||||
{
|
||||
}
|
||||
/// <summary>Creates a new client for GeneralService that uses a custom <c>CallInvoker</c>.</summary>
|
||||
/// <param name="callInvoker">The callInvoker to use to make remote calls.</param>
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public GeneralServiceClient(grpc::CallInvoker callInvoker) : base(callInvoker)
|
||||
{
|
||||
}
|
||||
/// <summary>Protected parameterless constructor to allow creation of test doubles.</summary>
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
protected GeneralServiceClient() : base()
|
||||
{
|
||||
}
|
||||
/// <summary>Protected constructor to allow creation of configured clients.</summary>
|
||||
/// <param name="configuration">The client configuration.</param>
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
protected GeneralServiceClient(ClientBaseConfiguration configuration) : base(configuration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get server info from server.
|
||||
///
|
||||
/// This parameter actually doesn't accept any arguments,
|
||||
/// but it is still required owing to Protobuf grammar.
|
||||
/// </summary>
|
||||
/// <param name="request">The request to send to the server.</param>
|
||||
/// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
|
||||
/// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
|
||||
/// <param name="cancellationToken">An optional token for canceling the call.</param>
|
||||
/// <returns>The response received from the server.</returns>
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public virtual global::Protocol.ServerInfo GetServerInfo(global::Protocol.Empty request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
|
||||
{
|
||||
return GetServerInfo(request, new grpc::CallOptions(headers, deadline, cancellationToken));
|
||||
}
|
||||
/// <summary>
|
||||
/// Get server info from server.
|
||||
///
|
||||
/// This parameter actually doesn't accept any arguments,
|
||||
/// but it is still required owing to Protobuf grammar.
|
||||
/// </summary>
|
||||
/// <param name="request">The request to send to the server.</param>
|
||||
/// <param name="options">The options for the call.</param>
|
||||
/// <returns>The response received from the server.</returns>
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public virtual global::Protocol.ServerInfo GetServerInfo(global::Protocol.Empty request, grpc::CallOptions options)
|
||||
{
|
||||
return CallInvoker.BlockingUnaryCall(__Method_GetServerInfo, null, options, request);
|
||||
}
|
||||
/// <summary>
|
||||
/// Get server info from server.
|
||||
///
|
||||
/// This parameter actually doesn't accept any arguments,
|
||||
/// but it is still required owing to Protobuf grammar.
|
||||
/// </summary>
|
||||
/// <param name="request">The request to send to the server.</param>
|
||||
/// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
|
||||
/// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
|
||||
/// <param name="cancellationToken">An optional token for canceling the call.</param>
|
||||
/// <returns>The call object.</returns>
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public virtual grpc::AsyncUnaryCall<global::Protocol.ServerInfo> GetServerInfoAsync(global::Protocol.Empty request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
|
||||
{
|
||||
return GetServerInfoAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
|
||||
}
|
||||
/// <summary>
|
||||
/// Get server info from server.
|
||||
///
|
||||
/// This parameter actually doesn't accept any arguments,
|
||||
/// but it is still required owing to Protobuf grammar.
|
||||
/// </summary>
|
||||
/// <param name="request">The request to send to the server.</param>
|
||||
/// <param name="options">The options for the call.</param>
|
||||
/// <returns>The call object.</returns>
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public virtual grpc::AsyncUnaryCall<global::Protocol.ServerInfo> GetServerInfoAsync(global::Protocol.Empty request, grpc::CallOptions options)
|
||||
{
|
||||
return CallInvoker.AsyncUnaryCall(__Method_GetServerInfo, null, options, request);
|
||||
}
|
||||
/// <summary>Creates a new instance of client from given <c>ClientBaseConfiguration</c>.</summary>
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
protected override GeneralServiceClient NewInstance(ClientBaseConfiguration configuration)
|
||||
{
|
||||
return new GeneralServiceClient(configuration);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Creates service definition that can be registered with a server</summary>
|
||||
/// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public static grpc::ServerServiceDefinition BindService(GeneralServiceBase serviceImpl)
|
||||
{
|
||||
return grpc::ServerServiceDefinition.CreateBuilder()
|
||||
.AddMethod(__Method_GetServerInfo, serviceImpl.GetServerInfo).Build();
|
||||
}
|
||||
|
||||
/// <summary>Register service method with a service binder with or without implementation. Useful when customizing the service binding logic.
|
||||
/// Note: this method is part of an experimental API that can change or be removed without any prior notice.</summary>
|
||||
/// <param name="serviceBinder">Service methods will be bound by calling <c>AddMethod</c> on this object.</param>
|
||||
/// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public static void BindService(grpc::ServiceBinderBase serviceBinder, GeneralServiceBase serviceImpl)
|
||||
{
|
||||
serviceBinder.AddMethod(__Method_GetServerInfo, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Protocol.Empty, global::Protocol.ServerInfo>(serviceImpl.GetServerInfo));
|
||||
}
|
||||
|
||||
}
|
||||
public static partial class GameService
|
||||
{
|
||||
static readonly string __ServiceName = "protocol.GameService";
|
||||
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
static void __Helper_SerializeMessage(global::Google.Protobuf.IMessage message, grpc::SerializationContext context)
|
||||
{
|
||||
#if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
|
||||
if (message is global::Google.Protobuf.IBufferMessage)
|
||||
{
|
||||
context.SetPayloadLength(message.CalculateSize());
|
||||
global::Google.Protobuf.MessageExtensions.WriteTo(message, context.GetBufferWriter());
|
||||
context.Complete();
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
context.Complete(global::Google.Protobuf.MessageExtensions.ToByteArray(message));
|
||||
}
|
||||
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
static class __Helper_MessageCache<T>
|
||||
{
|
||||
public static readonly bool IsBufferMessage = global::System.Reflection.IntrospectionExtensions.GetTypeInfo(typeof(global::Google.Protobuf.IBufferMessage)).IsAssignableFrom(typeof(T));
|
||||
}
|
||||
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
static T __Helper_DeserializeMessage<T>(grpc::DeserializationContext context, global::Google.Protobuf.MessageParser<T> parser) where T : global::Google.Protobuf.IMessage<T>
|
||||
{
|
||||
#if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
|
||||
if (__Helper_MessageCache<T>.IsBufferMessage)
|
||||
{
|
||||
return parser.ParseFrom(context.PayloadAsReadOnlySequence());
|
||||
}
|
||||
#endif
|
||||
return parser.ParseFrom(context.PayloadAsNewBuffer());
|
||||
}
|
||||
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
static readonly grpc::Marshaller<global::Protocol.LoginRequest> __Marshaller_protocol_LoginRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Protocol.LoginRequest.Parser));
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
static readonly grpc::Marshaller<global::Protocol.LoginResponse> __Marshaller_protocol_LoginResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Protocol.LoginResponse.Parser));
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
static readonly grpc::Marshaller<global::Protocol.SignupRequest> __Marshaller_protocol_SignupRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Protocol.SignupRequest.Parser));
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
static readonly grpc::Marshaller<global::Protocol.SignupResponse> __Marshaller_protocol_SignupResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Protocol.SignupResponse.Parser));
|
||||
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
static readonly grpc::Method<global::Protocol.LoginRequest, global::Protocol.LoginResponse> __Method_Login = new grpc::Method<global::Protocol.LoginRequest, global::Protocol.LoginResponse>(
|
||||
grpc::MethodType.Unary,
|
||||
__ServiceName,
|
||||
"Login",
|
||||
__Marshaller_protocol_LoginRequest,
|
||||
__Marshaller_protocol_LoginResponse);
|
||||
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
static readonly grpc::Method<global::Protocol.SignupRequest, global::Protocol.SignupResponse> __Method_Signup = new grpc::Method<global::Protocol.SignupRequest, global::Protocol.SignupResponse>(
|
||||
grpc::MethodType.Unary,
|
||||
__ServiceName,
|
||||
"Signup",
|
||||
__Marshaller_protocol_SignupRequest,
|
||||
__Marshaller_protocol_SignupResponse);
|
||||
|
||||
/// <summary>Service descriptor</summary>
|
||||
public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor
|
||||
{
|
||||
get { return global::Protocol.MessageReflection.Descriptor.Services[1]; }
|
||||
}
|
||||
|
||||
/// <summary>Base class for server-side implementations of GameService</summary>
|
||||
[grpc::BindServiceMethod(typeof(GameService), "BindService")]
|
||||
public abstract partial class GameServiceBase
|
||||
{
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public virtual global::System.Threading.Tasks.Task<global::Protocol.LoginResponse> Login(global::Protocol.LoginRequest request, grpc::ServerCallContext context)
|
||||
{
|
||||
throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
|
||||
}
|
||||
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public virtual global::System.Threading.Tasks.Task<global::Protocol.SignupResponse> Signup(global::Protocol.SignupRequest request, grpc::ServerCallContext context)
|
||||
{
|
||||
throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>Client for GameService</summary>
|
||||
public partial class GameServiceClient : grpc::ClientBase<GameServiceClient>
|
||||
{
|
||||
/// <summary>Creates a new client for GameService</summary>
|
||||
/// <param name="channel">The channel to use to make remote calls.</param>
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public GameServiceClient(grpc::ChannelBase channel) : base(channel)
|
||||
{
|
||||
}
|
||||
/// <summary>Creates a new client for GameService that uses a custom <c>CallInvoker</c>.</summary>
|
||||
/// <param name="callInvoker">The callInvoker to use to make remote calls.</param>
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public GameServiceClient(grpc::CallInvoker callInvoker) : base(callInvoker)
|
||||
{
|
||||
}
|
||||
/// <summary>Protected parameterless constructor to allow creation of test doubles.</summary>
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
protected GameServiceClient() : base()
|
||||
{
|
||||
}
|
||||
/// <summary>Protected constructor to allow creation of configured clients.</summary>
|
||||
/// <param name="configuration">The client configuration.</param>
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
protected GameServiceClient(ClientBaseConfiguration configuration) : base(configuration)
|
||||
{
|
||||
}
|
||||
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public virtual global::Protocol.LoginResponse Login(global::Protocol.LoginRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
|
||||
{
|
||||
return Login(request, new grpc::CallOptions(headers, deadline, cancellationToken));
|
||||
}
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public virtual global::Protocol.LoginResponse Login(global::Protocol.LoginRequest request, grpc::CallOptions options)
|
||||
{
|
||||
return CallInvoker.BlockingUnaryCall(__Method_Login, null, options, request);
|
||||
}
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public virtual grpc::AsyncUnaryCall<global::Protocol.LoginResponse> LoginAsync(global::Protocol.LoginRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
|
||||
{
|
||||
return LoginAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
|
||||
}
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public virtual grpc::AsyncUnaryCall<global::Protocol.LoginResponse> LoginAsync(global::Protocol.LoginRequest request, grpc::CallOptions options)
|
||||
{
|
||||
return CallInvoker.AsyncUnaryCall(__Method_Login, null, options, request);
|
||||
}
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public virtual global::Protocol.SignupResponse Signup(global::Protocol.SignupRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
|
||||
{
|
||||
return Signup(request, new grpc::CallOptions(headers, deadline, cancellationToken));
|
||||
}
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public virtual global::Protocol.SignupResponse Signup(global::Protocol.SignupRequest request, grpc::CallOptions options)
|
||||
{
|
||||
return CallInvoker.BlockingUnaryCall(__Method_Signup, null, options, request);
|
||||
}
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public virtual grpc::AsyncUnaryCall<global::Protocol.SignupResponse> SignupAsync(global::Protocol.SignupRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
|
||||
{
|
||||
return SignupAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
|
||||
}
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public virtual grpc::AsyncUnaryCall<global::Protocol.SignupResponse> SignupAsync(global::Protocol.SignupRequest request, grpc::CallOptions options)
|
||||
{
|
||||
return CallInvoker.AsyncUnaryCall(__Method_Signup, null, options, request);
|
||||
}
|
||||
/// <summary>Creates a new instance of client from given <c>ClientBaseConfiguration</c>.</summary>
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
protected override GameServiceClient NewInstance(ClientBaseConfiguration configuration)
|
||||
{
|
||||
return new GameServiceClient(configuration);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Creates service definition that can be registered with a server</summary>
|
||||
/// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public static grpc::ServerServiceDefinition BindService(GameServiceBase serviceImpl)
|
||||
{
|
||||
return grpc::ServerServiceDefinition.CreateBuilder()
|
||||
.AddMethod(__Method_Login, serviceImpl.Login)
|
||||
.AddMethod(__Method_Signup, serviceImpl.Signup).Build();
|
||||
}
|
||||
|
||||
/// <summary>Register service method with a service binder with or without implementation. Useful when customizing the service binding logic.
|
||||
/// Note: this method is part of an experimental API that can change or be removed without any prior notice.</summary>
|
||||
/// <param name="serviceBinder">Service methods will be bound by calling <c>AddMethod</c> on this object.</param>
|
||||
/// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
|
||||
public static void BindService(grpc::ServiceBinderBase serviceBinder, GameServiceBase serviceImpl)
|
||||
{
|
||||
serviceBinder.AddMethod(__Method_Login, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Protocol.LoginRequest, global::Protocol.LoginResponse>(serviceImpl.Login));
|
||||
serviceBinder.AddMethod(__Method_Signup, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Protocol.SignupRequest, global::Protocol.SignupResponse>(serviceImpl.Signup));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
#endregion
|
2
Client/Assets/Scripts/Protocol/MessageGrpc.cs.meta
Normal file
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f2f787a1d94a6ae48b5586f040f0cf1b
|
19
Client/Assets/Scripts/Test/GrpcClientTest.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using Network;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Test
|
||||
{
|
||||
public class GrpcClientTest : MonoBehaviour
|
||||
{
|
||||
private async void Start()
|
||||
{
|
||||
var serverInfo = await GrpcClient.Instance.GetServerInfo();
|
||||
|
||||
Debug.Log($"Received info from server: {serverInfo}");
|
||||
|
||||
var loginResult = await GrpcClient.Instance.Login("野兽先辈", "114514");
|
||||
|
||||
Debug.Log($"Received login result: {loginResult.Result}");
|
||||
}
|
||||
}
|
||||
}
|
3
Client/Assets/Scripts/Test/GrpcClientTest.cs.meta
Normal file
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 98c1b145899d4d97bd981b177b5c45a9
|
||||
timeCreated: 1752478138
|
@ -1,26 +0,0 @@
|
||||
using System.Threading.Tasks;
|
||||
using Network;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Test
|
||||
{
|
||||
public class NetworkConnectionTest : MonoBehaviour
|
||||
{
|
||||
private async void Start()
|
||||
{
|
||||
await BasicTest();
|
||||
}
|
||||
|
||||
private static async Task BasicTest()
|
||||
{
|
||||
var result = await UnityTcpClient.Instance.Connect("127.0.0.1", 12345);
|
||||
if (result) Debug.Log("Connected to server!");
|
||||
else Debug.LogError("Failed to connect to server!");
|
||||
|
||||
string buffer = null;
|
||||
while (buffer is null) buffer = await UnityTcpClient.Instance.Receive();
|
||||
|
||||
Debug.Log($"Received contents: {buffer}");
|
||||
}
|
||||
}
|
||||
}
|
@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 289a7efc822fe7347adfbf218522e8a2
|
@ -7,7 +7,7 @@ namespace Test
|
||||
public class TestDefine : MonoBehaviour
|
||||
{
|
||||
// Start is called once before the first execution of Update after the MonoBehaviour is created
|
||||
void Start()
|
||||
void Awake()
|
||||
{
|
||||
Managers.DefineManager.Instance.Init();
|
||||
Debug.Log(Managers.DefineManager.Instance);
|
||||
|
133
Client/Assets/Scripts/Utils/PerlinNoise.cs
Normal file
@ -0,0 +1,133 @@
|
||||
using System;
|
||||
|
||||
namespace Utils
|
||||
{
|
||||
public class PerlinNoise
|
||||
{
|
||||
private readonly int[] _p; // 混淆表
|
||||
|
||||
// 构造函数:初始化混淆表
|
||||
public PerlinNoise(int seed)
|
||||
{
|
||||
// 初始化为0-255的随机排列
|
||||
_p = new int[512]; // 混淆表加倍以方便使用
|
||||
var permutation = new int[256];
|
||||
var random = new Random(seed);
|
||||
|
||||
// 填充数组为0-255
|
||||
for (var i = 0; i < 256; i++) permutation[i] = i;
|
||||
|
||||
// 使用Fisher-Yates算法打乱数组
|
||||
for (var i = 0; i < 256; i++)
|
||||
{
|
||||
var swapIndex = random.Next(256);
|
||||
var temp = permutation[i];
|
||||
permutation[i] = permutation[swapIndex];
|
||||
permutation[swapIndex] = temp;
|
||||
}
|
||||
|
||||
// 将打乱后的数组复制两次,生成512个元素的混淆表
|
||||
for (var i = 0; i < 256; i++)
|
||||
{
|
||||
_p[i] = permutation[i];
|
||||
_p[i + 256] = permutation[i];
|
||||
}
|
||||
}
|
||||
|
||||
// 平滑函数 (6t^5 - 15t^4 + 10t^3)
|
||||
private double Fade(double t)
|
||||
{
|
||||
return t * t * t * (t * (t * 6 - 15) + 10);
|
||||
}
|
||||
|
||||
// 线性插值
|
||||
private double Lerp(double t, double a, double b)
|
||||
{
|
||||
return a + t * (b - a);
|
||||
}
|
||||
|
||||
// 计算梯度向量和距离向量的点积
|
||||
private double Grad(int hash, double x, double y, double z)
|
||||
{
|
||||
// 根据hash值确定使用哪个梯度向量
|
||||
// 12个梯度向量由以下组合构成:(+/-1, +/-1, 0), (+/-1, 0, +/-1), (0, +/-1, +/-1)
|
||||
switch (hash & 0xF) // 取hash值的最后4位
|
||||
{
|
||||
case 0x0: return x + y;
|
||||
case 0x1: return -x + y;
|
||||
case 0x2: return x - y;
|
||||
case 0x3: return -x - y;
|
||||
case 0x4: return x + z;
|
||||
case 0x5: return -x + z;
|
||||
case 0x6: return x - z;
|
||||
case 0x7: return -x - z;
|
||||
case 0x8: return y + z;
|
||||
case 0x9: return -y + z;
|
||||
case 0xA: return y - z;
|
||||
case 0xB: return -y - z;
|
||||
case 0xC: return y + x; // 这四个是重复的,但Ken Perlin的原始实现中包含它们。
|
||||
case 0xD: return -y + x; // 它们对噪声质量影响不大,但保持了表格的一致性。
|
||||
case 0xE: return y - x;
|
||||
case 0xF: return -y - x;
|
||||
default: return 0; // 不应该发生
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 为给定的(x, y, z)坐标生成3D Perlin噪声。
|
||||
/// 输出值通常在-1到1之间。
|
||||
/// </summary>
|
||||
public double Noise(double x, double y, double z)
|
||||
{
|
||||
// 找到包含该点的单位立方体
|
||||
var X = (int)Math.Floor(x) & 255;
|
||||
var Y = (int)Math.Floor(y) & 255;
|
||||
var Z = (int)Math.Floor(z) & 255;
|
||||
|
||||
// 找到该点在立方体内的相对x, y, z坐标
|
||||
x -= Math.Floor(x);
|
||||
y -= Math.Floor(y);
|
||||
z -= Math.Floor(z);
|
||||
|
||||
// 计算x, y, z的平滑曲线
|
||||
var u = Fade(x);
|
||||
var v = Fade(y);
|
||||
var w = Fade(z);
|
||||
|
||||
// 对立方体的8个角进行哈希计算
|
||||
var A = _p[X] + Y;
|
||||
var AA = _p[A] + Z;
|
||||
var AB = _p[A + 1] + Z;
|
||||
var B = _p[X + 1] + Y;
|
||||
var BA = _p[B] + Z;
|
||||
var BB = _p[B + 1] + Z;
|
||||
|
||||
// 获取所有8个角的哈希值
|
||||
var H000 = _p[AA];
|
||||
var H100 = _p[BA];
|
||||
var H010 = _p[AB];
|
||||
var H110 = _p[BB];
|
||||
var H001 = _p[AA + 1];
|
||||
var H101 = _p[BA + 1];
|
||||
var H011 = _p[AB + 1];
|
||||
var H111 = _p[BB + 1];
|
||||
|
||||
// 计算所有8个角的点积并插值
|
||||
double x0, x1, y0, y1;
|
||||
|
||||
x0 = Lerp(u, Grad(H000, x, y, z), // (0,0,0)
|
||||
Grad(H100, x - 1, y, z)); // (1,0,0)
|
||||
x1 = Lerp(u, Grad(H010, x, y - 1, z), // (0,1,0)
|
||||
Grad(H110, x - 1, y - 1, z)); // (1,1,0)
|
||||
y0 = Lerp(v, x0, x1);
|
||||
|
||||
x0 = Lerp(u, Grad(H001, x, y, z - 1), // (0,0,1)
|
||||
Grad(H101, x - 1, y, z - 1)); // (1,0,1)
|
||||
x1 = Lerp(u, Grad(H011, x, y - 1, z - 1), // (0,1,1)
|
||||
Grad(H111, x - 1, y - 1, z - 1)); // (1,1,1)
|
||||
y1 = Lerp(v, x0, x1);
|
||||
|
||||
return Lerp(w, y0, y1);
|
||||
}
|
||||
}
|
||||
}
|
3
Client/Assets/Scripts/Utils/PerlinNoise.cs.meta
Normal file
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 76fe380e58f0420db22ca4d403d17978
|
||||
timeCreated: 1752507440
|
39
Client/Data/Core/Define/Map/Map.xml
Normal file
@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Define>
|
||||
<TileMappingTableDef>
|
||||
<defName>GrassDirtTable</defName>
|
||||
<Grass_Grass_Grass_Grass value="GrassDirt_6"/>
|
||||
<!-- 2 + (1 * 4) = 6 -->
|
||||
<Dirt_Dirt_Dirt_Grass value="GrassDirt_13"/>
|
||||
<!-- 1 + (3 * 4) = 13 -->
|
||||
<Dirt_Dirt_Grass_Dirt value="GrassDirt_0"/>
|
||||
<!-- 0 + (0 * 4) = 0 -->
|
||||
<Dirt_Grass_Dirt_Dirt value="GrassDirt_8"/>
|
||||
<!-- 0 + (2 * 4) = 8 -->
|
||||
<Grass_Dirt_Dirt_Dirt value="GrassDirt_15"/>
|
||||
<!-- 3 + (3 * 4) = 15 -->
|
||||
<Dirt_Grass_Dirt_Grass value="GrassDirt_4"/>
|
||||
<!-- 1 + (0 * 4) = 1 -->
|
||||
<Grass_Dirt_Grass_Dirt value="GrassDirt_11"/>
|
||||
<!-- 3 + (2 * 4) = 11 -->
|
||||
<Dirt_Dirt_Grass_Grass value="GrassDirt_12"/>
|
||||
<!-- 3 + (0 * 4) = 3 -->
|
||||
<Grass_Grass_Dirt_Dirt value="GrassDirt_9"/>
|
||||
<!-- 1 + (2 * 4) = 9 -->
|
||||
<Dirt_Grass_Grass_Grass value="GrassDirt_5"/>
|
||||
<!-- 1 + (1 * 4) = 5 -->
|
||||
<Grass_Dirt_Grass_Grass value="GrassDirt_8"/>
|
||||
<!-- 2 + (0 * 4) = 2 -->
|
||||
<Grass_Grass_Dirt_Grass value="GrassDirt_10"/>
|
||||
<!-- 2 + (2 * 4) = 10 -->
|
||||
<Grass_Grass_Grass_Dirt value="GrassDirt_7"/>
|
||||
<!-- 3 + (1 * 4) = 7 -->
|
||||
<Dirt_Grass_Grass_Dirt value="GrassDirt_14"/>
|
||||
<!-- 2 + (3 * 4) = 14 -->
|
||||
<Grass_Dirt_Dirt_Grass value="GrassDirt_4"/>
|
||||
<!-- 0 + (1 * 4) = 4 -->
|
||||
<Dirt_Dirt_Dirt_Dirt value="GrassDirt_12"/>
|
||||
<!-- 0 + (3 * 4) = 12 -->
|
||||
</TileMappingTableDef>
|
||||
|
||||
</Define>
|
@ -1,11 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Define>
|
||||
<AttributesDef>
|
||||
<CharacterAttributesDef>
|
||||
<defName>CatGirl</defName>
|
||||
<health>100</health>
|
||||
<speed>1.2</speed>
|
||||
<strength>5</strength>
|
||||
</AttributesDef>
|
||||
<moveSpeed>1.2</moveSpeed>
|
||||
</CharacterAttributesDef>
|
||||
|
||||
<CharacterDef>
|
||||
<defName>CatGirl</defName>
|
||||
@ -24,7 +23,7 @@
|
||||
<DrawNodeDef name="body">
|
||||
<DrawNodeDef name="head">
|
||||
<DrawNodeDef name="backHair"/>
|
||||
<DrawNodeDef name="ear"/>
|
||||
<DrawNodeDef name="ear" type="animation" FPS="1"/>
|
||||
<DrawNodeDef name="face"/>
|
||||
<DrawNodeDef name="frontHair"/>
|
||||
<DrawNodeDef name="hat"/>
|
||||
@ -32,4 +31,5 @@
|
||||
<DrawNodeDef name="clothes"/>
|
||||
</DrawNodeDef>
|
||||
</DrawingOrderDef>
|
||||
|
||||
</Define>
|
@ -7,7 +7,7 @@
|
||||
"com.unity.collab-proxy": "2.8.2",
|
||||
"com.unity.ide.rider": "3.0.36",
|
||||
"com.unity.ide.visualstudio": "2.0.23",
|
||||
"com.unity.inputsystem": "1.14.0",
|
||||
"com.unity.inputsystem": "1.14.1",
|
||||
"com.unity.multiplayer.center": "1.0.0",
|
||||
"com.unity.render-pipelines.universal": "17.1.0",
|
||||
"com.unity.test-framework": "1.5.1",
|
||||
|
@ -89,7 +89,7 @@
|
||||
"url": "https://packages.unity.com"
|
||||
},
|
||||
"com.unity.inputsystem": {
|
||||
"version": "1.14.0",
|
||||
"version": "1.14.1",
|
||||
"depth": 0,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
|