{"id":2210,"date":"2024-02-19T22:27:47","date_gmt":"2024-02-19T13:27:47","guid":{"rendered":"http:\/\/batmask.dothome.co.kr\/?p=2210"},"modified":"2024-02-19T22:43:32","modified_gmt":"2024-02-19T13:43:32","slug":"godot-4-ray-casting","status":"publish","type":"post","link":"http:\/\/batmask.net\/index.php\/2024\/02\/19\/2210\/","title":{"rendered":"Godot 4 : Ray casting"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">\ub808\uc774\uce90\uc2a4\ud305(raycasting)\uc774\ub780?<\/h3>\n\n\n\n<p>\ub9d0 \uadf8\ub300\ub85c \uc4f0\uc790\uba74, \ud55c \uc9c0\uc810\uc5d0\uc11c \uad11\uc120\uc744 \uc3f4\uc11c \uadf8 \uad11\uc120\uc774 \uc5b4\ub518\uac00\uc5d0 \ucda9\ub3cc\ud558\ub294\uc9c0 \uc54c\uc544\ub0b4\ub294 \ubc29\ubc95\uc774\ub2e4. \uc6d0\ub798\ub294 \ub80c\ub354\ub9c1\uc744 \uc704\ud55c \uae30\ubc95\uc73c\ub85c \uc0ac\uc6a9\ub418\uc5c8\ub294\ub370, \ubc18\uc0ac\uac00 \uc5c6\ub294 \ub808\uc774 \ud2b8\ub808\uc774\uc2f1\uc73c\ub85c \uc0dd\uac01\ud560 \uc218\ub3c4 \uc788\uae30 \ub54c\ubb38\uc774\ub2e4. \ub610\ud55c, \uadf8\ub9bc\uc790\ub97c \uacc4\uc0b0\ud558\ub294\ub370 \uc0ac\uc6a9\ub420 \uc218\ub3c4 \uc788\ub2e4. \uc0dd\uac01\ubcf4\ub2e4 \ud65c\uc6a9\ub3c4\uac00 \ub9e4\uc6b0 \ub192\uc544\uc11c, \uac8c\uc784\uc5d0\uc11c \ub9c8\uc6b0\uc2a4 \ud074\ub9ad\uc2dc \uc5b4\ub5a4 \uc624\ube0c\uc81d\ud2b8\uac00 \uc120\ud0dd\ub418\uc5c8\ub294\uc9c0 \uc624\ube0c\uc81d\ud2b8 \ud53c\ud0b9\uc5d0 \uc0ac\uc6a9\ub418\uae30\ub3c4 \ud558\uace0, NPC\uc758 \uc2dc\uc57c\uc5d0 \ud50c\ub808\uc774\uc5b4\uac00 \ubcf4\uc774\ub294\uc9c0 \uccb4\ud06c\ud560 \uc218 \ub3c4 \uc788\ub2e4. <\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ub80c\ub354\ub9c1\uc5d0\uc11c\uc758 \uc0ac\uc6a9<\/h3>\n\n\n\n<p> \uac04\ub2e8\ud558\uac8c \ub80c\ub354\ub9c1\uc5d0\uc11c \uc0ac\uc6a9\ub418\ub294 \uc598\uae38 \ud574\ubcf4\uc790\uba74, \ub808\uc774\ud2b8\ub808\uc774\uc2f1\ud558\uace0 \ube44\uad50\ud574\ubcfc \uc218 \uc788\ub2e4. \ub808\uc774\ud2b8\ub808\uc774\uc2f1\uc740 \uce74\uba54\ub77c\ub85c\ubd80\ud130 \uc2dc\uc791\ud55c \uad11\uc120\uc774 \ubb3c\uccb4\uc5d0 \ub2ff\uac8c\ub418\uba74 \uadf8 \uc704\uce58\uc5d0\uc11c \ubc18\uc0ac\ub97c \uacc4\uc0b0\ud558\uc5ec \uacc4\uc18d \uc9c4\ud589\uc2dc\ucf1c \uc2e4\uc81c\uc640 \uac19\uc740 \ube5b\uc758 \uacbd\ub85c\ub97c \uc2dc\ubbac\ub808\uc774\uc158\ud558\uac8c \ub41c\ub2e4. \ubc18\uba74\uc5d0, \ub808\uc774\ucf00\uc2a4\ud305\uc740 \uce74\uba54\ub77c\uc5d0\uc11c \uc2dc\uc791\ud55c \uad11\uc120\uc744 \uacc4\uc18d \uc9c4\ud589\uc2dc\ud0a4\ub294\ub370, \uad50\ucc28\ud558\ub294 \uccab\ubc88\uc9f8 \ubb3c\uccb4\ub9cc \ud654\uba74\uc5d0 \ubcf4\uc774\uace0 \uadf8 \ub4a4\uc5d0 \uad50\ucc28\ud558\ub294 \ubd80\ubd84\ub4e4\uc740 \uac00\ub824\uc9c0\uac8c \ub418\ubbc0\ub85c \uc740\uba74\uc81c\uac70\uc5d0 \uc0ac\uc6a9\ub41c\ub2e4. <\/p>\n\n\n\n<p> \uac8c\uc784\uc5d0\uc11c\ub3c4 \ub80c\ub354\ub9c1\uc5d0 \uc774\uc6a9\ub418\uc5b4 \uc654\ub294\ub370, \ub300\ud45c\uc801\uc73c\ub85c \uc6b8\ud504\uac90\uc288\ud0c0\uc7783D\uac00 \uc788\ub2e4. \uc774\uac78 \ubcf4\uba74 2D\uc774\uba74\uc11c 3D\ub97c \ud749\ub0b4\ub0b4\ub294\uac78 \ubcfc \uc218 \uc788\ub294\ub370, \uc5ec\uae30\uc5d0 \ub808\uc774\uce90\uc2a4\ud305\uc774 \uc0ac\uc6a9\ub41c\ub2e4. \ud50c\ub808\uc774\uc5b4 \uc704\uce58\uc5d0\uc11c \uce74\uba54\ub77c \ubc29\ud5a5\uc73c\ub85c \uad11\uc120\uc758 \uc9c1\uc120\uc744 \uadf8\ub824\uc11c \ubcbd\uc5d0 \ub2ff\uac8c\ub418\uba74, \uadf8 \uac70\ub9ac\ub97c \uc774\uc6a9\ud558\uc5ec \ubcbd\uc758 \ub192\uc774\ub97c \ud654\uba74\uc5d0 \uadf8\ub9ac\uac8c \ub41c\ub2e4. \uc774\ub807\uac8c \ud558\uba74 2D\uc0c1\uc5d0\uc11c\uc758 \uacc4\uc0b0\uc744 3D\ub85c \uadf8\ub824\ub0bc \uc218 \uc788\ub294 \uac83\uc774\ub2e4. \uc0ac\uc2e4 \uc9c4\uc9dc \ubb38\uc81c\ub294 \uad11\uc120\uacfc \ubcbd\uc758 \uad50\ucc28\ub97c \uacc4\uc0b0\ud558\ub294 \ubb38\uc81c\uc778\ub370, \uad11\uc120\uc744 \uc870\uae08\uc529 \uc9c4\ud589\uc2dc\ud0a4\uba74\uc11c \uacc4\uc0b0\ud558\uae30\uc5d0\ub294 \ubcbd\uc744 \ud1b5\uacfc\ud560 \uc218\ub3c4 \uc788\uace0, \uacc4\uc0b0\ub7c9\uc774 \ub9ce\uc544\uc9c8 \uc218\ub3c4 \uc788\ub294 \ubb38\uc81c\uac00 \uc788\ub2e4. \uc774\uc5d0 \ub300\ud55c \ud574\uacb0\ucc45\uc73c\ub85c \uac04\uaca9\uc774 \uc77c\uc815\ud55c 2D \uadf8\ub9ac\ub4dc\uc5d0 \ud53d\uc140\uc544\ud2b8\ucc98\ub7fc \ubcbd\uc744 \uadf8\ub824\ub123\uac8c\ub418\uba74, \uc9c1\uc120\uacfc \uadf8\ub9ac\ub4dc\uc758 \uad50\ucc28\uc810\ub9cc \uc0dd\uac01\ud558\uba74 \ub418\ubbc0\ub85c \ubb38\uc81c\uac00 \ub9e4\uc6b0 \uac04\ub2e8\ud574\uc9c4\ub2e4. \uc774\ub807\uac8c \uad6c\ud604\ud558\ub294 \uacbd\uc6b0, \uac8c\uc784\ub0b4\uc5d0\uc11c \uc2dc\uc57c\ub294 \uc704\uc544\ub798\ub85c \uc774\ub3d9\ud558\ub294\uc2dd\uc758 \uc870\uc808\uc774 \uc548\ub418\ub294 \uc81c\ud55c\uc774 \uc788\ub2e4. \ubb50, \uc2e4\uc81c\ub85c\ub294 2D\ub2c8\uae4c \ub2f9\uc5f0\ud558\uc9c0\ub9cc. \uc5ec\uae30\uc5d0 \ucd94\uac00\uc801\uc73c\ub85c \uc0c1\ud558\uc774\ub3d9\uc744 \uad6c\ud604\ud558\uc5ec \ubc1c\uc804\ub418\uc5b4 \ub098\uc628 \uac83\uc774 DOOM\uc778\ub370, \uae30\ubcf8\uc801\uc73c\ub85c\ub294 \ub3d9\uc77c\ud55c \uc54c\uace0\ub9ac\uc998\uc744 \uc774\uc6a9\ud55c\ub2e4. \uc774\uc5d0 \ub300\ud574\uc11c\ub294 \uaf64 \uc798 \uc124\uba85\ub41c \ud55c\uae00 \uc790\ub8cc\uac00 \uc788\ub2e4. : <a href=\"https:\/\/github.com\/365kim\/raycasting_tutorial\/blob\/master\/1_what_is_raycasting.md\">https:\/\/github.com\/365kim\/raycasting_tutorial\/blob\/master\/1_what_is_raycasting.md<\/a>  \uc544\ub9c8\ub3c4 \uc6d0\ubcf8\uc73c\ub85c \uc0dd\uac01\ub418\ub294 \uc601\uc5b4 \uc790\ub8cc\ub3c4 \uc788\ub2e4. : <a href=\"https:\/\/lodev.org\/cgtutor\/raycasting.html\">https:\/\/lodev.org\/cgtutor\/raycasting.html<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Godot 4\uc5d0\uc11c\uc758 \ub808\uc774\uce90\uc2a4\ud305(Godot3\uc640 \uc0b4\uc9dd \ub2e4\ub984)<\/h3>\n\n\n\n<p> Godot\uc5d0\uc11c \ub808\uc774\uce90\uc2a4\ud305\uc744 \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc744 \uc54c\uc544\ubcf4\uc790. \uc774\uac8c \ubaa9\uc801\uc774\uae30 \ub54c\ubb38\uc5d0 \uc55e\uc5d0\uc11c \ub108\ubb34 \ub300\ucda9 \uc11c\uc220 \ud588\uc9c0\ub9cc, \ud575\uc2ec\uc740 \uad11\uc120\uc744 \uc3f4\uc11c \uc624\ube0c\uc81d\ud2b8\uc640 \ucda9\ub3cc\uc5ec\ubd80\ub97c \uac80\ucd9c\ud558\ub294 \uac83\uc774\ub2e4. \ub80c\ub354\ub9c1\uc774\ub4e0, 2.5D \uac8c\uc784\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774\ub4e0 \uc774 \ucda9\ub3cc\uc744 \uccb4\ud06c\ud558\ub294 \uc54c\uace0\ub9ac\uc998\uc744 \ucd5c\uc801\ud654 \uc2dc\ud0a4\uae30 \uc704\ud574 \ubcc0\ud654\ud55c\ub2e4. 3D \uac8c\uc784\uc5d4\uc9c4\uc5d0\uc11c\ub294 \uc9c1\uc120\uacfc \uc624\ube0c\uc81d\ud2b8\uc758 \ucda9\ub3cc\uccb4\ud06c\ub97c \uac8c\uc784\uc5d4\uc9c4\uc774 \uc54c\uc544\uc11c \ud574\uc900\ub2e4. \uc6b0\ub9ac\ub294 \uad11\uc120\uc744 \uc3d8\uace0 \uac8c\uc784\uc5d4\uc9c4\uc5d0\uac8c \ubb34\uc5c7\uacfc \ucda9\ub3cc\ud588\ub294\uc9c0 \ucffc\ub9ac\ub97c \ud558\uba74 \ub05d\uc774\ub2e4.<\/p>\n\n\n\n<p> Godot \uc5d0\uc11c \ub808\uc774\uce90\uc2a4\ud305\uc758 \uc0ac\uc6a9\uc740 \uacf5\uc2dd \ubb38\uc11c\ub97c \ucc38\uace0\ud560 \uc218 \uc788\ub2e4. <a href=\"https:\/\/docs.godotengine.org\/en\/stable\/tutorials\/physics\/ray-casting.html\">https:\/\/docs.godotengine.org\/en\/stable\/tutorials\/physics\/ray-casting.html<\/a><\/p>\n\n\n\n<p>Godot\uc740 Space\ub77c\ub294 \uacf3\uc5d0 \ub85c\uc6b0 \ub808\ubca8 collision \uc815\ubcf4\ub098 \ubb3c\ub9ac\uc801 \uc815\ubcf4\ub4e4\uc744 \uc800\uc7a5\ud574\ub193\uace0 \uc788\ub2e4. \uc774 \uc0c1\ud0dc\uc815\ubcf4\ub97c \uac00\uc838\uc624\ub824\uba74, space\uc758 rid\ub97c \uc5bb\uc5b4\uc628\ub2e4\uc74c PhysicsServer3D\uc5d0\uac8c \uc774 rid\ub97c \ub118\uaca8\uc8fc\uc5b4 \uc0c1\ud0dc\uc815\ubcf4\ub97c \uac00\uc838\uc62c \uc218 \uc788\ub2e4. \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4. <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"func _physics_process(delta):\n\tvar space_rid = get_world_2d().space\n\tvar space_state = PhysicsServer2D.space_get_direct_state(space_rid)\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">func<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">_physics_process<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">delta<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\t<\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">space_rid<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">get_world_2d<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\">.<\/span><span style=\"color: #D8DEE9\">space<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\t<\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">space_state<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">PhysicsServer2D<\/span><span style=\"color: #D8DEE9FF\">.<\/span><span style=\"color: #88C0D0\">space_get_direct_state<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">space_rid<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p> \uc8fc\uc758\ud560 \uc810\uc740, \ucf54\ub4dc\uc640 \uac19\uc774 _physics_process()\uc5d0\uc11c\ub9cc \uc0ac\uc6a9\ud574\uc57c \ud55c\ub2e4\ub294 \uc810\uc774\ub2e4. Godot\uc758 \ubb3c\ub9ac\uc5d4\uc9c4\uc774 \uba40\ud2f0 \uc4f0\ub808\ub4dc\ub85c \ub3cc \uc218\ub3c4 \uc788\uae30 \ub54c\ubb38\uc5d0 \ub2e4\ub978 \uacf3\uc5d0\uc11c \uc0ac\uc6a9\ud558\uba74 \ubb38\uc81c\uac00 \ub418\uae30 \ub54c\ubb38\uc5d0 space state\uc5d0 \ub77d\uc774 \uac78\ub9b0\ub2e4.<\/p>\n\n\n\n<p>\uc774\uac78 \ub2e4\uc74c\uacfc \uac19\uc774 \uc904\uc5ec\uc11c \uc4f8 \uc218 \uc788\ub2e4. <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"func _physics_process(delta):\n\tvar space_state = get_world_3d().direct_space_state\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">func<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">_physics_process<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">delta<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\t<\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">space_state<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">get_world_3d<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\">.<\/span><span style=\"color: #D8DEE9\">direct_space_state<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\uc774 space_state\uc5d0\uac8c ray\uc640 \uad50\ucc28\ud558\ub294 \ucda9\ub3cc \uc624\ube0c\uc81d\ud2b8\ub4e4\uc744 \ucffc\ub9ac\ub97c \ubcf4\ub0b4 \uc5bb\uc5b4\uc62c \uc218 \uc788\ub2e4. \uadf8\ub7ec\uae30 \uc704\ud574\uc11c \uc6b0\uc120, \uad11\uc120(ray)\uac00 \ud544\uc694\ud558\ub2e4. \ub9c8\uc6b0\uc2a4 \ud074\ub9ad\uc73c\ub85c \uc624\ube0c\uc81d\ud2b8 \ud53c\ud0b9\ud558\ub294 \uc608\ub97c \ub4e4\uc790\uba74, \ub9c8\uc6b0\uc2a4\uac00 \ud074\ub9ad\ud558\ub294 \uc2a4\ud06c\ub9b0\uc0c1\uc758 \uc88c\ud45c\uac00 \uce74\uba54\ub77c \uc2a4\ud06c\ub9b0\uc0c1\uc758 \uc88c\ud45c\uc5d0 \ub300\uc751\ub41c\ub2e4. \uce74\uba54\ub77c\uc758 origin \ud3ec\uc778\ud2b8\ub85c\ubd80\ud130 \uc774 \uce74\uba54\ub77c \uc2a4\ud06c\ub9b0 \uc0c1\uc758 \uc88c\ud45c\ub97c \uc5f0\uacb0\ud574\uc11c \ub098\uc544\uac00\uba74 \uc6b0\ub9ac\uac00 \uc6d0\ud558\ub294 \uad11\uc120(ray)\ub97c \uc5bb\uc744 \uc218 \uc788\ub2e4. <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"var mouse_position: Vector2 = get_viewport().get_mouse_position()\n\t\nray_origin = camera.project_ray_origin(mouse_position) #camera point for perspective \n# project_ray_normal is the direction of ray\nray_target = ray_origin + camera.project_ray_normal(mouse_position)*2000 \" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">mouse_position<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Vector2<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">get_viewport<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\">.<\/span><span style=\"color: #88C0D0\">get_mouse_position<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\t<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">ray_origin<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">camera<\/span><span style=\"color: #D8DEE9FF\">.<\/span><span style=\"color: #88C0D0\">project_ray_origin<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">mouse_position<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\">#camera point for perspective <\/span><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># project_ray_normal is the direction of ray<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">ray_target<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ray_origin<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">camera<\/span><span style=\"color: #D8DEE9FF\">.<\/span><span style=\"color: #88C0D0\">project_ray_normal<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">mouse_position<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #B48EAD\">2000<\/span><span style=\"color: #D8DEE9FF\"> <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>get_vewport()\ub85c\ubd80\ud130 \ub9c8\uc6b0\uc2a4 \uc704\uce58\ub97c \uac00\uc838\uc624\uace0, camera\ub85c\ubd80\ud130 \uce74\uba54\ub77c\uc758 \uc6d0\uc810(origin)\uacfc \uce74\uba54\ub77c \uc2a4\ud06c\ub9b0\uc758 normal vector\ub97c project_ray_progin(), project_ray_normal()\ub85c \uac00\uc838\uc624\uac8c\ub41c\ub2e4. \uad11\uc120\uc758 \uae38\uc774\uac00 \ubb34\ud55c\ud560 \uc218 \uc5c6\uc73c\ubbc0\ub85c, \uc801\ub2f9\ud55c \uae38\uc774\ub97c \uc8fc\uc5b4\uc57c \ud558\ub294\ub370, \uc5ec\uae30\uc11c\ub294 2000\uc744 \uacf1\ud574\uc918\uc11c \uad11\uc120\uc758 \ubca1\ud130\ub97c \ub9cc\ub4e4\uc5c8\ub2e4. \uc774\ub807\uac8c, \uc2dc\uc791(ray_origin)\uacfc \ub05d(ray_target)\uc774 \uc788\ub294 \uad11\uc120\uc744 \uc5bb\uc5c8\ub2e4. <\/p>\n\n\n\n<p>\ud55c\uac00\uc9c0 \uc8fc\uc758 \ud560\uc810\uc740, Perspective view\uc640 Orthogonal view\uc5d0 \ub300\ud574 origin\/target \ubca1\ud130\uac00 \ub2ec\ub77c\uc9c4\ub2e4\ub294 \uc810\uc774\ub2e4.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"300\" src=\"http:\/\/batmask.dothome.co.kr\/wordpress\/wp-content\/uploads\/2024\/02\/raycast_projection.png\" alt=\"\" class=\"wp-image-2221\" srcset=\"http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2024\/02\/raycast_projection.png 500w, http:\/\/batmask.net\/wordpress\/wp-content\/uploads\/2024\/02\/raycast_projection-300x180.png 300w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/figure>\n<\/div>\n\n\n<p>perspective view\uc5d0\uc11c\ub294 ray normal\uc774 \uce74\uba54\ub77c \uc2a4\ud06c\ub9b0\uc5d0 \uc9c1\uad50\ud558\uc9c0 \uc54a\uace0 \ubcc0\ud558\uc9c0\ub9cc, orthogonal view\uc5d0\uc11c\ub294 \uc9c1\uad50\ud558\ubbc0\ub85c \ubc29\ud5a5\ubca1\ud130\uac00 \uc77c\uc815\ud558\uac8c \uc720\uc9c0\ub41c\ub2e4. \ub300\uc2e0\uc5d0 origin \uc704\uce58\uac00 Perspective view\uc5d0\uc11c\ub294 \ud558\ub098\ub85c \uace0\uc815\uc774\uc9c0\ub9cc, Orthogonal\uc5d0\uc11c\ub294 \ub9e4\ubc88 \ub2ec\ub77c\uc9c0\uac8c \ub41c\ub2e4.<\/p>\n\n\n\n<p> \uc774\uc81c \uc774 \uad11\uc120\uc744 \uc774\uc6a9\ud558\uc5ec, \uc55e\uc5d0\uc11c \uc5bb\uc5b4\uc628 space state\uc5d0 \ucffc\ub9ac\ub97c \ubcf4\ub0b4\ubcf4\uc790.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"var query = PhysicsRayQueryParameters3D.create(ray_origin, ray_target)\nvar result = space_state.intersect_ray(query)\nif result:\n\tprint(&quot;Hit at point: &quot;, result.position)\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">query<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">PhysicsRayQueryParameters3D<\/span><span style=\"color: #D8DEE9FF\">.<\/span><span style=\"color: #88C0D0\">create<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">ray_origin<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ray_target<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">result<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">space_state<\/span><span style=\"color: #D8DEE9FF\">.<\/span><span style=\"color: #88C0D0\">intersect_ray<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">query<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">result<\/span><span style=\"color: #D8DEE9FF\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\t<\/span><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #A3BE8C\">&quot;Hit at point: &quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">result<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">position<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\uba3c\uc800 \uad11\uc120\uc758 origin\/target\uc744 \uc774\uc6a9\ud558\uc5ec PhysicsRayQueryParameter3D \ucffc\ub9ac \uc624\ube0c\uc81d\ud2b8\ub97c \ub9cc\ub4e4\uc5c8\ub2e4. \uc774\uac78 space_state.intersect_ray()\uc5d0 \ub118\uaca8\uc8fc\uac8c \ub418\uba74, \uad11\uc120\uacfc \uad50\ucc28\ud558\ub294 collision \uc624\ube0c\uc81d\ud2b8\ub4e4\uc758 \ub515\uc154\ub108\ub9ac\ub97c result\ub85c \ub118\uaca8\uc8fc\uac8c \ub41c\ub2e4. <\/p>\n\n\n\n<p>\uc774 \uacb0\uacfc \ub515\uc154\ub108\ub9ac\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc790\ub8cc\uad6c\uc870\ub97c \uac16\ub294\ub2e4. <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"{\n   position: Vector2 # point in world space for collision\n   normal: Vector2 # normal in world space for collision\n   collider: Object # Object collided or null (if unassociated)\n   collider_id: ObjectID # Object it collided against\n   rid: RID # RID it collided against\n   shape: int # shape index of collider\n   metadata: Variant() # metadata of collider\n}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #D8DEE9\">position<\/span><span style=\"color: #D8DEE9FF\">: <\/span><span style=\"color: #8FBCBB\">Vector2<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\"># point in world space for collision<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #D8DEE9\">normal<\/span><span style=\"color: #D8DEE9FF\">: <\/span><span style=\"color: #8FBCBB\">Vector2<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\"># normal in world space for collision<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #D8DEE9\">collider<\/span><span style=\"color: #D8DEE9FF\">: <\/span><span style=\"color: #8FBCBB\">Object<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\"># Object collided or null (if unassociated)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #D8DEE9\">collider_id<\/span><span style=\"color: #D8DEE9FF\">: <\/span><span style=\"color: #D8DEE9\">ObjectID<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\"># Object it collided against<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #D8DEE9\">rid<\/span><span style=\"color: #D8DEE9FF\">: <\/span><span style=\"color: #8FBCBB\">RID<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\"># RID it collided against<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #D8DEE9\">shape<\/span><span style=\"color: #D8DEE9FF\">: <\/span><span style=\"color: #8FBCBB\">int<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\"># shape index of collider<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #D8DEE9\">metadata<\/span><span style=\"color: #D8DEE9FF\">: <\/span><span style=\"color: #88C0D0\">Variant<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\"># metadata of collider<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uc5ec\uae30\uae4c\uc9c0<\/h3>\n\n\n\n<p>ray casting\uc744 \uc774\ub860\uc801\uc73c\ub85c \ud30c\uba74 \ud6e8\uc52c \ub9ce\uc740 \uc218\ud559\uc801 \ub0b4\uc6a9\uc744 \ub2e4\ub904\uc57c \ud558\uc9c0\ub9cc, \ub0b4\uac00 \uc798 \ubaa8\ub974\uae30\ub3c4 \ud558\uace0, \uc5ec\uae30\uc11c\ub294 Godot4\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ubc29\ubc95\ub9cc \uc8fc\ub85c \ub2e4\ub8e8\uac8c \ub418\uc5c8\ub2e4. \uc77c\ub2e8\uc740 \uc5ec\uae30\uae4c\uc9c0. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ub808\uc774\uce90\uc2a4\ud305(raycasting)\uc774\ub780? \ub9d0 \uadf8\ub300\ub85c \uc4f0\uc790\uba74, \ud55c \uc9c0\uc810\uc5d0\uc11c \uad11\uc120\uc744 \uc3f4\uc11c \uadf8 \uad11\uc120\uc774 \uc5b4\ub518\uac00\uc5d0 \ucda9\ub3cc\ud558\ub294\uc9c0 \uc54c\uc544\ub0b4\ub294 \ubc29\ubc95\uc774\ub2e4. \uc6d0\ub798\ub294 \ub80c\ub354\ub9c1\uc744 \uc704\ud55c \uae30\ubc95\uc73c\ub85c \uc0ac\uc6a9\ub418\uc5c8\ub294\ub370, \ubc18\uc0ac\uac00 \uc5c6\ub294 \ub808\uc774 \ud2b8\ub808\uc774\uc2f1\uc73c\ub85c \uc0dd\uac01\ud560 \uc218\ub3c4 \uc788\uae30 \ub54c\ubb38\uc774\ub2e4. \ub610\ud55c, \uadf8\ub9bc\uc790\ub97c \uacc4\uc0b0\ud558\ub294\ub370 \uc0ac\uc6a9\ub420 \uc218\ub3c4 \uc788\ub2e4. \uc0dd\uac01\ubcf4\ub2e4 \ud65c\uc6a9\ub3c4\uac00 \ub9e4\uc6b0 \ub192\uc544\uc11c, \uac8c\uc784\uc5d0\uc11c \ub9c8\uc6b0\uc2a4 \ud074\ub9ad\uc2dc \uc5b4\ub5a4 \uc624\ube0c\uc81d\ud2b8\uac00 \uc120\ud0dd\ub418\uc5c8\ub294\uc9c0 \uc624\ube0c\uc81d\ud2b8 \ud53c\ud0b9\uc5d0 \uc0ac\uc6a9\ub418\uae30\ub3c4 \ud558\uace0, NPC\uc758 \uc2dc\uc57c\uc5d0 \ud50c\ub808\uc774\uc5b4\uac00 <a href=\"http:\/\/batmask.net\/index.php\/2024\/02\/19\/2210\/\" class=\"btn btn-link continue-link\">\ub354 \uc77d\uae30<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[270],"tags":[271,379,381,380],"class_list":["post-2210","post","type-post","status-publish","format-standard","hentry","category-godot","tag-godot","tag-godot4","tag-ray-casting","tag-raycasting"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/2210","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/comments?post=2210"}],"version-history":[{"count":23,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/2210\/revisions"}],"predecessor-version":[{"id":2236,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/2210\/revisions\/2236"}],"wp:attachment":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/media?parent=2210"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/categories?post=2210"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/tags?post=2210"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}