This commit is contained in:
2026-07-01 10:08:22 +09:00
7 changed files with 430 additions and 2 deletions

View File

@@ -1,5 +1,9 @@
fileFormatVersion: 2
<<<<<<< HEAD
guid: e4b6bdaab0b640143bac52cb0be33e54
=======
guid: 0e533587a03b84940b08e956a8615adf
>>>>>>> dace9380396749ea751e95697f4b74adaecb007d
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
@@ -93,6 +97,8 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
<<<<<<< HEAD
=======
- serializedVersion: 4
buildTarget: WebGL
maxTextureSize: 2048
@@ -106,6 +112,7 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
>>>>>>> dace9380396749ea751e95697f4b74adaecb007d
spriteSheet:
serializedVersion: 2
sprites: []

View File

@@ -1,5 +1,9 @@
fileFormatVersion: 2
<<<<<<< HEAD
guid: 9e4b854b73fa4c049bae4e53eb60d8d2
=======
guid: e947b9df5e461fd48a18b65eae417346
>>>>>>> dace9380396749ea751e95697f4b74adaecb007d
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
@@ -93,6 +97,8 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
<<<<<<< HEAD
=======
- serializedVersion: 4
buildTarget: WebGL
maxTextureSize: 2048
@@ -106,6 +112,7 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
>>>>>>> dace9380396749ea751e95697f4b74adaecb007d
spriteSheet:
serializedVersion: 2
sprites: []

View File

@@ -1,5 +1,9 @@
fileFormatVersion: 2
<<<<<<< HEAD
guid: 5d6edb11f11aef3408dc8c42214fcfa2
=======
guid: 4e0c1ffb4b7796341b9614ba8650b534
>>>>>>> dace9380396749ea751e95697f4b74adaecb007d
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
@@ -93,6 +97,8 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
<<<<<<< HEAD
=======
- serializedVersion: 4
buildTarget: WebGL
maxTextureSize: 2048
@@ -106,6 +112,7 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
>>>>>>> dace9380396749ea751e95697f4b74adaecb007d
spriteSheet:
serializedVersion: 2
sprites: []

View File

@@ -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에 빨간 오류가 발생하지 않는다.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: d02f5889fbfe766478ade17cb5f593c1
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,5 +1,9 @@
fileFormatVersion: 2
<<<<<<< HEAD
guid: 0ebc173c38e576e46af1152cd6521c4c
=======
guid: 0d7aaa1930bdf854dbc499330b88fc84
>>>>>>> dace9380396749ea751e95697f4b74adaecb007d
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0