Compare commits

..

28 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
dldydtn9755-crypto
ee772555a9 ㅇㅇ 2026-06-29 17:13:49 +09:00
dldydtn9755-crypto
61bddc92ff 일단 2026-06-29 15:41:13 +09:00
6c09948627 Merge branch 'main' of https://www.nakjungit.site/sharedacc520k/WhaleAdventure_VR_Diet
# Conflicts:
#	Assets/My project/fishhook scene.meta
#	Assets/My project/fishhook scene.unity.meta
#	Assets/My project/fishhook scene/NavMesh-Terrain.asset.meta
#	Assets/XR/AndroidXR/AndroidXRSettingsInitializer.meta
2026-06-29 14:39:37 +09:00
9df81db479 111 2026-06-29 14:38:43 +09:00
f67d0683a0 2026.06.29 2026-06-29 14:25:49 +09:00
3887731db4 Merge branch 'main' of https://www.nakjungit.site/sharedacc520k/WhaleAdventure_VR_Diet 2026-06-29 12:50:38 +09:00
64875088e2 고양이 대화 추가 2026-06-29 12:50:20 +09:00
bc4dfb126b Merge branch 'main' of https://www.nakjungit.site/sharedacc520k/WhaleAdventure_VR_Diet 2026-06-29 12:48:52 +09:00
66090c3e48 진주 손 수정 2026-06-29 12:48:44 +09:00
fadf2fb84f 터치오브젝트 사라짐 2026-06-29 12:45:49 +09:00
1e2bffa0d6 시작씬 수정 2026-06-29 11:58:56 +09:00
63 changed files with 2925 additions and 1053 deletions

View File

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

View File

@@ -111,7 +111,7 @@ public void SetZoneActive(DialogRegion zone, bool active)
public void SetClearDialogParameter()
{
string sceneName1 = "블랙잭";
string sceneCode1 = "blackjack";
string sceneCode1 = "BlackjackRoom";
string sceneName2 = "캣룸";
string sceneCode2 = "CatsRoom";

Binary file not shown.

View File

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

Binary file not shown.

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

@@ -0,0 +1,409 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &1
MonoBehaviour:
m_ObjectHideFlags: 61
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: 790b4d75d92f4b0984310a268dbd952f, type: 3}
m_Name: Cat1_CatsRoom_Area1 1
m_EditorClassIdentifier: Unity.GraphToolkit.Editor::Unity.GraphToolkit.Editor.Implementation.GraphObjectImp
m_GraphModel:
rid: 6595524353106116630
references:
version: 2
RefIds:
- rid: -2
type: {class: , ns: , asm: }
- rid: 6595524353106116630
type: {class: GraphModelImp, ns: Unity.GraphToolkit.Editor.Implementation, asm: Unity.GraphToolkit.Editor}
data:
m_Guid:
m_Value0: 13819889836145151562
m_Value1: 2645381255326452780
m_HashGuid:
serializedVersion: 2
Hash: 4a8e76c6951ccabf2ccc35633c48b624
m_Name: Cat1_CatsRoom_Area1 1
m_GraphNodeModels:
- rid: 6595524353106116633
- rid: 6595524353106116635
- rid: 6595524353106116646
m_GraphWireModels:
- rid: 6595524353106116636
- rid: 6595524353106116647
m_GraphStickyNoteModels: []
m_GraphPlacematModels: []
m_GraphVariableModels: []
m_GraphPortalModels: []
m_SectionModels:
- rid: 6595524353106116631
m_LocalSubgraphs: []
m_LastKnownBounds:
serializedVersion: 2
x: 222
y: 84
width: 920
height: 386
m_GraphElementMetaData:
- m_Guid:
m_Value0: 14845512388065122572
m_Value1: 17804268460506216482
m_HashGuid:
serializedVersion: 2
Hash: 0c5948afdcda05ce22f82972d57715f7
m_Category: 0
m_Index: 0
- m_Guid:
m_Value0: 7989713923298697385
m_Value1: 15604869423937906234
m_HashGuid:
serializedVersion: 2
Hash: a920365f7b2ae16e3a662c1c10a28fd8
m_Category: 0
m_Index: 1
- m_Guid:
m_Value0: 5269650743910428719
m_Value1: 257959026697812224
m_HashGuid:
serializedVersion: 2
Hash: 2f7027896e8f214900b9ed385e749403
m_Category: 2
m_Index: 0
- m_Guid:
m_Value0: 7697830479301862552
m_Value1: 13043115897654624489
m_HashGuid:
serializedVersion: 2
Hash: 9864f63b0930d46ae940f4b3cd7402b5
m_Category: 0
m_Index: 2
- m_Guid:
m_Value0: 13678802302849805841
m_Value1: 5869810211712229956
m_HashGuid:
serializedVersion: 2
Hash: 116e289638ded4bd446211b849c17551
m_Category: 2
m_Index: 1
m_EntryPoint:
rid: 6595524353106116633
m_Graph:
rid: 6595524353106116632
- rid: 6595524353106116631
type: {class: SectionModel, ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Guid:
m_Value0: 13482299192089173763
m_Value1: 8100932157345530803
m_HashGuid:
serializedVersion: 2
Hash: 03df02d4aebf1abbb3831e64e04a6c70
m_Version: 2
m_Items: []
m_Title:
- rid: 6595524353106116632
type: {class: DialogGraph, ns: WhaleAdventure.Dialog.GraphTool.Editor, asm: Assembly-CSharp-Editor}
data:
- rid: 6595524353106116633
type: {class: UserNodeModelImp, ns: Unity.GraphToolkit.Editor.Implementation, asm: Unity.GraphToolkit.Editor}
data:
m_Guid:
m_Value0: 14845512388065122572
m_Value1: 17804268460506216482
m_HashGuid:
serializedVersion: 2
Hash: 0c5948afdcda05ce22f82972d57715f7
m_Version: 2
m_Position: {x: 222.2174, y: 116.434784}
m_Title:
m_Tooltip:
m_NodePreviewModel:
rid: -2
m_State: 0
m_InputConstantsById:
m_KeyList: []
m_ValueList: []
m_InputPortInfos:
expandedPortsById:
m_KeyList: []
m_ValueList:
m_OutputPortInfos:
expandedPortsById:
m_KeyList: []
m_ValueList:
m_Collapsed: 0
m_CurrentModeIndex: 0
m_ElementColor:
m_Color: {r: 0, g: 0, b: 0, a: 0}
m_HasUserColor: 0
m_Node:
rid: 6595524353106116634
- rid: 6595524353106116634
type: {class: DialogStartNode, ns: WhaleAdventure.Dialog.GraphTool.Editor, asm: Assembly-CSharp-Editor}
data:
- rid: 6595524353106116635
type: {class: UserNodeModelImp, ns: Unity.GraphToolkit.Editor.Implementation, asm: Unity.GraphToolkit.Editor}
data:
m_Guid:
m_Value0: 7989713923298697385
m_Value1: 15604869423937906234
m_HashGuid:
serializedVersion: 2
Hash: a920365f7b2ae16e3a662c1c10a28fd8
m_Version: 2
m_Position: {x: 430.9063, y: 86.04323}
m_Title:
m_Tooltip:
m_NodePreviewModel:
rid: -2
m_State: 0
m_InputConstantsById:
m_KeyList:
- __option_ChoiceCount
- Speaker
- TalkText
- Gesture
- Expression
- Voice
- LineDuration
- LookAtPlayer
- WaitForInput
- __option_EventKey
m_ValueList:
- rid: 6595524353106116637
- rid: 6595524353106116638
- rid: 6595524353106116639
- rid: 6595524353106116640
- rid: 6595524353106116641
- rid: 6595524353106116642
- rid: 6595524353106116643
- rid: 6595524353106116644
- rid: 6595524374970761386
- rid: 6595524374970761398
m_InputPortInfos:
expandedPortsById:
m_KeyList: []
m_ValueList:
m_OutputPortInfos:
expandedPortsById:
m_KeyList: []
m_ValueList:
m_Collapsed: 0
m_CurrentModeIndex: 0
m_ElementColor:
m_Color: {r: 0, g: 0, b: 0, a: 0}
m_HasUserColor: 0
m_Node:
rid: 6595524353106116645
- rid: 6595524353106116636
type: {class: WireModel, ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Guid:
m_Value0: 5269650743910428719
m_Value1: 257959026697812224
m_HashGuid:
serializedVersion: 2
Hash: 2f7027896e8f214900b9ed385e749403
m_Version: 2
m_FromPortReference:
m_NodeModelGuid:
m_Value0: 14845512388065122572
m_Value1: 17804268460506216482
m_NodeModelHashGuid:
serializedVersion: 2
Hash: 0c5948afdcda05ce22f82972d57715f7
m_UniqueId: Out
m_PortDirection: 2
m_PortOrientation: 0
m_Title:
m_ToPortReference:
m_NodeModelGuid:
m_Value0: 7989713923298697385
m_Value1: 15604869423937906234
m_NodeModelHashGuid:
serializedVersion: 2
Hash: a920365f7b2ae16e3a662c1c10a28fd8
m_UniqueId: In
m_PortDirection: 1
m_PortOrientation: 0
m_Title:
- rid: 6595524353106116637
type: {class: 'Constant`1[[System.Int32, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 0
- rid: 6595524353106116638
type: {class: 'Constant`1[[CharacterData, Assembly-CSharp]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: {fileID: 11400000, guid: 47faf39975a3c214c923a3cbca747c5a, type: 2}
- rid: 6595524353106116639
type: {class: 'Constant`1[[WhaleAdventure.Dialog.GraphTool.Editor.DialogText, Assembly-CSharp-Editor]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
Value: "\uC7A0\uAE50, \uB108 \uC74C\uC545\uC801 \uC7AC\uB2A5\uC774 \uC788\uC5B4\uBCF4\uC774\uB294\uB370?"
- rid: 6595524353106116640
type: {class: 'Constant`1[[GestureData, Assembly-CSharp]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: {fileID: 0}
- rid: 6595524353106116641
type: {class: 'Constant`1[[ExpressionData, Assembly-CSharp]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: {fileID: 0}
- rid: 6595524353106116642
type: {class: 'Constant`1[[VoiceClip, Assembly-CSharp]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: {fileID: 0}
- rid: 6595524353106116643
type: {class: 'Constant`1[[System.Single, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 5
- rid: 6595524353106116644
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 1
- rid: 6595524353106116645
type: {class: DialogLineNode, ns: WhaleAdventure.Dialog.GraphTool.Editor, asm: Assembly-CSharp-Editor}
data:
- rid: 6595524353106116646
type: {class: UserNodeModelImp, ns: Unity.GraphToolkit.Editor.Implementation, asm: Unity.GraphToolkit.Editor}
data:
m_Guid:
m_Value0: 7697830479301862552
m_Value1: 13043115897654624489
m_HashGuid:
serializedVersion: 2
Hash: 9864f63b0930d46ae940f4b3cd7402b5
m_Version: 2
m_Position: {x: 806, y: 84}
m_Title:
m_Tooltip:
m_NodePreviewModel:
rid: -2
m_State: 0
m_InputConstantsById:
m_KeyList:
- __option_ChoiceCount
- Speaker
- TalkText
- Gesture
- Expression
- Voice
- LineDuration
- LookAtPlayer
- WaitForInput
- __option_EventKey
m_ValueList:
- rid: 6595524353106116648
- rid: 6595524353106116649
- rid: 6595524353106116650
- rid: 6595524353106116651
- rid: 6595524353106116652
- rid: 6595524353106116653
- rid: 6595524353106116654
- rid: 6595524353106116655
- rid: 6595524374970761387
- rid: 6595524374970761399
m_InputPortInfos:
expandedPortsById:
m_KeyList: []
m_ValueList:
m_OutputPortInfos:
expandedPortsById:
m_KeyList: []
m_ValueList:
m_Collapsed: 0
m_CurrentModeIndex: 0
m_ElementColor:
m_Color: {r: 0, g: 0, b: 0, a: 0}
m_HasUserColor: 0
m_Node:
rid: 6595524353106116656
- rid: 6595524353106116647
type: {class: WireModel, ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Guid:
m_Value0: 13678802302849805841
m_Value1: 5869810211712229956
m_HashGuid:
serializedVersion: 2
Hash: 116e289638ded4bd446211b849c17551
m_Version: 2
m_FromPortReference:
m_NodeModelGuid:
m_Value0: 7989713923298697385
m_Value1: 15604869423937906234
m_NodeModelHashGuid:
serializedVersion: 2
Hash: a920365f7b2ae16e3a662c1c10a28fd8
m_UniqueId: Out
m_PortDirection: 2
m_PortOrientation: 0
m_Title:
m_ToPortReference:
m_NodeModelGuid:
m_Value0: 7697830479301862552
m_Value1: 13043115897654624489
m_NodeModelHashGuid:
serializedVersion: 2
Hash: 9864f63b0930d46ae940f4b3cd7402b5
m_UniqueId: In
m_PortDirection: 1
m_PortOrientation: 0
m_Title:
- rid: 6595524353106116648
type: {class: 'Constant`1[[System.Int32, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 0
- rid: 6595524353106116649
type: {class: 'Constant`1[[CharacterData, Assembly-CSharp]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: {fileID: 11400000, guid: 47faf39975a3c214c923a3cbca747c5a, type: 2}
- rid: 6595524353106116650
type: {class: 'Constant`1[[WhaleAdventure.Dialog.GraphTool.Editor.DialogText, Assembly-CSharp-Editor]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
Value: "\uC6B0\uB9AC\uC640 \uAC19\uC774 \uB9AC\uB4EC\uC744 \uB9DE\uCDB0\uBCF4\uC9C0
\uC54A\uC744\uB798?"
- rid: 6595524353106116651
type: {class: 'Constant`1[[GestureData, Assembly-CSharp]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: {fileID: 0}
- rid: 6595524353106116652
type: {class: 'Constant`1[[ExpressionData, Assembly-CSharp]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: {fileID: 0}
- rid: 6595524353106116653
type: {class: 'Constant`1[[VoiceClip, Assembly-CSharp]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: {fileID: 0}
- rid: 6595524353106116654
type: {class: 'Constant`1[[System.Single, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 5
- rid: 6595524353106116655
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 0
- rid: 6595524353106116656
type: {class: DialogLineNode, ns: WhaleAdventure.Dialog.GraphTool.Editor, asm: Assembly-CSharp-Editor}
data:
- rid: 6595524374970761386
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 0
- rid: 6595524374970761387
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value: 0
- rid: 6595524374970761398
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:
- rid: 6595524374970761399
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
data:
m_Value:

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 4a8537c362f67c04ea93007aa4906f8c
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 2ae5ca89bbed445479d9023586f0c041, type: 3}

Binary file not shown.

View File

@@ -0,0 +1,137 @@
fileFormatVersion: 2
<<<<<<< HEAD
guid: e4b6bdaab0b640143bac52cb0be33e54
=======
guid: 0e533587a03b84940b08e956a8615adf
>>>>>>> dace9380396749ea751e95697f4b74adaecb007d
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
<<<<<<< HEAD
=======
- 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
>>>>>>> dace9380396749ea751e95697f4b74adaecb007d
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:

View File

@@ -0,0 +1,137 @@
fileFormatVersion: 2
<<<<<<< HEAD
guid: 9e4b854b73fa4c049bae4e53eb60d8d2
=======
guid: e947b9df5e461fd48a18b65eae417346
>>>>>>> dace9380396749ea751e95697f4b74adaecb007d
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
<<<<<<< HEAD
=======
- 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
>>>>>>> dace9380396749ea751e95697f4b74adaecb007d
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:

Binary file not shown.

View File

@@ -0,0 +1,137 @@
fileFormatVersion: 2
<<<<<<< HEAD
guid: 5d6edb11f11aef3408dc8c42214fcfa2
=======
guid: 4e0c1ffb4b7796341b9614ba8650b534
>>>>>>> dace9380396749ea751e95697f4b74adaecb007d
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
<<<<<<< HEAD
=======
- 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
>>>>>>> dace9380396749ea751e95697f4b74adaecb007d
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:

File diff suppressed because it is too large Load Diff

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:

File diff suppressed because it is too large Load Diff

View File

@@ -4,21 +4,11 @@ public class FishingInventory : MonoBehaviour
{
[Header("Item Counts")]
[SerializeField] private int fishCount;
[SerializeField] private int rottenFishCount;
[SerializeField] private int trashCount;
[SerializeField] private int bottleCount;
[SerializeField] private int plasticBagCount;
[SerializeField] private int jellyfishPowderCount;
[SerializeField] private int oldCompassCount;
[SerializeField] private int memoryPieceCount;
public int FishCount => fishCount;
public int RottenFishCount => rottenFishCount;
public int TrashCount => trashCount;
public int BottleCount => bottleCount;
public int PlasticBagCount => plasticBagCount;
public int JellyfishPowderCount => jellyfishPowderCount;
public int OldCompassCount => oldCompassCount;
public int MemoryPieceCount => memoryPieceCount;
private void OnValidate()
@@ -29,12 +19,7 @@ private void OnValidate()
private void ClampCounts()
{
fishCount = Mathf.Max(0, fishCount);
rottenFishCount = Mathf.Max(0, rottenFishCount);
trashCount = Mathf.Max(0, trashCount);
bottleCount = Mathf.Max(0, bottleCount);
plasticBagCount = Mathf.Max(0, plasticBagCount);
jellyfishPowderCount = Mathf.Max(0, jellyfishPowderCount);
oldCompassCount = Mathf.Max(0, oldCompassCount);
memoryPieceCount = Mathf.Max(0, memoryPieceCount);
}
@@ -49,34 +34,16 @@ public void AddItem(FishingItemType itemType, int amount = 1)
fishCount += amount;
break;
case FishingItemType.RottenFish:
rottenFishCount += amount;
break;
case FishingItemType.Trash:
trashCount += amount;
break;
case FishingItemType.Bottle:
bottleCount += amount;
break;
case FishingItemType.PlasticBag:
plasticBagCount += amount;
break;
case FishingItemType.JellyfishPowder:
jellyfishPowderCount += amount;
break;
case FishingItemType.OldCompass:
oldCompassCount += amount;
break;
case FishingItemType.MemoryPiece:
memoryPieceCount += amount;
break;
}
ClampCounts();
}
public bool HasItem(FishingItemType itemType, int amount = 1)
@@ -98,35 +65,16 @@ public bool ConsumeItem(FishingItemType itemType, int amount = 1)
fishCount -= amount;
break;
case FishingItemType.RottenFish:
rottenFishCount -= amount;
break;
case FishingItemType.Trash:
trashCount -= amount;
break;
case FishingItemType.Bottle:
bottleCount -= amount;
break;
case FishingItemType.PlasticBag:
plasticBagCount -= amount;
break;
case FishingItemType.JellyfishPowder:
jellyfishPowderCount -= amount;
break;
case FishingItemType.OldCompass:
oldCompassCount -= amount;
break;
case FishingItemType.MemoryPiece:
memoryPieceCount -= amount;
break;
}
ClampCounts();
return true;
}
@@ -137,24 +85,9 @@ public int GetItemCount(FishingItemType itemType)
case FishingItemType.Fish:
return fishCount;
case FishingItemType.RottenFish:
return rottenFishCount;
case FishingItemType.Trash:
return trashCount;
case FishingItemType.Bottle:
return bottleCount;
case FishingItemType.PlasticBag:
return plasticBagCount;
case FishingItemType.JellyfishPowder:
return jellyfishPowderCount;
case FishingItemType.OldCompass:
return oldCompassCount;
case FishingItemType.MemoryPiece:
return memoryPieceCount;
@@ -167,12 +100,7 @@ public int GetItemCount(FishingItemType itemType)
public void ResetInventory()
{
fishCount = 0;
rottenFishCount = 0;
trashCount = 0;
bottleCount = 0;
plasticBagCount = 0;
jellyfishPowderCount = 0;
oldCompassCount = 0;
memoryPieceCount = 0;
}
}

View File

@@ -0,0 +1,54 @@
using UnityEngine;
/// <summary>
/// Connects FishingGameManager's caught-item event to FishingInventory.
/// Add this to the same prefab/root object, then assign Game Manager and Inventory.
/// </summary>
public class FishingInventoryBinder : MonoBehaviour
{
[SerializeField] private FishingGameManager gameManager;
[SerializeField] private FishingInventory inventory;
private void Reset()
{
AutoBind();
}
private void Awake()
{
AutoBind();
}
private void OnEnable()
{
if (gameManager != null)
gameManager.ItemCaught += OnItemCaught;
}
private void OnDisable()
{
if (gameManager != null)
gameManager.ItemCaught -= OnItemCaught;
}
[ContextMenu("Auto Bind Inventory Binder")]
public void AutoBind()
{
if (gameManager == null)
gameManager = GetComponentInParent<FishingGameManager>();
if (inventory == null)
inventory = GetComponentInParent<FishingInventory>();
if (inventory == null && gameManager != null)
inventory = gameManager.GetComponentInChildren<FishingInventory>(true);
}
private void OnItemCaught(FishingItemType itemType, int amount)
{
if (inventory == null)
return;
inventory.AddItem(itemType, amount);
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: a6aa548e80b5ed040b1d663b9d7bafa7

View File

@@ -2,11 +2,6 @@ public enum FishingItemType
{
None,
Fish,
RottenFish,
Trash,
Bottle,
PlasticBag,
JellyfishPowder,
OldCompass,
MemoryPiece
}

View File

@@ -8,7 +8,7 @@ public class FishingRewardSystem : MonoBehaviour
public class LootEntry
{
public FishingItemType itemType = FishingItemType.Fish;
public string displayName = "생선";
public string displayName = "물고기";
[Min(0f)] public float weight = 1f;
public LootEntry(FishingItemType itemType, string displayName, float weight)
@@ -36,11 +36,11 @@ public CatchResult(FishingItemType itemType, string displayName, bool countsAsCl
}
[Header("Loot Table - Dirty Pond")]
[Tooltip("연못이 정화되기 전 낚이는 아이템 목록입니다. 기억의 조각은 이 테이블에 있어도 자동 제외됩니다.")]
[Tooltip("연못이 정화되기 전에는 물고기와 쓰레기만 낚입니다. 기억의 조각은 자동 제외됩니다.")]
[SerializeField] private List<LootEntry> dirtyPondLootTable = new List<LootEntry>();
[Header("Loot Table - Clean Pond")]
[Tooltip("연못이 정화된 뒤 낚이는 아이템 목록입니다. 기억의 조각을 포함할 수 있습니다.")]
[Tooltip("연못이 정화된 뒤에는 기억의 조각이 낚입니다.")]
[SerializeField] private List<LootEntry> cleanPondLootTable = new List<LootEntry>();
[Header("Debug")]
@@ -74,6 +74,10 @@ private void EnsureLootTables()
if (cleanPondLootTable == null)
cleanPondLootTable = new List<LootEntry>();
// 이전 버전의 상한 생선/병/봉지/나침반 등이 인스펙터에 남아 있어도
// 런타임에서는 물고기 / 쓰레기 / 기억의 조각 3종만 남도록 정리합니다.
SanitizeLootTables();
if (dirtyPondLootTable.Count == 0)
SetDefaultDirtyLootTable();
@@ -81,6 +85,45 @@ private void EnsureLootTables()
SetDefaultCleanLootTable();
}
private void SanitizeLootTables()
{
SanitizeTable(dirtyPondLootTable, allowFish: true, allowTrash: true, allowMemoryPiece: false);
SanitizeTable(cleanPondLootTable, allowFish: false, allowTrash: false, allowMemoryPiece: true);
}
private void SanitizeTable(List<LootEntry> table, bool allowFish, bool allowTrash, bool allowMemoryPiece)
{
if (table == null)
return;
for (int i = table.Count - 1; i >= 0; i--)
{
LootEntry entry = table[i];
if (entry == null || !IsAllowedInTable(entry.itemType, allowFish, allowTrash, allowMemoryPiece))
table.RemoveAt(i);
}
}
private bool IsAllowedInTable(FishingItemType itemType, bool allowFish, bool allowTrash, bool allowMemoryPiece)
{
switch (itemType)
{
case FishingItemType.Fish:
return allowFish;
case FishingItemType.Trash:
return allowTrash;
case FishingItemType.MemoryPiece:
return allowMemoryPiece;
case FishingItemType.None:
default:
return false;
}
}
private void SetDefaultLootTables()
{
SetDefaultDirtyLootTable();
@@ -91,13 +134,8 @@ private void SetDefaultDirtyLootTable()
{
dirtyPondLootTable = new List<LootEntry>
{
new LootEntry(FishingItemType.Fish, "생선", 25f),
new LootEntry(FishingItemType.RottenFish, "상한 생선", 8f),
new LootEntry(FishingItemType.Trash, "쓰레기", 28f),
new LootEntry(FishingItemType.Bottle, "병", 18f),
new LootEntry(FishingItemType.PlasticBag, "봉지", 18f),
new LootEntry(FishingItemType.JellyfishPowder, "해파리 가루", 6f),
new LootEntry(FishingItemType.OldCompass, "낡은 나침반", 4f)
new LootEntry(FishingItemType.Fish, "물고기", 35f),
new LootEntry(FishingItemType.Trash, "쓰레기", 65f)
};
}
@@ -105,11 +143,7 @@ private void SetDefaultCleanLootTable()
{
cleanPondLootTable = new List<LootEntry>
{
new LootEntry(FishingItemType.MemoryPiece, "기억의 조각", 30f),
new LootEntry(FishingItemType.Fish, "생선", 30f),
new LootEntry(FishingItemType.OldCompass, "낡은 나침반", 15f),
new LootEntry(FishingItemType.JellyfishPowder, "해파리 가루", 15f),
new LootEntry(FishingItemType.RottenFish, "상한 생선", 4f)
new LootEntry(FishingItemType.MemoryPiece, "기억의 조각", 100f)
};
}
@@ -122,14 +156,14 @@ private void ClampLootTable(List<LootEntry> table)
{
if (table[i] == null)
{
table[i] = new LootEntry(FishingItemType.Fish, "생선", 1f);
table[i] = new LootEntry(FishingItemType.Fish, "물고기", 1f);
continue;
}
table[i].weight = Mathf.Max(0f, table[i].weight);
if (string.IsNullOrWhiteSpace(table[i].displayName))
table[i].displayName = GetDefaultDisplayName(table[i].itemType);
// 이전 버전에서 남은 표시 이름을 3종 아이템 이름으로 정리합니다.
table[i].displayName = GetDefaultDisplayName(table[i].itemType);
}
}
@@ -142,7 +176,8 @@ public CatchResult RollCatch(bool pondCleaned, bool forceMemoryPiece)
LootEntry selectedEntry = RollFromTable(table, pondCleaned);
if (selectedEntry == null)
return CreateCatchResult(FishingItemType.Fish, GetDefaultDisplayName(FishingItemType.Fish));
return CreateCatchResult(pondCleaned ? FishingItemType.MemoryPiece : FishingItemType.Fish,
GetDefaultDisplayName(pondCleaned ? FishingItemType.MemoryPiece : FishingItemType.Fish));
return CreateCatchResult(selectedEntry.itemType, selectedEntry.displayName);
}
@@ -194,10 +229,15 @@ private bool IsRollableEntry(LootEntry entry, bool pondCleaned)
if (entry.weight <= 0f)
return false;
if (entry.itemType == FishingItemType.None)
return false;
if (!pondCleaned && entry.itemType == FishingItemType.MemoryPiece)
return false;
return entry.itemType != FishingItemType.None;
return entry.itemType == FishingItemType.Fish ||
entry.itemType == FishingItemType.Trash ||
entry.itemType == FishingItemType.MemoryPiece;
}
private CatchResult CreateCatchResult(FishingItemType itemType, string displayName)
@@ -214,9 +254,7 @@ private CatchResult CreateCatchResult(FishingItemType itemType, string displayNa
public bool IsCleanupItem(FishingItemType itemType)
{
return itemType == FishingItemType.Trash ||
itemType == FishingItemType.Bottle ||
itemType == FishingItemType.PlasticBag;
return itemType == FishingItemType.Trash;
}
public string GetDefaultDisplayName(FishingItemType itemType)
@@ -224,26 +262,11 @@ public string GetDefaultDisplayName(FishingItemType itemType)
switch (itemType)
{
case FishingItemType.Fish:
return "생선";
case FishingItemType.RottenFish:
return "상한 생선";
return "물고기";
case FishingItemType.Trash:
return "쓰레기";
case FishingItemType.Bottle:
return "병";
case FishingItemType.PlasticBag:
return "봉지";
case FishingItemType.JellyfishPowder:
return "해파리 가루";
case FishingItemType.OldCompass:
return "낡은 나침반";
case FishingItemType.MemoryPiece:
return "기억의 조각";

View File

@@ -46,6 +46,18 @@ public enum StartMode
ManualOnly
}
public enum BiteStartMode
{
[Tooltip("캐스팅이 끝나면 물 감지와 상관없이 입질 대기를 시작합니다. 개발/테스트 단계에서 추천합니다.")]
AfterCastAlways,
[Tooltip("BobberLineStartPoint가 Water Collider로 감지될 때만 입질 대기를 시작합니다. 완성 단계에서 추천합니다.")]
WhenBobberInWater,
[Tooltip("자동 입질 대기를 시작하지 않습니다. ForceBite() 또는 별도 이벤트로만 입질을 발생시킵니다.")]
ManualOnly
}
[Header("Core References")]
[SerializeField] private FishingGameManager fishingGameManager;
[SerializeField] private FishingHapticManager haptic;
@@ -158,6 +170,10 @@ public enum StartMode
[SerializeField] private bool useWaterTag = true;
[SerializeField] private string waterTag = "Water";
[Header("Bite Start Rule")]
[Tooltip("입질 대기를 언제 시작할지 결정합니다. 테스트 중에는 AfterCastAlways, 실제 물 판정이 필요하면 WhenBobberInWater를 사용하세요.")]
[SerializeField] private BiteStartMode biteStartMode = BiteStartMode.AfterCastAlways;
[Header("Bite")]
[SerializeField] private bool useBiteTimer = true;
[SerializeField] private Vector2 biteDelayRange = new Vector2(1.5f, 4.0f);
@@ -181,7 +197,7 @@ public enum StartMode
[Tooltip("If On, Reel Hold Action must be pressed to reel. If Off and Use Reel Grab Events is also Off, being near the reel is enough.")]
[SerializeField] private bool useReelHoldAction = true;
[Tooltip("Button/Grip action used while reeling. Example binding: <XRController>{LeftHand}/gripPressed or <XRController>{LeftHand}/triggerPressed.")]
[Tooltip("Button/Grip action used while reeling. Example binding: <XRController>{RightHand}/gripPressed or <XRController>{RightHand}/triggerPressed when the right hand reels.")]
[SerializeField] private InputActionReference reelHoldAction;
[Tooltip("If On, call MarkReelHandleGrabbed/MarkReelHandleReleased from a reel handle XR Grab Interactable or trigger volume.")]
@@ -597,9 +613,53 @@ private IEnumerator CastRoutine(Vector3 target)
state = BobberState.WaitingInWater;
Log("찌 캐스팅 완료");
HandleBiteStartAfterCast();
}
if (!useWaterOverlapCheck && useBiteTimer)
StartWaitingForBite();
private void HandleBiteStartAfterCast()
{
if (!useBiteTimer)
{
Log("입질 타이머가 꺼져 있어 입질 대기를 시작하지 않습니다.");
return;
}
switch (biteStartMode)
{
case BiteStartMode.AfterCastAlways:
Log("캐스팅 완료 후 입질 대기를 시작합니다. 물 감지는 진행을 막지 않습니다.");
StartWaitingForBite();
break;
case BiteStartMode.WhenBobberInWater:
if (!useWaterOverlapCheck)
{
Log("물 감지가 꺼져 있어 캐스팅 완료 후 입질 대기를 시작합니다.");
StartWaitingForBite();
return;
}
if (IsBobberOverlappingWater())
{
if (!bobberInWater)
{
bobberInWater = true;
Log("찌가 물에 들어감");
}
StartWaitingForBite();
}
else
{
bobberInWater = false;
Log("캐스팅은 완료됐지만 찌가 물로 감지되지 않았습니다. Water Collider/Tag/Layer와 BobberLineStartPoint 위치를 확인하세요.");
}
break;
case BiteStartMode.ManualOnly:
Log("수동 입질 모드입니다. ForceBite() 또는 별도 이벤트로 입질을 발생시켜야 합니다.");
break;
}
}
private IEnumerator MoveBobberRoutine(Vector3 target, float duration, BobberState endState)
@@ -625,7 +685,10 @@ private IEnumerator MoveBobberRoutine(Vector3 target, float duration, BobberStat
private void StartWaitingForBite()
{
if (!useBiteTimer)
{
Log("입질 타이머가 꺼져 있어 입질 대기를 시작하지 않습니다.");
return;
}
if (biteWaitRoutine != null || state == BobberState.Bite || state == BobberState.MiniGameActive)
return;
@@ -644,8 +707,9 @@ private IEnumerator BiteWaitRoutine()
{
timer += Time.deltaTime;
if (useWaterOverlapCheck && !bobberInWater)
if (biteStartMode == BiteStartMode.WhenBobberInWater && useWaterOverlapCheck && !bobberInWater)
{
Log("찌가 물에서 벗어나 입질 대기를 취소합니다.");
biteWaitRoutine = null;
yield break;
}
@@ -806,14 +870,19 @@ private void UpdateWaterState()
if (bobberInWater)
{
Log("찌가 물에 들어감");
if (state == BobberState.Casting || state == BobberState.WaitingInWater || state == BobberState.Idle)
if (biteStartMode == BiteStartMode.WhenBobberInWater &&
(state == BobberState.Casting || state == BobberState.WaitingInWater || state == BobberState.Idle))
{
StartWaitingForBite();
}
}
else
{
Log("찌가 물에서 나감");
if (state == BobberState.WaitingInWater || state == BobberState.Bite)
if (biteStartMode == BiteStartMode.WhenBobberInWater &&
(state == BobberState.WaitingInWater || state == BobberState.Bite))
{
StopBiteWaitOnly();
StopBiteShakeOnly();

View File

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

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: fe3d1baeb660bcc439902d62dfc02c1b
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: []

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:

View File

@@ -1,5 +1,9 @@
fileFormatVersion: 2
<<<<<<< HEAD
guid: c9e7644bbc6b3324eb679151bb0018fa
=======
guid: a32c27501966c844da3c4e2e54236880
>>>>>>> 3887731db4d2b6ac4d3d2887acc3414ddf555690
folderAsset: yes
DefaultImporter:
externalObjects: {}

Binary file not shown.

View File

@@ -1,5 +1,9 @@
fileFormatVersion: 2
<<<<<<< HEAD
guid: 96e0f6dd612977042b62b4b18a2f8c9a
=======
guid: 5e660f31b31a3c1489ac3a3e5804f0aa
>>>>>>> 3887731db4d2b6ac4d3d2887acc3414ddf555690
DefaultImporter:
externalObjects: {}
userData:

View File

@@ -1,5 +1,9 @@
fileFormatVersion: 2
<<<<<<< HEAD
guid: 73f8b205cedf821488958abbf597e518
=======
guid: 897f994e3e3765248902eea88350c6f7
>>>>>>> 3887731db4d2b6ac4d3d2887acc3414ddf555690
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0

View File

@@ -1,5 +1,9 @@
fileFormatVersion: 2
guid: 4886284493a03f74eb1c91ad15f61052
<<<<<<< HEAD
guid: 7f4320a32f7a846409fcf9cc7fa5fda1
=======
guid: 779ddf707232c4f49a357660d770bcf9
>>>>>>> 3887731db4d2b6ac4d3d2887acc3414ddf555690
DefaultImporter:
externalObjects: {}
userData:

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

@@ -3420,7 +3420,7 @@
{
"name": "",
"id": "deb6a7a2-8de5-46b1-812b-d24b20c907a2",
"path": "<XRController>{RightHand}/secondaryButton",
"path": "<XRController>{LeftHand}/secondaryButton",
"interactions": "",
"processors": "",
"groups": "",
@@ -3431,7 +3431,7 @@
{
"name": "",
"id": "22448257-ef2a-42bf-a6c0-66fad17ee5e8",
"path": "<XRController>{RightHand}/primaryButton",
"path": "<XRController>{LeftHand}/primaryButton",
"interactions": "",
"processors": "",
"groups": "",
@@ -3442,7 +3442,7 @@
{
"name": "",
"id": "a6cfa3d8-bd52-4c0e-8ff2-414ab0f22663",
"path": "<XRController>{LeftHand}/gripPressed",
"path": "<XRController>{RightHand}/gripPressed",
"interactions": "",
"processors": "",
"groups": "",

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.

Binary file not shown.

1
README.md Normal file
View File

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