Merge pull request 'DEG-25-강화-기초-로직-구현' (!10) from DEG-25-강화-기초-로직-구현 into main

Reviewed-on: #10
Reviewed-by: Sehyeon <sehyeon1837@gmail.com>
Reviewed-by: jay <ayjindev@gmail.com>
This commit is contained in:
jay 2025-05-07 04:38:26 +00:00
commit cbfd6ea865
41 changed files with 279234 additions and 26 deletions

BIN
Assets/KJM/KJM.unity (Stored with Git LFS)

Binary file not shown.

View File

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

View File

@ -6,11 +6,11 @@ using UnityEngine;
public class DungeonSave
{
// 강화 수치
public int attackLevel = 0;
public int attackPowerLevel = 0;
public int attackSpeedLevel = 0;
public int heartLevel = 0;
public int moveSpeedLevel = 0;
public int evasionTimeLevel = 0;
public int dashCoolDownLevel = 0;
// 현재 진행 중인 스테이지
public int stageLevel = 0;
@ -20,11 +20,11 @@ public class DungeonSave
{
if (other == null) return;
if (other.attackLevel != 0) attackLevel = other.attackLevel;
if (other.attackPowerLevel != 0) attackPowerLevel = other.attackPowerLevel;
if (other.attackSpeedLevel != 0) attackSpeedLevel = other.attackSpeedLevel;
if (other.heartLevel != 0) heartLevel = other.heartLevel;
if (other.moveSpeedLevel != 0) moveSpeedLevel = other.moveSpeedLevel;
if (other.evasionTimeLevel != 0) evasionTimeLevel = other.evasionTimeLevel;
if (other.dashCoolDownLevel != 0) dashCoolDownLevel = other.dashCoolDownLevel;
if (other.stageLevel != 0) stageLevel = other.stageLevel;
}
}

View File

@ -18,7 +18,6 @@ public class SaveManager : Singleton<SaveManager>
private Save mainSave;
private Save backupSave;
void Start()
{
Load(); //저장된 메인,백업 세이브를 로드

View File

@ -11,11 +11,11 @@ using Random = UnityEngine.Random;
public class TestScript : MonoBehaviour,ISaveable
{
//던전
private int attackLevel;
private int attackSpeedLevel;
private int heartLevel;
private int moveSpeedLevel;
private int evasionTimeLevel;
// private int attackPowerLevel;
// private int attackSpeedLevel;
// private int heartLevel;
// private int moveSpeedLevel;
// private int dashCoolDownLevel;
private int stageLevel;
//일상
@ -34,10 +34,10 @@ public class TestScript : MonoBehaviour,ISaveable
float floatValue = Random.Range(0f, 2f);
int intValue = Random.Range(0, 10);
attackLevel = intValue;
attackSpeedLevel = intValue;
heartLevel = intValue;
moveSpeedLevel = intValue;
// attackPowerLevel = intValue;
// attackSpeedLevel = intValue;
// heartLevel = intValue;
// moveSpeedLevel = intValue;
stageLevel = intValue;
@ -59,11 +59,11 @@ public class TestScript : MonoBehaviour,ISaveable
{
if (save?.dungeonSave != null)
{
attackLevel = save.dungeonSave.attackLevel;
attackSpeedLevel = save.dungeonSave.attackSpeedLevel;
heartLevel = save.dungeonSave.heartLevel;
moveSpeedLevel = save.dungeonSave.moveSpeedLevel;
evasionTimeLevel = save.dungeonSave.evasionTimeLevel;
// attackPowerLevel = save.dungeonSave.attackPowerLevel;
// attackSpeedLevel = save.dungeonSave.attackSpeedLevel;
// heartLevel = save.dungeonSave.heartLevel;
// moveSpeedLevel = save.dungeonSave.moveSpeedLevel;
// dashCoolDownLevel = save.dungeonSave.dashCoolDownLevel;
stageLevel = save.dungeonSave.stageLevel;
}
@ -90,11 +90,11 @@ public class TestScript : MonoBehaviour,ISaveable
{
dungeonSave = new DungeonSave()
{
attackLevel = this.attackLevel,
attackSpeedLevel = this.attackSpeedLevel,
heartLevel = this.heartLevel,
moveSpeedLevel = this.moveSpeedLevel,
evasionTimeLevel = this.evasionTimeLevel,
// attackPowerLevel = this.attackPowerLevel,
// attackSpeedLevel = this.attackSpeedLevel,
// heartLevel = this.heartLevel,
// moveSpeedLevel = this.moveSpeedLevel,
// dashCoolDownLevel = this.dashCoolDownLevel,
stageLevel = this.stageLevel,
},

View File

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

File diff suppressed because one or more lines are too long

View File

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

View File

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

BIN
Assets/KJM/KJM_Test/Upgrade/Prefabs/UpgradeCard.prefab (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 3a5d97c3b5d9da742bcc4b683678858d
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/KJM/KJM_Test/Upgrade/Prefabs/UpgradePanel.prefab (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 6f4016bf1abc62446964585074b66ff6
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

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

BIN
Assets/KJM/KJM_Test/Upgrade/Sprite/AttackPower.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,150 @@
fileFormatVersion: 2
guid: f66e0be8c4c11e34e8df13202bf1f5d5
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: 100
spriteBorder: {x: 0, y: 175, z: 0, w: 143}
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: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: AttackPower_0
rect:
serializedVersion: 2
x: 0
y: 184
width: 1024
height: 1204
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 370d47848ff092a498bf01d593d2aa55
internalID: 425245915
vertices: []
indices:
edges: []
weights: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 1537655665
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable:
AttackPower_0: 425245915
AttackPower_1: -1293571596
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/KJM/KJM_Test/Upgrade/Sprite/AttackSpeed.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,151 @@
fileFormatVersion: 2
guid: ec0c3cf0b94621c4aac7b4b5c0cae145
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: 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: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: AttackSpeed_2
rect:
serializedVersion: 2
x: 0
y: 0
width: 1024
height: 1024
alignment: 0
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: c8e8694b0c41ab6469640d70f91cf94a
internalID: 2057710573
vertices: []
indices:
edges: []
weights: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable:
AttackSpeed_0: 454528844
AttackSpeed_1: -1726966544
AttackSpeed_2: 2057710573
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/KJM/KJM_Test/Upgrade/Sprite/Card.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,127 @@
fileFormatVersion: 2
guid: 1c49741f6a806b14182548910bee3360
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: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 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: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/KJM/KJM_Test/Upgrade/Sprite/Cooldown.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,151 @@
fileFormatVersion: 2
guid: e04e0cfb7cfe07a4a837565be2a9e814
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: 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: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: Cooldown_0
rect:
serializedVersion: 2
x: 3
y: 282
width: 1021
height: 1024
alignment: 0
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 0e987966a87c0334cbd558b54dd2884e
internalID: -1865935854
vertices: []
indices:
edges: []
weights: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable:
Cooldown_0: -1865935854
Cooldown_1: -559825761
Cooldown_2: 1288966442
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/KJM/KJM_Test/Upgrade/Sprite/Heart.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,149 @@
fileFormatVersion: 2
guid: 50e1089e347a34e4391b8a7d309566aa
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: 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: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: Heart_0
rect:
serializedVersion: 2
x: 0
y: 0
width: 1024
height: 1024
alignment: 0
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 3c1a37065ce3efe47a4e8751a5091442
internalID: 1911888675
vertices: []
indices:
edges: []
weights: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable:
Heart_0: 1911888675
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/KJM/KJM_Test/Upgrade/Sprite/Max!.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,150 @@
fileFormatVersion: 2
guid: d32af0a170ee68a4baafe29418a7c7e7
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: 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: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: Max!_0
rect:
serializedVersion: 2
x: 4
y: 72
width: 1003
height: 901
alignment: 0
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 79aa739531277a148a344ca8f1df525f
internalID: -1446879825
vertices: []
indices:
edges: []
weights: []
outline: []
physicsShape: []
bones: []
spriteID: 4211bd0831b53be45a41c594c940d0ca
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable:
Max!_0: -1446879825
Max!_1: -1829641980
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/KJM/KJM_Test/Upgrade/Sprite/MoveSpeed.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,152 @@
fileFormatVersion: 2
guid: aedea94474332a34fb686424c18b3824
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: 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: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: MoveSpeed_1
rect:
serializedVersion: 2
x: 0
y: 0
width: 1024
height: 1024
alignment: 0
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 17bab324354aba44c83eae0e6f5961eb
internalID: 1616989860
vertices: []
indices:
edges: []
weights: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable:
MoveSpeed_0: -310863518
MoveSpeed_1: 1616989860
MoveSpeed_2: 2079495695
MoveSpeed_3: -1746910826
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,95 @@
using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class UpgradeCard : MonoBehaviour
{
public Sprite[] upgradeSpriteResource;
UpgradeManager upgradeManager;
StatType currentStatType;
Image[] upgradeIcon;
TextMeshProUGUI upgradeText;
void Awake()
{
upgradeManager = UpgradeManager.Instance;
upgradeIcon = gameObject.GetComponentsInChildren<Image>();
upgradeText = gameObject.GetComponentInChildren<TextMeshProUGUI>();
}
public void Init(StatType statType)
{
currentStatType = statType;
//텍스트 설정
upgradeText.text = StatNameText(currentStatType) + " Lv." + UpgradeLevelText(currentStatType);
//아이콘 설정
upgradeIcon[1].sprite = upgradeSpriteResource[(int)statType-1];
}
/// <summary>
/// 강화 요소 텍스트 반환
/// </summary>
/// <param name="statType"></param>
/// <returns></returns>
private String StatNameText(StatType statType)
{
switch (statType)
{
case StatType.AttackPower:
return "공격력";
case StatType.AttackSpeed:
return "공격 속도";
case StatType.MoveSpeed:
return "이동 속도";
case StatType.DashCoolDown:
return "대시 쿨타임";
case StatType.Heart:
return "최대 하트";
case StatType.Max:
return "용사";
default:
return "";
}
}
/// <summary>
/// 레벨 텍스트 반환
/// </summary>
/// <param name="statType"></param>
/// <returns></returns>
private String UpgradeLevelText(StatType statType)
{
if (statType == StatType.Max)
return "999";
if (upgradeManager.upgradeStat.IsOneBeforeMax(statType))
{
return "Max";
}
else
{
return (upgradeManager.upgradeStat.CurrentUpgradeLevel(statType)+1).ToString();
}
}
/// <summary>
/// 강화 카드 클릭
/// </summary>
public void ClickCard()
{
//레벨 증가
upgradeManager.upgradeStat.UpgradeLevel(currentStatType);
//UI 비활성화
upgradeManager.DestroyUpgradeCard();
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 67a6bd571702cb544b28aeb153cda686
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,238 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public enum StatType
{
AttackPower = 1,
AttackSpeed,
MoveSpeed,
DashCoolDown,
Heart,
Max
}
public class UpgradeManager : Singleton<UpgradeManager>
{
//캔버스 프리팹 사용..?
Canvas canvas;
public GameObject backgroundPanel;
public Button upgradeButton;
public UpgradeStat upgradeStat;
private readonly List<int> statNumbers = new List<int> { 1, 2, 3, 4, 5 };
private List<int> stats = new List<int>();
private RectTransform backgroundRectTransform;
private List<Button> cards = new List<Button>();
public void Start()
{
if(canvas == null)
canvas = FindObjectOfType<Canvas>();
}
public void StartUpgrade()
{
DrawStatNumber();
//배경 패널 생성
if(backgroundRectTransform == null)
backgroundRectTransform = Instantiate(backgroundPanel,canvas.transform).GetComponent<RectTransform>();
//배경 패널 애니메이션 적용
backgroundRectTransform.gameObject.SetActive(true);
StartCoroutine(CoFade(backgroundRectTransform.gameObject, 0f,0.7f,0.2f));
EnsureCardListSize(3);
//카드 생성
if (stats.Count == 0)
{
//모든 강화가 MAX일때
if(cards[0] == null)
cards[0] = Instantiate(upgradeButton, backgroundRectTransform);
cards[0].gameObject.SetActive(true);
cards[0].GetComponent<UpgradeCard>().Init(StatType.Max);
StartCoroutine(CoFade(cards[0].gameObject, 0f,1f,0.4f, () =>
{
cards[0].GetComponent<CanvasGroup>().interactable = true;
}));
}
else
{
for (int i = 0; i < Mathf.Min(stats.Count, 3); i++)
{
if(cards[i] == null)
cards[i] = Instantiate(upgradeButton, backgroundRectTransform);
cards[i].gameObject.SetActive(true);
cards[i].GetComponent<UpgradeCard>().Init((StatType)stats[i]);
var index = i;
StartCoroutine(CoFade(cards[i].gameObject, 0f,1f,0.4f, () =>
{
cards[index].GetComponent<CanvasGroup>().interactable = true;
}));
}
}
}
/// <summary>
/// 중복되지 않는 랜덤한 스탯 번호 뽑기
/// </summary>
private void DrawStatNumber()
{
stats.Clear();
//번호 셔플
for (int i = 0; i < statNumbers.Count; i++)
{
int randIndex = Random.Range(i, statNumbers.Count);
(statNumbers[i], statNumbers[randIndex]) = (statNumbers[randIndex], statNumbers[i]);
}
//이미 강화 수치가 MAX이면 제외
foreach (var t in statNumbers)
{
if (upgradeStat.IsMax((StatType)t))
{
continue;
}
else
{
stats.Add(t);
}
}
}
/// <summary>
/// 리스트 사이즈 보장
/// </summary>
/// <param name="index"></param>
private void EnsureCardListSize(int index)
{
while (cards.Count <= index)
{
cards.Add(null);
}
}
/// <summary>
/// 업그레이드 창 비활성화
/// </summary>
public void DestroyUpgradeCard()
{
// 카드 비활성화
if (stats.Count == 0)
{
StartCoroutine(CoFade(cards[0].gameObject, 1f,0f,0.4f,() =>
{
cards[0].gameObject.SetActive(false);
backgroundRectTransform.gameObject.SetActive(false);
}));
}
else
{
for (int i = 0; i < Mathf.Min(stats.Count, 3); i++)
{
var index = i;
StartCoroutine(CoFade(cards[i].gameObject, 1f,0f,0.4f,() =>
{
cards[index].gameObject.SetActive(false);
if (index == Mathf.Min(stats.Count, 3) - 1)
{
backgroundRectTransform.gameObject.SetActive(false);
}
}));
}
}
//배경 패널 비활성화
StartCoroutine(CoFade(backgroundRectTransform.gameObject, 0.7f,0f,0.2f));
}
/// <summary>
/// 페이드 애니메이션 코루틴
/// </summary>
/// <param name="target"></param>
/// <param name="fromAlpha"></param>
/// <param name="toAlpha"></param>
/// <param name="duration"></param>
/// <param name="onComplete"></param>
/// <returns></returns>
public IEnumerator CoFade(GameObject target, float fromAlpha, float toAlpha, float duration,System.Action onComplete = null)
{
float elapsedTime = 0f;
CanvasGroup canvasGroup = target.GetComponent<CanvasGroup>();
Image image = target.GetComponent<Image>();
if (canvasGroup == null && image == null)
{
Debug.LogError("CanvasGroup도 Image도 없습니다!");
yield break;
}
// 초기 설정
if (canvasGroup != null)
{
canvasGroup.alpha = fromAlpha;
canvasGroup.interactable = false;
}
else if (image != null)
{
Color color = image.color;
color.a = fromAlpha;
image.color = color;
}
while (elapsedTime < duration)
{
//float alpha = Mathf.Lerp(fromAlpha, toAlpha, elapsedTime / duration);
float t = Mathf.Clamp01(elapsedTime / duration);
float alpha = Mathf.Lerp(fromAlpha, toAlpha, t);
if (canvasGroup != null)
{
canvasGroup.alpha = alpha;
}
else if (image != null)
{
Color color = image.color;
color.a = alpha;
image.color = color;
}
elapsedTime += Time.deltaTime;
yield return null;
}
// 최종 보정 (정확한 값으로 마무리)
if (canvasGroup != null)
{
canvasGroup.alpha = toAlpha;
}
else if (image != null)
{
Color color = image.color;
color.a = toAlpha;
image.color = color;
}
onComplete?.Invoke();
}
protected override void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e15215ad763c32d4894a83e9260fdab5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,119 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UpgradeStat : MonoBehaviour, ISaveable
{
private const int DEFAULT_MAX = 4;
private const int MAX_HEART = 3;
private readonly Dictionary<StatType, int> levels = new();
private readonly Dictionary<StatType, int> maxLevels = new()
{
{ StatType.AttackPower, DEFAULT_MAX },
{ StatType.AttackSpeed, DEFAULT_MAX },
{ StatType.MoveSpeed, DEFAULT_MAX },
{ StatType.DashCoolDown, DEFAULT_MAX },
{ StatType.Heart, MAX_HEART }
};
void Awake()
{
ResetLevel();
}
/// <summary>
/// 레벨 리셋 함수
/// 테스트를 위해 퍼블릭으로 설정
/// </summary>
public void ResetLevel()
{
foreach (var stat in maxLevels.Keys)
{
levels[stat] = 1; // 기본값 초기화
}
}
/// <summary>
/// 강화 레벨 상승
/// </summary>
/// <param name="statType"></param>
public void UpgradeLevel(StatType statType)
{
if (!levels.ContainsKey(statType)) return;
if (levels[statType] < maxLevels[statType])
levels[statType]++;
}
/// <summary>
/// 현재 강화 레벨 반환
/// </summary>
/// <param name="statType"></param>
/// <returns></returns>
public int CurrentUpgradeLevel(StatType statType)
{
if (!levels.ContainsKey(statType))
return 0;
int level = levels[statType];
return Mathf.Clamp(level, 1, maxLevels[statType]);
}
/// <summary>
/// 최대 수치 검증
/// </summary>
/// <param name="statType"></param>
/// <returns></returns>
public bool IsMax(StatType statType)
{
return levels.ContainsKey(statType) && levels[statType] >= maxLevels[statType];
}
/// <summary>
/// 최대 수치 -1 검증
/// </summary>
/// <param name="statType"></param>
/// <returns></returns>
public bool IsOneBeforeMax(StatType statType)
{
return levels.ContainsKey(statType) && levels[statType] == maxLevels[statType] - 1;
}
/// <summary>
/// 세이브 매니저에 저장
/// </summary>
/// <returns></returns>
public Save ExtractSaveData()
{
Debug.Log("UpgradeStat extracting save data");
return new Save
{
dungeonSave = new DungeonSave
{
attackPowerLevel = levels[StatType.AttackPower],
attackSpeedLevel = levels[StatType.AttackSpeed],
moveSpeedLevel = levels[StatType.MoveSpeed],
dashCoolDownLevel = levels[StatType.DashCoolDown],
heartLevel = levels[StatType.Heart]
}
};
}
/// <summary>
/// 세이브 매니저에서 로드
/// </summary>
/// <param name="save"></param>
public void ApplySaveData(Save save)
{
if (save?.dungeonSave == null) return;
levels[StatType.AttackPower] = save.dungeonSave.attackPowerLevel;
levels[StatType.AttackSpeed] = save.dungeonSave.attackSpeedLevel;
levels[StatType.MoveSpeed] = save.dungeonSave.moveSpeedLevel;
levels[StatType.DashCoolDown] = save.dungeonSave.dashCoolDownLevel;
levels[StatType.Heart] = save.dungeonSave.heartLevel;
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4814816a9b65ad3448bd8bad61e38347
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: