{"id":260,"date":"2025-05-14T19:39:05","date_gmt":"2025-05-14T10:39:05","guid":{"rendered":"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/?p=260"},"modified":"2025-05-29T10:28:58","modified_gmt":"2025-05-29T01:28:58","slug":"9%ec%a3%bc%ec%b0%a8","status":"publish","type":"post","link":"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/2025\/05\/14\/9%ec%a3%bc%ec%b0%a8\/","title":{"rendered":"9\uc8fc\ucc28"},"content":{"rendered":"\n<p><strong>\u25a0 \uad6c\ud604 \uae30\ub2a5<br><em>&#8211; NPC, \ud50c\ub808\uc774\uc5b4 \ub300\ud654 \uc0c1\ud638\uc791\uc6a9<\/em><\/strong><\/p>\n\n\n\n<p><strong>\u25a0 \uad6c\ud604 \uacfc\uc815<\/strong><\/p>\n\n\n\n<p>1. NPC \uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131<br>\u00b7 NPC \uce90\ub9ad\ud130 \uc774\ubbf8\uc9c0\ub97c Hierarchy \ucc3d\uc5d0 \ub4dc\ub798\uadf8 \ud558\uc5ec \ubc30\uce58<br>\u00b7 BoxCollider2D \ucef4\ud3ec\ub10c\ud2b8\ub97c \ucd94\uac00\ud558\uc5ec \ud074\ub9ad\uc744 \uac10\uc9c0\ud560 \uc218 \uc788\ub3c4\ub85d \uc124\uc815<\/p>\n\n\n\n<p>2. \ub300\ud654 UI \uc81c\uc791 (DialoguePanel)<br>\u00b7 Canvas \uc548\uc5d0 [DialoguePanel] \uc0dd\uc131<br>\u00b7 \uadf8 \uc548\uc5d0 TextMeshPro \ud14d\uc2a4\ud2b8(DialogueText) \ucd94\uac00<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"163\" height=\"54\" src=\"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/wp-content\/uploads\/sites\/50\/2025\/05\/image.png\" alt=\"\" class=\"wp-image-265\" \/><\/figure>\n\n\n\n<p>3. DialogueManager \uc2a4\ud06c\ub9bd\ud2b8 \uc791\uc131<br>\u00b7 ShowDialogue()\uc640 HideDialogue() \ud568\uc218\ub97c \ud1b5\ud574 \ub300\ud654\ucc3d\uc744 \ucf1c\uace0 \ub044\ub294 \uae30\ub2a5 \uad6c\ud604<br>\u00b7 IsDialogueVisible() \ud568\uc218\ub97c \ud1b5\ud574 \ud604\uc7ac \ub300\ud654\ucc3d\uc758 \uc0c1\ud0dc\ub97c \ud655\uc778\ud560 \uc218 \uc788\ub3c4\ub85d \uad6c\ud604<br>(NPC\ub97c \ub2e4\uc2dc \ud074\ub9ad\ud588\uc744 \ub54c \ub300\ud654\ucc3d\uc744 \ub2eb\uae30 \uc704\ud55c \uc870\uac74\uc73c\ub85c \uc0ac\uc6a9)<\/p>\n\n\n\n<p class=\"has-small-font-size\">[DialogueManager.cs]<br><br>using UnityEngine;<br>using TMPro;<br><br>public class DialogueManager : MonoBehaviour<br>{<br>     public GameObject dialoguePanel;          \/\/ \ub300\ud654 UI \ud328\ub110<br>     public TextMeshProUGUI dialogueText;          \/\/ \ub300\uc0ac \ud45c\uc2dc \ud14d\uc2a4\ud2b8<br>     <br>     public static DialogueManager instance;           \/\/ \uc2f1\uae00\ud1a4 (\uc804\uc5ed \uc811\uadfc\uc6a9)<br> <br>      private void Awake()<br>      {<br>         \/\/ \uc774 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc804\uc5ed\uc5d0\uc11c \uc811\uadfc\ud560 \uc218 \uc788\ub3c4\ub85d \uc124\uc815<br>         if (instance == null)<br>         {<br>              instance = this; <br>         }<br>         else<br>         {<br>               Dsetroy(gameObject);<br>          }<br>       }<br><br>         public void ShowDialogue(string sentence)<br>         {<br>              dialoguePanel.SetActive(true);            \/\/ \ub300\ud654\ucc3d \ubcf4\uc774\uae30<br>              dialogueText.text = sentence;            \/\/ \ud14d\uc2a4\ud2b8 \ub123\uae30<br>          }<br><br>          public void HideDialogue()<br>          {<br>               reuturn dialoguePanel.activeSelf;     \/\/ \ud074\ub9ad\ud558\uba74 \ub300\ud654\ucc3d \uc228\uae30\uae30<br>           }<br>       }<\/p>\n\n\n\n<p>4. NPCClick \uc2a4\ud06c\ub9bd\ud2b8 \uc791\uc131<br>\u00b7 NPC\ub97c \ud074\ub9ad\ud588\uc744 \ub54c \ub300\ud654\ucc3d\uc774 \uc5f4\ub9ac\ub3c4\ub85d \uad6c\ud604<br>\u00b7 \ub300\ud654\ucc3d\uc774 \uc5f4\ub824\uc788\uc744 \ub54c \ub2e4\uc2dc \ud074\ub9ad \uc2dc \ub300\ud654\ucc3d\uc774 \ub2eb\ud788\ub3c4\ub85d \uad6c\ud604<br>\u00b7 \ub300\ud654 \ud14d\uc2a4\ud2b8\ub294 \ubb38\uc790\uc5f4 \ubcc0\uc218\ub85c \uc120\uc5b8\ud558\uc5ec \uc124\uc815 \uac00\ub2a5<\/p>\n\n\n\n<p class=\"has-small-font-size\">[NPCClick.cs]<\/p>\n\n\n\n<p class=\"has-small-font-size\">using UnityEngine;<\/p>\n\n\n\n<p class=\"has-small-font-size\">public class NPCClick : MonoBehaviour<br>{<br>public string dialogueLine = &#8220;\uc548\ub155! \ucc98\uc74c \ubcf4\ub294 \uc5bc\uad74\uc774\ub124? \uc5ec\uae34 \uc815\ub9d0 \ud3c9\ud654\ub85c\uc6b4 \uacf3\uc774\uc57c. \uc774 \ub9c8\uc744\uc5d0 \uc628 \uac78 \ud658\uc601\ud574. \uc528\uc557\ucc98\ub7fc \uc791\uac8c \uc2dc\uc791\ud574\uc11c, \ud06c\uac8c \uc790\ub77c\ub098\uae38!&#8221;;<\/p>\n\n\n\n<p class=\"has-small-font-size\">private void OnMouseDown()<br>{<br>   \/\/ DialogueManager \uc778\uc2a4\ud134\uc2a4\uac00 \uc788\uc744 \ub54c<br>   if (DialogueManager.instance != null)<br>   {<br>       \/\/ \ub300\ud654\ucc3d\uc774 \ucf1c\uc838 \uc788\uc73c\uba74 \ub044\uae30<br>       if (DialogueManager.instance.IsDialogueVisible())<br>       {<br>           DialogueManager.instance.HideDialogue();<br>        }<br>       else<br>       {<br>           DialogueManager.instance.ShowDialogue(dialogueLine);<br>        }<br>     }<br>   }<br>}<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>\u25a0 \uc791\ub3d9\ubc29\uc2dd<br>\u00b7 \uc2e4\ud589 \uc2dc, NPC\ub97c \ud074\ub9ad\ud558\uba74 DialogueManager\uc758 ShowDialogue()\uac00 \ud638\ucd9c\ub418\uc5b4 \ub300\ud654\ucc3d\uc774 \ub098\ud0c0\ub0a8<br>\u00b7 \uac19\uc740 NPC\ub97c \ub2e4\uc2dc \ud074\ub9ad\ud558\uba74 IsDialogueVisible()\uc744 \ud1b5\ud574 \ub300\ud654\ucc3d \uc0c1\ud0dc\ub97c \ud655\uc778\ud55c \ub4a4 HideDialogue()\ub97c \ud638\ucd9c\ud558\uc5ec \ub300\ud654\ucc3d\uc744 \ub2eb\uc74c<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"720\" style=\"aspect-ratio: 654 \/ 720;\" width=\"654\" controls src=\"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/wp-content\/uploads\/sites\/50\/2025\/05\/\ud658\uc601-\uc0c1\ud638\uc791\uc6a9.mp4\"><\/video><\/figure>\n\n\n\n<p>\u25a0 \uc5d0\ub7ec \ubc1c\uacac \ubc0f \ud574\uacb0<\/p>\n\n\n\n<p>\ud14d\uc2a4\ud2b8\uac00 \uae68\uc838\uc11c \ud45c\uc2dc\ub428 (\u25a1\u25a1!)<br>\u00b7 \uc6d0\uc778 : \uae30\ubcf8 \ud3f0\ud2b8\uac00 \ud55c\uae00\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc544 \uae00\uc790\uac00 \uae68\uc9d0<br>\u00b7 \ud574\uacb0 \ubc29\ubc95 : \ud55c\uae00\uc744 \uc9c0\uc6d0\ud558\ub294 \ud3f0\ud2b8\ub97c \uc0c8\ub85c \uc784\ud3ec\ud2b8\ud55c \ub4a4, TextMeshPro\uc758 Font Asset\uc5d0 \ud574\ub2f9 \ud3f0\ud2b8 \uc801\uc6a9<\/p>\n\n\n\n<p>UI \uc624\ube0c\uc81d\ud2b8\uac00 Inspector\uc5d0 \uc5f0\uacb0\ub418\uc9c0 \uc54a\uc74c<br>\u00b7 \uc5d0\ub7ec \uba54\uc2dc\uc9c0 : UnassignedReferenceException: The variable dialoguePanel of DialogueManager has not been assigned.<br>\u00b7 \uc6d0\uc778 : DialogueManager \uc2a4\ud06c\ub9bd\ud2b8\uc5d0\uc11c dialoguePanel \ubcc0\uc218\uc5d0 Unity Editor\uc5d0\uc11c \uc624\ube0c\uc81d\ud2b8\ub97c \ub4dc\ub798\uadf8\ud558\uc5ec \uc5f0\uacb0\ud558\uc9c0 \uc54a\uc558\uae30 \ub54c\ubb38.<br>\u00b7 \ud574\uacb0 \ubc29\ubc95 : Hierarchy \ucc3d\uc5d0 \uc788\ub294 DialoguePanel \uc624\ube0c\uc81d\ud2b8\ub97c DialogueManager\uc758 dialoguePanel \uc2ac\ub86f\uc5d0 \uc9c1\uc811 \ub4dc\ub798\uadf8\ud558\uc5ec \uc5f0\uacb0\ud568<\/p>\n\n\n\n<p>\u25a0 \ub9f5, NPC \uc774\ub3d9<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"1000\" style=\"aspect-ratio: 1920 \/ 1000;\" width=\"1920\" controls src=\"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/wp-content\/uploads\/sites\/50\/2025\/05\/\uc804\ud658.mp4\"><\/video><figcaption class=\"wp-element-caption\">\uae30\ubcf8 \ub9f5 -&gt; \uc774\ubca4\ud2b8 \ub9f5<\/figcaption><\/figure>\n\n\n\n<p>\ub9f5 -&gt; \ub9f5 \uc804\ud658 \ud6a8\uacfc \ub123\uc74c + \uce74\uba54\ub77c\uac00 \ud50c\ub808\uc774\uc5b4\ub97c \uc790\ub3d9\uc73c\ub85c \ub530\ub77c\uac10<\/p>\n\n\n\n<p>\uc774\ub3d9\uc740 \ubb38\uc81c\uac00 \uc5c6\uc74c \ud558\uc9c0\ub9cc \uc7a0\uae50 \uc5b4\ub450\uc6cc\uc9c0\ub294 \ud6a8\uacfc\ub97c \ub123\uae30\uc704\ud574 \ud310\ub12c\uc744 \uc0ac\uc6a9\ud558\uc600\uc9c0\ub9cc<\/p>\n\n\n\n<p>\ud6a8\uacfc\uac00 \uc81c\ub300\ub85c \ub098\uc624\uc9c0 \uc54a\ub294 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud568 \/\/ \uae08\ubc29 \uace0\uce68<\/p>\n\n\n\n<p>\ud55c \ubc29\ud5a5\uc73c\ub85c\ub9cc \uac08 \uc218 \uc788\uac8c \uc124\uc815\ud574\ub460<\/p>\n\n\n\n<p>\uac14\ub358 \uacf3\uc5d0\uc11c \ub2e4\uc2dc \ub3cc\uc544\uc624\uae30 X<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>\uce74\uba54\ub77c\uac00 \ud50c\ub808\uc774\uc5b4\ub97c \uc790\ub3d9\uc73c\ub85c \ub530\ub77c\uac00\uba74\uc11c \uce74\uba54\ub77c\uc5d0 \ub9f5\uc774 \uc544\ub2cc \uacf3\uc774 \uac19\uc774 \ub178\ucd9c\uc774 \ub428<\/p>\n\n\n\n<p>\ud06c\uae30\ub97c \uc870\uc808\ud558\uace0 \ub530\ub77c\ub2e4\ub2c8\uac8c \ud574\ubcf4\uc558\uc9c0\ub9cc \uac19\uc740 \uacf3\uc5d0 \uba38\ubb3c\uae30 \ud639\uc740<\/p>\n\n\n\n<p>\ud50c\ub808\uc774\uc5b4\uac00 \ud654\uba74\uc5d0\uc11c \uc0ac\ub77c\uc9c0\ub294 \ud604\uc0c1\uc774 \ubc1c\uc0dd\ud574\ubc84\ub9bc<\/p>\n\n\n\n<p>\uc77c\ub2e8\uc740 \uc9c0\uc6b0\uae30\ub85c \uacb0\uc815\ud558\uc5ec \uc601\uc0c1\uacfc \uac19\uc544\uc9d0<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>\ub2e4\uc74c\uc8fc\uae4c\uc9c0<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ubaa8\ub4e0 \ub9f5 \uc0ac\ubb3c , \ud50c\ub808\uc774\uc5b4 \ucda9\ub3cc \ubc29\uc9c0 (4\uac1c \ub0a8\uc74c)<\/li>\n\n\n\n<li>\ubaa8\ub4e0 \ub9f5 \uac04 \uc654\ub2e4 \uac14\ub2e4 \uac00\ub2a5\ud558\uac8c \ub9cc\ub4e4\uae30<\/li>\n\n\n\n<li>\ud50c\ub808\uc774\uc5b4\uc640 NPC\uac04 \uc0c1\ud638\uc791\uc6a9 UI \ub354 \uc644\uc131\ub3c4 \ub192\uc774\uae30<\/li>\n\n\n\n<li>\ud654\uba74\uc5d0 \ub9f5\uc774 \uc544\ub2cc \ub2e4\ub978 \ubc30\uacbd \ub178\ucd9c\ud558\uc9c0 \uc54a\ub3c4\ub85d \uc124\uc815\ud558\uae30<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u25a0 \uad6c\ud604 \uae30\ub2a5&#8211; NPC, \ud50c\ub808\uc774\uc5b4 \ub300\ud654 \uc0c1\ud638\uc791\uc6a9 \u25a0 \uad6c\ud604 \uacfc\uc815 1. NPC \uc624\ube0c\uc81d\ud2b8 \uc0dd\uc131\u00b7 NPC \uce90\ub9ad\ud130 \uc774\ubbf8\uc9c0\ub97c Hierarchy \ucc3d\uc5d0 \ub4dc\ub798\uadf8 \ud558\uc5ec \ubc30\uce58\u00b7 BoxCollider2D \ucef4\ud3ec\ub10c\ud2b8\ub97c \ucd94\uac00\ud558\uc5ec \ud074\ub9ad\uc744 \uac10\uc9c0\ud560 \uc218 \uc788\ub3c4\ub85d \uc124\uc815 2. \ub300\ud654 UI \uc81c\uc791 (DialoguePanel)\u00b7 Canvas \uc548\uc5d0 [DialoguePanel] \uc0dd\uc131\u00b7 \uadf8 \uc548\uc5d0 TextMeshPro \ud14d\uc2a4\ud2b8(DialogueText) \ucd94\uac00 3. DialogueManager \uc2a4\ud06c\ub9bd\ud2b8 \uc791\uc131\u00b7 ShowDialogue()\uc640 HideDialogue() \ud568\uc218\ub97c \ud1b5\ud574 \ub300\ud654\ucc3d\uc744 \ucf1c\uace0 \ub044\ub294\u2026 <span class=\"read-more\"><a href=\"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/2025\/05\/14\/9%ec%a3%bc%ec%b0%a8\/\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":50,"featured_media":270,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[3],"tags":[],"class_list":["post-260","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-3"],"jetpack_featured_media_url":"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/wp-content\/uploads\/sites\/50\/2025\/05\/\ucea1\ucc98.png","_links":{"self":[{"href":"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/wp-json\/wp\/v2\/posts\/260","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/wp-json\/wp\/v2\/users\/50"}],"replies":[{"embeddable":true,"href":"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/wp-json\/wp\/v2\/comments?post=260"}],"version-history":[{"count":0,"href":"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/wp-json\/wp\/v2\/posts\/260\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/wp-json\/wp\/v2\/media\/270"}],"wp:attachment":[{"href":"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/wp-json\/wp\/v2\/media?parent=260"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/wp-json\/wp\/v2\/categories?post=260"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/wp-json\/wp\/v2\/tags?post=260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}