diff --git a/Assets/01_Scenes/WhaleAdventure_VR/Rooms/FishhookRoom.unity b/Assets/01_Scenes/WhaleAdventure_VR/Rooms/FishhookRoom.unity index da65c52..e7b1cb7 100644 --- a/Assets/01_Scenes/WhaleAdventure_VR/Rooms/FishhookRoom.unity +++ b/Assets/01_Scenes/WhaleAdventure_VR/Rooms/FishhookRoom.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:07fa4b00951fd8682d1c2e3240a20e81e57a8622a991fc693f20d1f2d74b80cd -size 614902 +oid sha256:df20ce6cd4f3fdb5ee54c263df6d37e656d538dbeb6d68c581e4a1c06e4ed4bd +size 614930 diff --git a/Assets/09_UI/talk/menu_panel_REAL_transparent_cropped.png.meta b/Assets/09_UI/talk/menu_panel_REAL_transparent_cropped.png.meta new file mode 100644 index 0000000..18e2a1f --- /dev/null +++ b/Assets/09_UI/talk/menu_panel_REAL_transparent_cropped.png.meta @@ -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: diff --git a/Assets/09_UI/talk/pinocchio_title_banner_REAL_transparent_cropped.png.meta b/Assets/09_UI/talk/pinocchio_title_banner_REAL_transparent_cropped.png.meta new file mode 100644 index 0000000..e54875b --- /dev/null +++ b/Assets/09_UI/talk/pinocchio_title_banner_REAL_transparent_cropped.png.meta @@ -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: diff --git a/Assets/09_UI/talk/wood_button_plain_REAL_transparent.png.meta b/Assets/09_UI/talk/wood_button_plain_REAL_transparent.png.meta new file mode 100644 index 0000000..eb0e213 --- /dev/null +++ b/Assets/09_UI/talk/wood_button_plain_REAL_transparent.png.meta @@ -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: diff --git a/Assets/My project/Fishing Scripts/UI/FishingGame_Test_Checklist.txt b/Assets/My project/Fishing Scripts/UI/FishingGame_Test_Checklist.txt new file mode 100644 index 0000000..959ebd8 --- /dev/null +++ b/Assets/My project/Fishing Scripts/UI/FishingGame_Test_Checklist.txt @@ -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에 빨간 오류가 발생하지 않는다. diff --git a/Assets/My project/Fishing Scripts/UI/FishingGame_Test_Checklist.txt.meta b/Assets/My project/Fishing Scripts/UI/FishingGame_Test_Checklist.txt.meta new file mode 100644 index 0000000..abb3c93 --- /dev/null +++ b/Assets/My project/Fishing Scripts/UI/FishingGame_Test_Checklist.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d02f5889fbfe766478ade17cb5f593c1 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/XR/Settings/OpenXR Package Settings.asset.meta b/Assets/XR/Settings/OpenXR Package Settings.asset.meta new file mode 100644 index 0000000..da38110 --- /dev/null +++ b/Assets/XR/Settings/OpenXR Package Settings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0ebc173c38e576e46af1152cd6521c4c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: