Compare commits

..

17 Commits

Author SHA1 Message Date
0a2df503c8 Add README.md 2026-07-21 02:34:34 +00:00
326d13ac28 다이렉트12오류 수정 2026-07-06 18:30:54 +09:00
d1688b3c0e Merge branch 'main' of https://www.nakjungit.site/sharedacc520k/WhaleAdventure_VR_Diet 2026-07-01 10:08:22 +09:00
8e8f8daf29 Merge branch 'main' of https://www.nakjungit.site/sharedacc520k/WhaleAdventure_VR_Diet
# Conflicts:yyhh
#	Assets/09_UI/talk/menu_panel_REAL_transparent_cropped.png.meta
#	Assets/09_UI/talk/pinocchio_title_banner_REAL_transparent_cropped.png.meta
#	Assets/09_UI/talk/wood_button_plain_REAL_transparent.png.meta
#	Assets/XR/Settings/OpenXR Package Settings.asset.meta
2026-06-30 10:48:53 +09:00
161c6f625f 2026.06.30 2026-06-30 10:47:50 +09:00
18da298734 Merge branch 'main' of https://www.nakjungit.site/sharedacc520k/WhaleAdventure_VR_Diet 2026-06-30 10:46:22 +09:00
72b1a2e817 aaa 2026-06-30 10:46:19 +09:00
dldydtn9755-crypto
dace938039 ㅇㅇ 2026-06-30 10:43:52 +09:00
9d7a092c97 Merge branch 'main' of https://www.nakjungit.site/sharedacc520k/WhaleAdventure_VR_Diet
# Conflicts:
#	Assets/09_UI/talk/menu_panel_REAL_transparent_cropped.png.meta
#	Assets/09_UI/talk/pinocchio_title_banner_REAL_transparent_cropped.png.meta
#	Assets/09_UI/talk/wood_button_plain_REAL_transparent.png.meta
#	Assets/XR/Settings/OpenXR Package Settings.asset
#	Assets/XR/Settings/OpenXR Package Settings.asset.meta
#	ProjectSettings/EditorBuildSettings.asset
2026-06-30 10:15:07 +09:00
02e5d737d0 asa 2026-06-30 10:14:38 +09:00
dldydtn9755-crypto
1ae4c2b0a2 수정 2026-06-30 10:13:46 +09:00
7f6e04485c Merge branch 'main' of https://www.nakjungit.site/sharedacc520k/WhaleAdventure_VR_Diet
# Conflicts:
#	Assets/01_Scenes/Cave_Test_2/NavMesh-Cube (2).asset.meta
#	Assets/09_UI/talk/menu_panel_REAL_transparent_cropped.png.meta
#	Assets/09_UI/talk/pinocchio_title_banner_REAL_transparent_cropped.png.meta
#	Assets/09_UI/talk/wood_button_plain_REAL_transparent.png.meta
#	Assets/My project/Fishing Scripts/model/New Material.mat.meta
#	Assets/XR/Settings/OpenXR Package Settings.asset.meta
#	Assets/XR/Settings/OpenXRPackageSettings.asset
2026-06-29 17:44:36 +09:00
50ff5e4ae9 2026.06.29 17:43 2026-06-29 17:43:17 +09:00
b688a14be4 Merge branch 'main' of https://www.nakjungit.site/sharedacc520k/WhaleAdventure_VR_Diet 2026-06-29 17:33:22 +09:00
d57bc65c63 변경없음 2026-06-29 17:22:17 +09:00
HIHIHIHIHIHIzz
9014b0d89f 저장 2026-06-29 17:18:21 +09:00
HIHIHIHIHIHIzz
cc300f4c4f 저장? 2026-06-29 17:15:11 +09:00
29 changed files with 1302 additions and 72 deletions

View File

@@ -1,6 +0,0 @@
{
"version": "1.0",
"components": [
"Microsoft.VisualStudio.Workload.ManagedGame"
]
}

View File

@@ -0,0 +1,130 @@
fileFormatVersion: 2
guid: 0873c0e21270c8b419c3f5652cef9c51
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: 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: 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
- serializedVersion: 4
buildTarget: WebGL
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: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,130 @@
fileFormatVersion: 2
guid: f237e3fa596a6ec42a952e43fa89cd5d
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: 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: 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
- serializedVersion: 4
buildTarget: WebGL
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: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,130 @@
fileFormatVersion: 2
guid: 8c0e90325ba71004ca264e782d8117aa
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: 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: 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
- serializedVersion: 4
buildTarget: WebGL
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: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,12 +1,16 @@
fileFormatVersion: 2
<<<<<<< HEAD
guid: e4b6bdaab0b640143bac52cb0be33e54
=======
guid: 0e533587a03b84940b08e956a8615adf
>>>>>>> dace9380396749ea751e95697f4b74adaecb007d
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +41,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +56,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 8
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -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: []
@@ -113,7 +120,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
spriteID:
internalID: 0
vertices: []
indices:

View File

@@ -1,12 +1,16 @@
fileFormatVersion: 2
<<<<<<< HEAD
guid: 9e4b854b73fa4c049bae4e53eb60d8d2
=======
guid: e947b9df5e461fd48a18b65eae417346
>>>>>>> dace9380396749ea751e95697f4b74adaecb007d
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +41,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +56,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 8
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -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: []
@@ -113,7 +120,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
spriteID:
internalID: 0
vertices: []
indices:

View File

@@ -1,12 +1,16 @@
fileFormatVersion: 2
<<<<<<< HEAD
guid: 5d6edb11f11aef3408dc8c42214fcfa2
=======
guid: 4e0c1ffb4b7796341b9614ba8650b534
>>>>>>> dace9380396749ea751e95697f4b74adaecb007d
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +41,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +56,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 8
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -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: []
@@ -113,7 +120,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
spriteID:
internalID: 0
vertices: []
indices:

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

@@ -1,7 +1,6 @@
fileFormatVersion: 2
guid: c60ef9a2426e27f41addd32bf4fda47c
folderAsset: yes
DefaultImporter:
guid: d02f5889fbfe766478ade17cb5f593c1
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:

View File

@@ -156,6 +156,69 @@ public class FishingGaugeUI : MonoBehaviour
[Header("Item Icons")]
[SerializeField] private FishingItemIconData[] itemIcons;
[Header("Caught Item Random Texts")]
[Tooltip("물고기를 낚았을 때 랜덤으로 표시할 제목 문구입니다.")]
[SerializeField] private string[] fishCaughtMessages =
{
"물고기를 낚았다!",
"작은 물고기가 걸렸다!",
"연못에서 물고기가 올라왔다.",
"평범한 물고기를 낚았다.",
"힘차게 팔딱이는 물고기다!",
"낚싯줄 끝에서 물고기가 반짝였다."
};
[Tooltip("쓰레기를 낚았을 때 랜덤으로 표시할 제목 문구입니다.")]
[SerializeField] private string[] trashCaughtMessages =
{
"쓰레기를 건져냈다!",
"낡은 쓰레기가 걸렸다.",
"연못 속 오염물을 꺼냈다.",
"물고기는 아니지만, 연못은 조금 깨끗해졌다.",
"버려진 쓰레기를 낚아 올렸다.",
"찌 아래에 숨어 있던 쓰레기를 끌어냈다."
};
[Tooltip("기억의 조각을 낚았을 때 랜덤으로 표시할 제목 문구입니다.")]
[SerializeField] private string[] memoryPieceCaughtMessages =
{
"기억의 조각을 되찾았다!",
"빛나는 기억의 조각이 떠올랐다.",
"잊고 있던 기억이 손에 닿았다.",
"연못 속에서 기억의 조각을 발견했다.",
"희미한 빛이 기억의 조각으로 모였다."
};
[Tooltip("물고기를 낚았을 때 랜덤으로 표시할 설명 문구입니다.")]
[SerializeField] private string[] fishHintMessages =
{
"평범한 물고기다.",
"연못에 아직 생명이 남아 있다.",
"작지만 건강해 보인다.",
"특별하진 않지만 나쁘지 않은 수확이다.",
"조용한 연못에서 살아남은 물고기다."
};
[Tooltip("쓰레기를 낚았을 때 랜덤으로 표시할 설명 문구입니다.")]
[SerializeField] private string[] trashHintMessages =
{
"연못이 조금 맑아졌다.",
"이런 것들이 연못을 더럽히고 있었다.",
"하나씩 치우면 물이 맑아질 것이다.",
"기억의 조각에 한 걸음 가까워졌다.",
"연못 아래의 탁한 기운이 조금 걷혔다."
};
[Tooltip("기억의 조각을 낚았을 때 랜덤으로 표시할 설명 문구입니다.")]
[SerializeField] private string[] memoryPieceHintMessages =
{
"잃어버린 기억의 일부다.",
"연못이 맑아지자 모습을 드러냈다.",
"오래전의 기억이 희미하게 느껴진다.",
"이 조각이 무언가를 떠올리게 한다.",
"빛이 손끝에서 조용히 흔들린다."
};
[Header("Guide UI")]
[SerializeField] private bool showControllerGuideOnInitialize = true;
@@ -684,7 +747,9 @@ public void ShowCaughtItem(string text)
public void ShowCaughtItem(FishingItemType itemType, string displayName, bool countsAsCleanupItem, string extraMessage = null)
{
string caughtMessage = GetCaughtMessage(itemType, displayName);
string hintMessage = string.IsNullOrWhiteSpace(extraMessage) ? GetDefaultHint(itemType, countsAsCleanupItem) : extraMessage;
string defaultHint = GetDefaultHint(itemType, countsAsCleanupItem);
string hintMessage = CombineHintMessage(defaultHint, extraMessage);
ShowCaughtItem(itemType, caughtMessage, hintMessage);
}
@@ -824,36 +889,97 @@ private FishingItemIconData GetIconData(FishingItemType itemType)
private string GetCaughtMessage(FishingItemType itemType, string displayName)
{
if (!string.IsNullOrWhiteSpace(displayName) && itemType != FishingItemType.None)
return $"{displayName}을(를) 낚았다!";
switch (itemType)
{
case FishingItemType.Fish: return "물고기를 낚았다!";
case FishingItemType.Trash: return "쓰레기를 건져냈다!";
case FishingItemType.MemoryPiece: return "기억의 조각을 찾았다!";
default: return string.IsNullOrWhiteSpace(displayName) ? "무언가를 낚았다!" : displayName;
case FishingItemType.Fish:
return PickRandomText(fishCaughtMessages, "물고기를 낚았다!");
case FishingItemType.Trash:
return PickRandomText(trashCaughtMessages, "쓰레기를 건져냈다!");
case FishingItemType.MemoryPiece:
return PickRandomText(memoryPieceCaughtMessages, "기억의 조각을 되찾았다!");
case FishingItemType.None:
default:
return string.IsNullOrWhiteSpace(displayName) ? "무언가를 낚았다!" : displayName;
}
}
private string GetDefaultHint(FishingItemType itemType, bool countsAsCleanupItem)
{
FishingItemIconData iconData = GetIconData(itemType);
if (iconData != null && !string.IsNullOrWhiteSpace(iconData.hintText))
return iconData.hintText;
if (countsAsCleanupItem)
return "연못이 조금 맑아졌다.";
string iconHint = iconData != null ? iconData.hintText : null;
switch (itemType)
{
case FishingItemType.Fish: return "평범한 물고기다.";
case FishingItemType.MemoryPiece: return "잃어버린 기억의 일부다.";
default: return string.Empty;
case FishingItemType.Fish:
return PickRandomText(fishHintMessages, string.IsNullOrWhiteSpace(iconHint) ? "평범한 물고기다." : iconHint);
case FishingItemType.Trash:
return PickRandomText(trashHintMessages, string.IsNullOrWhiteSpace(iconHint) ? "연못이 조금 맑아졌다." : iconHint);
case FishingItemType.MemoryPiece:
return PickRandomText(memoryPieceHintMessages, string.IsNullOrWhiteSpace(iconHint) ? "잃어버린 기억의 일부다." : iconHint);
default:
if (!string.IsNullOrWhiteSpace(iconHint))
return iconHint;
return countsAsCleanupItem ? "연못이 조금 맑아졌다." : string.Empty;
}
}
private string CombineHintMessage(string defaultHint, string extraMessage)
{
bool hasDefault = !string.IsNullOrWhiteSpace(defaultHint);
bool hasExtra = !string.IsNullOrWhiteSpace(extraMessage);
if (hasDefault && hasExtra)
return $"{defaultHint}\n{extraMessage}";
if (hasDefault)
return defaultHint;
if (hasExtra)
return extraMessage;
return string.Empty;
}
private string PickRandomText(string[] messages, string fallback)
{
if (messages == null || messages.Length == 0)
return fallback;
int validCount = 0;
for (int i = 0; i < messages.Length; i++)
{
if (!string.IsNullOrWhiteSpace(messages[i]))
validCount++;
}
if (validCount == 0)
return fallback;
int targetIndex = UnityEngine.Random.Range(0, validCount);
int currentIndex = 0;
for (int i = 0; i < messages.Length; i++)
{
if (string.IsNullOrWhiteSpace(messages[i]))
continue;
if (currentIndex == targetIndex)
return messages[i];
currentIndex++;
}
return fallback;
}
public void ShowNotice(string message)
{
if (noticeRoutine != null)

View File

@@ -0,0 +1,137 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &-1869237748503949548
MonoBehaviour:
m_ObjectHideFlags: 11
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: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion
version: 10
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: New Material
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap:
RenderType: Opaque
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BaseMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_Lightmaps:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_LightmapsInd:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_ShadowMasks:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _AddPrecomputedVelocity: 0
- _AlphaClip: 0
- _AlphaToMask: 0
- _Blend: 0
- _BlendModePreserveSpecular: 1
- _BumpScale: 1
- _ClearCoatMask: 0
- _ClearCoatSmoothness: 0
- _Cull: 2
- _Cutoff: 0.5
- _DetailAlbedoMapScale: 1
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _DstBlendAlpha: 0
- _EnvironmentReflections: 1
- _GlossMapScale: 0
- _Glossiness: 0
- _GlossyReflections: 0
- _Metallic: 0.333
- _OcclusionStrength: 1
- _Parallax: 0.005
- _QueueOffset: 0
- _ReceiveShadows: 1
- _Smoothness: 0.712
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _SrcBlendAlpha: 1
- _Surface: 0
- _WorkflowMode: 1
- _XRMotionVectorsPass: 1
- _ZWrite: 1
m_Colors:
- _BaseColor: {r: 0, g: 0, b: 0, a: 1}
- _Color: {r: 0, g: 0, b: 0, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
m_BuildTextureStacks: []
m_AllowLocking: 1

View File

@@ -0,0 +1,15 @@
fileFormatVersion: 2
<<<<<<<< HEAD:Assets/My project/Fishing Scripts/model/New Material.mat.meta
guid: 803c199824d061648a60dcefbaab9c14
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
========
guid: 9c0e704ea9510154c87905364d1e2058
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
>>>>>>>> b688a14be4642113a27a5e81d7c3f9922d9c34f4:Assets/XR/Settings/OpenXR Package Settings.asset.meta
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,28 @@
fileFormatVersion: 2
guid: df111245539914844b62028fd56d4855
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 715df9372183c47e389bb6e19fbc3b52, type: 3}
editorImportSettings:
generateSecondaryUVSet: 0
importSettings:
nodeNameMethod: 1
animationMethod: 2
generateMipMaps: 1
texturesReadable: 0
defaultMinFilterMode: 9729
defaultMagFilterMode: 9729
anisotropicFilterLevel: 1
instantiationSettings:
mask: -1
layer: 0
skinUpdateWhenOffscreen: 1
lightIntensityFactor: 1
sceneObjectCreation: 2
assetDependencies: []
reportItems: []

Binary file not shown.

View File

@@ -0,0 +1,110 @@
fileFormatVersion: 2
guid: 3b097a0b7e6279b4c93cfcf67675b42c
ModelImporter:
serializedVersion: 24200
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
generateMeshLods: 0
meshLodGenerationFlags: 0
maximumMeshLod: -1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 0
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
<<<<<<< HEAD
guid: 0ebc173c38e576e46af1152cd6521c4c
=======
guid: 0d7aaa1930bdf854dbc499330b88fc84
>>>>>>> dace9380396749ea751e95697f4b74adaecb007d
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -34,7 +34,6 @@
"com.unity.timeline": "1.8.12",
"com.unity.ugui": "2.0.0",
"com.unity.visualeffectgraph": "17.3.0",
"com.unity.xr.androidxr-openxr": "1.2.0",
"com.unity.xr.arfoundation": "6.4.1",
"com.unity.xr.compositionlayers": "2.4.0",
"com.unity.xr.core-utils": "2.5.3",

View File

@@ -334,19 +334,6 @@
"com.unity.render-pipelines.core": "17.3.0"
}
},
"com.unity.xr.androidxr-openxr": {
"version": "1.2.0",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.xr.hands": "1.6.1",
"com.unity.xr.openxr": "1.16.0",
"com.unity.xr.management": "4.5.0",
"com.unity.xr.arfoundation": "6.4.0",
"com.unity.xr.compositionlayers": "2.3.0"
},
"url": "https://packages.unity.com"
},
"com.unity.xr.arfoundation": {
"version": "6.5.0",
"depth": 1,

Binary file not shown.

1
README.md Normal file
View File

@@ -0,0 +1 @@
시연 영상 : https://youtu.be/Z2WKSO2Cy6I