2026.06.30
This commit is contained in:
Binary file not shown.
117
Assets/09_UI/talk/menu_panel_REAL_transparent_cropped.png.meta
Normal file
117
Assets/09_UI/talk/menu_panel_REAL_transparent_cropped.png.meta
Normal file
@@ -0,0 +1,117 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e4b6bdaab0b640143bac52cb0be33e54
|
||||
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:
|
||||
@@ -0,0 +1,117 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9e4b854b73fa4c049bae4e53eb60d8d2
|
||||
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:
|
||||
117
Assets/09_UI/talk/wood_button_plain_REAL_transparent.png.meta
Normal file
117
Assets/09_UI/talk/wood_button_plain_REAL_transparent.png.meta
Normal file
@@ -0,0 +1,117 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5d6edb11f11aef3408dc8c42214fcfa2
|
||||
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:
|
||||
@@ -0,0 +1,396 @@
|
||||
낚시 게임 테스트 체크리스트
|
||||
|
||||
목적
|
||||
- VR 낚시 게임이 정상적으로 진행되는지 확인한다.
|
||||
- 낚싯대 잡기, 찌 던지기, 물 감지, 입질, 릴 감기, 아이템 획득, 연못 정화, 기억의 조각 획득까지 전체 흐름을 테스트한다.
|
||||
|
||||
|
||||
1. 테스트 전 준비
|
||||
|
||||
1-1. Unity 콘솔 확인
|
||||
- Play 전에 Console 창을 확인한다.
|
||||
- 빨간색 컴파일 에러가 없어야 한다.
|
||||
- FishingGameManager, FishingGaugeUI, FishingRodVRController 같은 클래스가 중복으로 존재하지 않아야 한다.
|
||||
- 기존 버전의 같은 이름 스크립트가 남아 있으면 제거하거나 백업 폴더로 옮긴다.
|
||||
|
||||
1-2. 낚싯대 오브젝트 확인
|
||||
- 낚싯대에 FishingRodVRController가 붙어 있는지 확인한다.
|
||||
- XR Grab Interactable이 붙어 있는지 확인한다.
|
||||
- Select Entered 이벤트에 MarkHeld가 연결되어 있는지 확인한다.
|
||||
- Select Exited 이벤트에 MarkReleased가 연결되어 있는지 확인한다.
|
||||
|
||||
1-3. 낚싯줄 기준점 확인
|
||||
- RodLineEndPoint가 낚싯대 끝부분에 위치하는지 확인한다.
|
||||
- BobberLineStartPoint가 찌 또는 바늘 위치에 있는지 확인한다.
|
||||
- 찌 모델이 BobberLineStartPoint의 자식이거나, bobberVisualRoot에 연결되어 있는지 확인한다.
|
||||
|
||||
1-4. 물 오브젝트 확인
|
||||
- Water 오브젝트에 Collider가 있는지 확인한다.
|
||||
- Water 오브젝트의 Layer가 Water로 설정되어 있는지 확인한다.
|
||||
- Water 오브젝트의 Tag가 Water로 설정되어 있는지 확인한다.
|
||||
- Water Collider의 윗면이 실제 수면 높이와 비슷한지 확인한다.
|
||||
|
||||
1-5. UI 확인
|
||||
- FishingGaugeUI가 연결되어 있는지 확인한다.
|
||||
- FishingCanvas 또는 UI Root가 연결되어 있는지 확인한다.
|
||||
- UI가 너무 가깝거나 멀면 FishingGaugeUI의 VR Follow 값을 조절한다.
|
||||
- followDistance, followHeightOffset, followSideOffset 값을 확인한다.
|
||||
|
||||
1-6. 보상 시스템 확인
|
||||
- FishingRewardSystem이 FishingGameManager에 연결되어 있는지 확인한다.
|
||||
- Dirty Pond Loot Table에 Fish와 Trash가 있는지 확인한다.
|
||||
- Clean Pond Loot Table에 MemoryPiece가 있는지 확인한다.
|
||||
- 테스트용이면 Fish 0, Trash 100으로 설정해도 된다.
|
||||
|
||||
1-7. 기억의 조각 조건 확인
|
||||
- FishingGameManager의 requiredCleanupItems 값을 확인한다.
|
||||
- 테스트용이면 requiredCleanupItems를 1로 설정한다.
|
||||
- guaranteeMemoryPieceAfterCleaned가 켜져 있는지 확인한다.
|
||||
|
||||
|
||||
2. 기본 플레이 흐름 테스트
|
||||
|
||||
2-1. 낚싯대 잡기 테스트
|
||||
테스트 방법
|
||||
- VR 컨트롤러로 낚싯대를 잡는다.
|
||||
|
||||
예상 결과
|
||||
- 낚싯대가 손에 잡혀야 한다.
|
||||
- Console에 오류가 없어야 한다.
|
||||
- showHeldDebugLog가 켜져 있다면 “낚싯대 잡음” 로그가 나와야 한다.
|
||||
|
||||
실패 시 확인
|
||||
- XR Grab Interactable 설정
|
||||
- MarkHeld 이벤트 연결
|
||||
- requireRodHeldToCast 값
|
||||
|
||||
|
||||
2-2. 찌 던지기 테스트
|
||||
테스트 방법
|
||||
- 낚싯대를 잡은 상태에서 Cast 입력을 누른다.
|
||||
|
||||
예상 결과
|
||||
- 찌가 낚싯대 앞쪽으로 날아가야 한다.
|
||||
- 찌가 물 근처 또는 물 위에 멈춰야 한다.
|
||||
- 찌가 허공에 고정되면 안 된다.
|
||||
|
||||
실패 시 확인
|
||||
- castAction 연결
|
||||
- castDirectionSource 방향
|
||||
- useWaterRaycastTarget 값
|
||||
- waterRaycastMask에 Water 레이어 포함 여부
|
||||
- Water Collider 높이
|
||||
- useFixedWaterHeightFallback 값
|
||||
- fixedWaterHeight 값
|
||||
|
||||
|
||||
2-3. 물 감지 테스트
|
||||
테스트 방법
|
||||
- 찌가 물에 닿은 뒤 기다린다.
|
||||
|
||||
예상 결과
|
||||
- Water 감지가 정상이라면 입질 대기로 넘어가야 한다.
|
||||
- biteStartMode가 WhenBobberInWater일 경우, 물 감지가 반드시 되어야 한다.
|
||||
- biteStartMode가 AfterCastAlways일 경우, 물 감지와 관계없이 입질 대기가 시작된다.
|
||||
|
||||
실패 시 확인
|
||||
- useWaterOverlapCheck
|
||||
- waterLayerMask
|
||||
- useWaterTag
|
||||
- waterTag
|
||||
- Water 오브젝트의 Layer와 Tag
|
||||
- waterCheckRadius
|
||||
|
||||
|
||||
2-4. 입질 테스트
|
||||
테스트 방법
|
||||
- 찌를 던진 뒤 biteDelayRange 시간 동안 기다린다.
|
||||
|
||||
예상 결과
|
||||
- 일정 시간이 지나면 찌가 흔들리거나 입질 상태가 되어야 한다.
|
||||
- startMiniGameOnBite가 켜져 있으면 자동으로 낚시 미니게임이 시작되어야 한다.
|
||||
- UI에 릴 감기 관련 문구가 나와야 한다.
|
||||
|
||||
실패 시 확인
|
||||
- useBiteTimer
|
||||
- biteDelayRange
|
||||
- startMiniGameOnBite
|
||||
- FishingGameManager 연결
|
||||
- Start Mode가 OnBite인지 확인
|
||||
|
||||
|
||||
2-5. 릴 감기 테스트
|
||||
테스트 방법
|
||||
- 입질 후 릴 손잡이를 잡거나 릴 입력을 누른 상태에서 릴을 돌린다.
|
||||
|
||||
예상 결과
|
||||
- 릴을 돌리면 줄 길이가 짧아져야 한다.
|
||||
- 찌가 낚싯대 쪽으로 조금씩 끌려와야 한다.
|
||||
- UI의 진행도가 올라가야 한다.
|
||||
- 너무 많이 감아야 하면 lineLengthPerReelTurn 값을 올린다.
|
||||
|
||||
실패 시 확인
|
||||
- useReelControl
|
||||
- reelCenterPoint
|
||||
- reelRotationSource
|
||||
- reelHoldAction
|
||||
- useReelHoldAction
|
||||
- useReelGrabEvents
|
||||
- reelActivationRadius
|
||||
- requireRodHeldToReel
|
||||
- reelOnlyAfterBiteOrMiniGame
|
||||
- allowReelOut
|
||||
|
||||
|
||||
2-6. 낚시 성공 테스트
|
||||
테스트 방법
|
||||
- 릴을 계속 감아 줄 길이를 줄인다.
|
||||
|
||||
예상 결과
|
||||
- 줄 길이가 catchCompleteLineLength 이하가 되면 낚시 성공 처리가 되어야 한다.
|
||||
- “낚았다!” 같은 결과 문구가 표시되어야 한다.
|
||||
- 보상 아이템이 표시되어야 한다.
|
||||
- 찌가 낚싯대 쪽으로 복귀해야 한다.
|
||||
|
||||
실패 시 확인
|
||||
- catchCompleteLineLength
|
||||
- lineLengthPerReelTurn
|
||||
- returnBobberAfterCatch
|
||||
- FishingRewardSystem 연결
|
||||
- FishingGaugeUI 연결
|
||||
|
||||
|
||||
3. 아이템 획득 테스트
|
||||
|
||||
3-1. 물고기 획득 테스트
|
||||
테스트 방법
|
||||
- Dirty Pond Loot Table에서 Fish 확률을 높이거나 Fish 100, Trash 0으로 설정한다.
|
||||
- 낚시를 성공시킨다.
|
||||
|
||||
예상 결과
|
||||
- 물고기 획득 문구가 표시되어야 한다.
|
||||
- 물고기 아이콘 또는 슬롯 수량이 증가해야 한다.
|
||||
- FishingInventory가 연결되어 있다면 Fish Count가 증가해야 한다.
|
||||
|
||||
실패 시 확인
|
||||
- FishingRewardSystem의 Dirty Pond Loot Table
|
||||
- FishingGaugeUI의 itemIcons 설정
|
||||
- FishingInventoryBinder 연결
|
||||
- FishingInventory 연결
|
||||
|
||||
|
||||
3-2. 쓰레기 획득 테스트
|
||||
테스트 방법
|
||||
- Dirty Pond Loot Table에서 Trash 확률을 높이거나 Fish 0, Trash 100으로 설정한다.
|
||||
- 낚시를 성공시킨다.
|
||||
|
||||
예상 결과
|
||||
- 쓰레기 획득 문구가 표시되어야 한다.
|
||||
- 연못 정화 진행도가 증가해야 한다.
|
||||
- Cleanup Count가 증가해야 한다.
|
||||
- requiredCleanupItems에 도달하면 연못이 맑아져야 한다.
|
||||
|
||||
실패 시 확인
|
||||
- Trash 아이템 타입
|
||||
- requiredCleanupItems
|
||||
- cleanupProgressText
|
||||
- cleanupGaugeFill
|
||||
- FishingInventoryBinder
|
||||
|
||||
|
||||
3-3. 기억의 조각 획득 테스트
|
||||
테스트 방법
|
||||
- requiredCleanupItems를 1로 설정한다.
|
||||
- Dirty Pond Loot Table을 Fish 0, Trash 100으로 설정한다.
|
||||
- 첫 번째 낚시에서 쓰레기를 낚는다.
|
||||
- 두 번째 낚시를 성공시킨다.
|
||||
|
||||
예상 결과
|
||||
- 첫 번째 성공에서는 쓰레기가 나와야 한다.
|
||||
- 연못이 맑아져야 한다.
|
||||
- 두 번째 성공에서는 기억의 조각이 나와야 한다.
|
||||
- 최종 결과 UI가 표시되어야 한다.
|
||||
- GameClear가 연결되어 있다면 클리어 처리가 실행되어야 한다.
|
||||
|
||||
실패 시 확인
|
||||
- guaranteeMemoryPieceAfterCleaned
|
||||
- Clean Pond Loot Table
|
||||
- MemoryPiece 아이템 타입
|
||||
- GameClear 연결
|
||||
- memoryPieceResultPrefab 또는 memoryPieceResultSceneObject
|
||||
|
||||
|
||||
4. UI 테스트
|
||||
|
||||
4-1. UI 위치 테스트
|
||||
테스트 방법
|
||||
- VR 헤드를 움직이며 UI 위치를 확인한다.
|
||||
|
||||
예상 결과
|
||||
- UI가 플레이어 앞에 자연스럽게 따라와야 한다.
|
||||
- UI가 너무 높거나 낮지 않아야 한다.
|
||||
- UI가 뒤집혀 보이면 faceSameDirectionAsHead 값을 확인한다.
|
||||
|
||||
조절 값
|
||||
- followDistance
|
||||
- followHeightOffset
|
||||
- followSideOffset
|
||||
- followYawOnly
|
||||
- faceSameDirectionAsHead
|
||||
|
||||
|
||||
4-2. 릴 진행도 UI 테스트
|
||||
테스트 방법
|
||||
- 낚시 중 릴을 감는다.
|
||||
|
||||
예상 결과
|
||||
- 진행도 게이지가 증가해야 한다.
|
||||
- 줄 길이 또는 진행도 텍스트가 갱신되어야 한다.
|
||||
- 릴을 감고 있지 않을 때와 감고 있을 때 문구가 달라져야 한다.
|
||||
|
||||
실패 시 확인
|
||||
- reelProgressGaugeRoot
|
||||
- reelProgressGaugeFill
|
||||
- lineLengthText
|
||||
- UpdateSimpleReelUI 호출 여부
|
||||
|
||||
|
||||
4-3. 획득 문구 랜덤 테스트
|
||||
테스트 방법
|
||||
- 물고기나 쓰레기를 여러 번 낚는다.
|
||||
|
||||
예상 결과
|
||||
- 같은 아이템을 낚아도 매번 완전히 같은 문구만 나오지 않아야 한다.
|
||||
- 물고기, 쓰레기, 기억의 조각마다 다른 문구가 나와야 한다.
|
||||
|
||||
실패 시 확인
|
||||
- FishingGaugeUI의 Caught Item Random Texts
|
||||
- fishCaughtMessages
|
||||
- trashCaughtMessages
|
||||
- memoryPieceCaughtMessages
|
||||
- fishHintMessages
|
||||
- trashHintMessages
|
||||
- memoryPieceHintMessages
|
||||
|
||||
|
||||
5. 밸런스 테스트
|
||||
|
||||
5-1. 릴 감는 양 테스트
|
||||
테스트 방법
|
||||
- 찌를 던진 뒤 몇 바퀴 정도 감아야 성공하는지 확인한다.
|
||||
|
||||
권장 결과
|
||||
- 테스트용: 1~2바퀴
|
||||
- 일반 플레이용: 2~4바퀴
|
||||
|
||||
조절 값
|
||||
- lineLengthPerReelTurn을 올리면 덜 감아도 된다.
|
||||
- catchCompleteLineLength를 올리면 덜 가까이 끌어와도 성공한다.
|
||||
- castDistance를 줄이면 처음부터 감을 거리가 줄어든다.
|
||||
|
||||
추천 값
|
||||
- lineLengthPerReelTurn: 1.2 ~ 1.8
|
||||
- catchCompleteLineLength: 1.0 ~ 1.5
|
||||
- castDistance: 2.5 ~ 3.0
|
||||
- allowReelOut: false
|
||||
|
||||
|
||||
5-2. 기억의 조각 획득 난이도 테스트
|
||||
테스트 방법
|
||||
- 몇 번 낚시해야 기억의 조각을 얻는지 확인한다.
|
||||
|
||||
권장 결과
|
||||
- 테스트용: 2번 낚시 안에 획득
|
||||
- 일반 플레이용: 4~6번 낚시 안에 획득
|
||||
|
||||
조절 값
|
||||
- requiredCleanupItems
|
||||
- Dirty Pond Loot Table의 Trash 확률
|
||||
- guaranteeMemoryPieceAfterCleaned
|
||||
|
||||
|
||||
6. 최종 통합 테스트 순서
|
||||
|
||||
아래 순서대로 한 번에 진행한다.
|
||||
|
||||
1. Play 버튼을 누른다.
|
||||
2. 낚싯대를 잡는다.
|
||||
3. 낚싯대를 물가 방향으로 던진다.
|
||||
4. 찌가 물 위에 멈추는지 확인한다.
|
||||
5. 입질이 올 때까지 기다린다.
|
||||
6. 입질 후 릴을 감는다.
|
||||
7. 줄이 짧아지고 찌가 끌려오는지 확인한다.
|
||||
8. 낚시 성공 문구가 나오는지 확인한다.
|
||||
9. 물고기 또는 쓰레기 획득 UI가 나오는지 확인한다.
|
||||
10. 쓰레기를 낚았을 때 정화 진행도가 오르는지 확인한다.
|
||||
11. 필요한 쓰레기 수를 채운 뒤 연못이 맑아지는지 확인한다.
|
||||
12. 다음 낚시에서 기억의 조각이 나오는지 확인한다.
|
||||
13. 최종 결과 UI가 표시되는지 확인한다.
|
||||
14. GameClear 또는 클리어 연출이 실행되는지 확인한다.
|
||||
15. Console에 오류가 없는지 확인한다.
|
||||
|
||||
|
||||
7. 자주 발생하는 문제와 원인
|
||||
|
||||
문제: 찌가 허공에 고정됨
|
||||
원인:
|
||||
- Water Raycast가 실패했다.
|
||||
- waterRaycastMask가 비어 있다.
|
||||
- Water Collider가 너무 높다.
|
||||
- fixedWaterHeight가 잘못됐다.
|
||||
|
||||
문제: 찌가 물에 닿아도 입질이 안 옴
|
||||
원인:
|
||||
- Water Layer 또는 Tag가 잘못됐다.
|
||||
- biteStartMode가 WhenBobberInWater인데 물 감지가 실패했다.
|
||||
- waterCheckRadius가 너무 작다.
|
||||
|
||||
문제: 릴을 돌려도 줄이 안 짧아짐
|
||||
원인:
|
||||
- reelRotationSource가 연결되지 않았다.
|
||||
- reelHoldAction이 연결되지 않았다.
|
||||
- 릴 손이 reelActivationRadius 밖에 있다.
|
||||
- 낚싯대 MarkHeld 이벤트가 연결되지 않았다.
|
||||
- 아직 Bite 또는 MiniGameActive 상태가 아니다.
|
||||
|
||||
문제: 너무 많이 감아야 함
|
||||
원인:
|
||||
- lineLengthPerReelTurn 값이 낮다.
|
||||
- catchCompleteLineLength 값이 너무 낮다.
|
||||
- castDistance가 너무 길다.
|
||||
|
||||
문제: 물고기만 너무 많이 나옴
|
||||
원인:
|
||||
- Dirty Pond Loot Table에서 Fish Weight가 높다.
|
||||
- Trash Weight가 낮거나 0이다.
|
||||
- 수정한 FishingRewardSystem이 GameManager에 연결되지 않았다.
|
||||
|
||||
문제: 기억의 조각이 안 나옴
|
||||
원인:
|
||||
- requiredCleanupItems를 채우지 못했다.
|
||||
- guaranteeMemoryPieceAfterCleaned가 꺼져 있다.
|
||||
- Clean Pond Loot Table에 MemoryPiece가 없다.
|
||||
- StartFishing 때 연못 상태가 계속 초기화되고 있다.
|
||||
|
||||
문제: UI가 이상한 위치에 있음
|
||||
원인:
|
||||
- FishingGaugeUI의 VR Follow 값이 맞지 않는다.
|
||||
- followRoot가 잘못 연결되어 있다.
|
||||
- playerHead가 잘못 연결되어 있다.
|
||||
|
||||
|
||||
8. 테스트 완료 기준
|
||||
|
||||
아래 항목을 모두 만족하면 기본 테스트 통과로 본다.
|
||||
|
||||
- 낚싯대를 정상적으로 잡을 수 있다.
|
||||
- 찌를 물가로 던질 수 있다.
|
||||
- 찌가 물 위에 자연스럽게 멈춘다.
|
||||
- 입질이 발생한다.
|
||||
- 릴을 감으면 줄이 짧아진다.
|
||||
- 일정 거리까지 감으면 낚시 성공이 된다.
|
||||
- 물고기와 쓰레기 획득 UI가 표시된다.
|
||||
- 쓰레기를 낚으면 정화 진행도가 오른다.
|
||||
- 연못이 맑아진 뒤 기억의 조각을 낚을 수 있다.
|
||||
- 기억의 조각 획득 후 최종 결과가 표시된다.
|
||||
- 테스트 중 Console에 빨간 오류가 발생하지 않는다.
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d02f5889fbfe766478ade17cb5f593c1
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/XR/Settings/OpenXR Package Settings.asset.meta
Normal file
8
Assets/XR/Settings/OpenXR Package Settings.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0ebc173c38e576e46af1152cd6521c4c
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user