{"id":277,"date":"2025-05-16T13:31:02","date_gmt":"2025-05-16T04:31:02","guid":{"rendered":"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/?p=277"},"modified":"2025-05-21T19:41:22","modified_gmt":"2025-05-21T10:41:22","slug":"10%ec%a3%bc%ec%b0%a8","status":"publish","type":"post","link":"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/2025\/05\/16\/10%ec%a3%bc%ec%b0%a8\/","title":{"rendered":"10\uc8fc\ucc28"},"content":{"rendered":"\n<p><strong>\u25a0 \uad6c\ud604 \uae30\ub2a5<\/strong><\/p>\n\n\n\n<p>+ \ud074\ub9ad\uc2dc \uce74\uba54\ub77c\uac00 \ud655\ub300 \ub418\ub294 \uae30\ub2a5 \ucd94\uac00<br>\u00b7 NPC \ud074\ub9ad \uc2dc \ub300\ud654\ucc3d(UI) \ud45c\uc2dc<br>\u00b7 \uc120\ud0dd\uc9c0 \ubc84\ud2bc \ud074\ub9ad\uc5d0 \ub530\ub77c \ub2e4\uc74c \ub300\ud654 \ud750\ub984\uc774 \ubcc0\ud654<\/p>\n\n\n\n<p><strong>\u25a0 \uad6c\ud604 \uacfc\uc815<\/strong><br>\uc52c \uad6c\ud604 \uacfc\uc815\uc740 9\uc8fc\ucc28\uc640 \ub3d9\uc77c<\/p>\n\n\n\n<p><strong><em>1.[DialogueNode] ScriptableObject \uc0dd\uc131<\/em><\/strong><br>\u00b7 \ub300\uc0ac\uc640 \uc120\ud0dd\uc9c0\ub97c \ud558\ub098\uc758 ScriptableObject(DialogueNode)\ub85c \uad00\ub9ac<br>\u00b7 \uc120\ud0dd\uc9c0\ub294 \ud14d\uc2a4\ud2b8\uc640 \uc5f0\uacb0\ub420 \ub2e4\uc74c \ub178\ub4dc\ub97c \ub9ac\uc2a4\ud2b8\ub85c \uc800\uc7a5<\/p>\n\n\n\n<p><strong>[DialogueNode.cs]<\/strong><br>[CreateAssetMenu(fileName = &#8220;New Dialogue Node&#8221;, menuName = &#8220;Dialogue\/Node&#8221;)]<br>public class DialogueNode : ScriptableObject<br>{<br>    public string text;<br>    public List options;<br><br>    [System.Serializable]<br>    public class Option<br>    {<br>        public string optionText;<br>        public DialogueNode nextNode;<br>    }<br> }<\/p>\n\n\n\n<p>* \ubcc4\ub3c4\uc758 DialogueOption.cs \uc2a4\ud06c\ub9bd\ud2b8\ub97c \ub9cc\ub4e4\uc9c0 \uc54a\uace0, DialogueNode \uc548\uc5d0 Option \ud074\ub799\uc2a4\ub97c \ub0b4\ubd80 \ud074\ub798\uc2a4\ub85c \uc120\uc5b8\ud558\uc5ec \uac04\uacb0\ud55c \uad6c\uc870\ub85c \uad6c\ud604<\/p>\n\n\n\n<p><strong><em>2. DialogueManager2.cs &#8211; \ub300\ud654\ucc3d \uc81c\uc5b4 \uc2a4\ud06c\ub9bd\ud2b8<\/em><\/strong><br>\u00b7 \ub300\ud654 UI \ud328\ub110\uc744 \uad00\ub9ac\ud558\uace0, \uc120\ud0dd\uc9c0\ub97c \ub3d9\uc801\uc73c\ub85c \ud45c\uc2dc<br>\u00b7 \uc120\ud0dd\uc9c0\ub97c \ud074\ub9ad\ud558\uba74 \uc5f0\uacb0\ub41c \ub2e4\uc74c \ub178\ub4dc\ub97c \uc2e4\ud589\ud558\uac70\ub098 \uc885\ub8cc<br>\u00b7 \uc2f1\uae00\ud134 \ud328\ud134\uc73c\ub85c \uc804\uc5ed \uc811\uadfc \uac00\ub2a5\ud558\uac8c \uad6c\uc131<\/p>\n\n\n\n<p>[DialogueManager2.cs ]<br>using System.Collections.Generic;<br>using UnityEngine;<br>using UnityEngine.UI;<br>using TMPro;<\/p>\n\n\n\n<p>public class DialogueManager2 : MonoBehaviour<br>{<br>    public static DialogueManager2 instance;<br>    public TMP_Text dialogueText;<br>    public List&lt;Button&gt; optionButtons;<br><br>    [Header(&#8220;\ub300\uc0ac \ub370\uc774\ud130&#8221;)]<br>    private DialogueNode currentNode;<br>    <br>    private void Awake()<br>    {<br>        if(instance == null)<br>           instance = this;<br>        else<br>           Destory(gameObject);<br>       <br>        dialoguePanel.SetActive(false);<\/p>\n\n\n\n<p>public void ShowNode(DialogueNode node)<br>{<br>    currentNode = node;<br>    dialoguePanel.SetActive(true);<br>    dialogueText.text = node.text;<br><br>    for (int i = 0; i &lt; optionButtons.Count; i++)<br>    {<br>        if (i &lt; node.options.Count)<br>        {<br>            optionButtons[i].gameObject.SetActive(true);<br>            optionButtons[i].GetComponentlnChildren&lt;TMP_Text&gt;().text = node.options[i].optionText;<br><br>            int index = i;   \/\/ \ud074\ub85c\uc800 \uc624\ub958 \ubc29\uc9c0<br>            optionButtons[i].onClick.RemoveAllListeners();<br>            optionButtons[i].onClick.AddListener(() =&gt; OnOptionSelected(node.options[index]));<br>        }<br>        else<br>        {<br>            optionButtons[i].gameObject.SetActive(false);<br>        }<br>    }<br>}<br><br><strong><em>3. NPCClick.cs &#8211; NPC \ud074\ub9ad \uc2dc \ub300\ud654 \ud638\ucd9c \uc2a4\ud06c\ub9bd\ud2b8 ( 9\uc8fc\ucc28 \ub3d9\uc77c )<\/em><\/strong><\/p>\n\n\n\n<p>\u00b7 NPC \uc624\ube0c\uc81d\ud2b8\uc5d0 \ubd99\uc5ec\uc11c \ub9c8\uc6b0\uc2a4 \ud074\ub9ad \uc2dc DialogueManager2\ub97c \ud638\ucd9c<\/p>\n\n\n\n<p>[NPCClick.cs]<br>public class NPCClick2 : MonoBehaviour<br>{<br>    public DialogueNode startingNode;<br><br>    private void OnMouseDown()<br>    {<br>        if  (DialogueManager2.instance != null)<br>        {<br>            if (DialogueManager2.instance.lsDialogueVisible())<br>                DialogueManager2.instance.HideDialogue();<br>            else<br>                DialogueManager2.instance.ShowNode(startingNode);<br>        }<br>    }<br>}<\/p>\n\n\n\n<p><strong><em>4. \uc5f0\uacb0\ud558\uae30 (inspector)<\/em><\/strong><br>4.1 DialogueManager \uc624\ube0c\uc81d\ud2b8\uc5d0 DialogueManager.cs \uc2a4\ud06c\ub9bd\ud2b8 \ucd94\uac00<\/p>\n\n\n\n<p>4.2 \uc544\ub798 \ud56d\ubaa9\uc744 \ub4dc\ub798\uadf8 \ud574\uc11c \uc5f0\uacb0<br>\u00b7 Dialogue Panel -&gt; DialoguePanel<br>\u00b7 Dialogue Text -&gt; DialogueText<br>\u00b7 Option Buttons -&gt; Option1, Option2 \ubc84\ud2bc \ubc30\uc5f4\ub85c \ucd94\uac00<\/p>\n\n\n\n<p>4.3 NPC\uc5d0 NPCClick.cs \ucd94\uac00<br>\u00b7 firstNode\uc5d0 \ucc98\uc74c \ub098\uc62c DialogueNode\ub97c \ub4dc\ub798\uadf8\ud574\uc11c \uc5f0\uacb0<\/p>\n\n\n\n<p>4.4 Assets\uc5d0\uc11c \uc6b0\ud074\ub9ad -&gt; Create &gt; Dialogue &gt; Node\ub85c \ub300\ud654 \ub178\ub4dc \uc0dd\uc131<br>\u00b7 npcText\uc5d0 \ud14d\uc2a4\ud2b8 \uc785\ub825<br>\u00b7 options \ubc30\uc5f4\ub85c \uc120\ud0dd\uc9c0 \uc785\ub825<br>\u00b7 \uac01 \uc120\ud0dd\uc9c0\uc758 nextNode\uc5d0 \ub2e4\uc74c \ub178\ub4dc \uc5f0\uacb0<\/p>\n\n\n\n<p><strong><em>5. 4.4 Assets\uc5d0\uc11c \uc6b0\ud074\ub9ad -&gt; Create &gt; Dialogue &gt; Node\ub85c \ub300\ud654 \ub178\ub4dc \uc0dd\uc131 \uacfc\uc815 (Node1)<\/em><\/strong><br>\u00b7 Assets\uc5d0\uc11c \uc6b0\ud074\ub9ad -&gt; Create &gt; Dialogue &gt; Node\ub85c \ub300\ud654 \ub178\ub4dc \uc0dd\uc131<br>\u00b7 DialogueNode \uc778\uc2a4\ud399\ud130 \ucc3d\uc5d0\uc11c \uc124\uc815 (Node1\uc758 Inspector\ucc3d)<br>Text &#8211; NPC\uac00 \ub9d0\ud560 \ub300\uc0ac\ub97c \uc785\ub825\ud558\ub294 \uce78<br>\u00b7 Options &#8211; \uc120\ud0dd\uc9c0 \ub9ac\uc2a4\ud2b8, \uba87 \uac1c\ub97c \ub9cc\ub4e4\uc9c0 \uc124\uc815\ud558\uace0 \uac01\uac01 \ub0b4\uc6a9\uc744 \uc785\ub825<\/p>\n\n\n\n<p>5.2. NPC \ub300\uc0ac \uc785\ub825\ud558\uae30 (Text)<br>\u00b7 Text \uce78\uc5d0 NPC\uac00 \ud50c\ub808\uc774\uc5b4\uc5d0\uac8c \ub9d0\ud560 \ubb38\uc7a5 \uc785\ub825<\/p>\n\n\n\n<p>5.3. \uc120\ud0dd\uc9c0(Options) \uc124\uc815<br>\u00b7 Options \ud544\ub4dc \uc624\ub978\ucabd\uc5d0 \uc788\ub294 \uc791\uc740 \uc0bc\uac01\ud615\uc744 \ub20c\ub7ec \ubc30\uc5f4 \ud06c\uae30 \uc9c0\uc815<br>\uc608) 2\ub85c \uc124\uc815\ud558\uba74 \uc120\ud0dd\uc9c0 2\uac1c \uc0dd\uc131<br>\u00b7 \uac01 \uc120\ud0dd\uc9c0 \ud56d\ubaa9\uc5d0 \uc544\ub798 \ub0b4\uc6a9 \ucc44\uc6b0\uae30<br>OptionText &#8211; \ud50c\ub808\uc774\uc5b4\uac00 \uc120\ud0dd\ud560 \uc120\ud0dd\uc9c0 \ubb38\uad6c<br>NextNode &#8211; \uc774 \uc120\ud0dd\uc9c0\ub97c \uace0\ub974\uba74 \uc774\uc5b4\uc9c8 \ub2e4\uc74c DialogueNode \uc5d0\uc14b \ucc38\uc870<\/p>\n\n\n\n<p>5.4. \ub2e4\uc74c \ub178\ub4dc \uc5f0\uacb0<br>\u00b7 NextNode \ud544\ub4dc\uc5d0 \ub9c8\uc6b0\uc2a4\ub97c \ud074\ub9ad\ud558\uba74, Assets \ud3f4\ub354 \ub0b4\uc5d0 \uc0dd\uc131\ub41c \ub2e4\ub978 DialogueNode \uc5d0\uc14b \ub9ac\uc2a4\ud2b8\uac00 \ub098\uc634<br>\u00b7 \uc5f0\uacb0\ud558\ub824\ub294 \ub2e4\uc74c \ub178\ub4dc\ub97c \ub4dc\ub798\uadf8\ud558\uac70\ub098 \uc120\ud0dd\ud574\uc11c \ub123\uae30<\/p>\n\n\n\n<p>5.5. \uc608\uc2dc \ud750\ub984 \ub9cc\ub4e4\uae30<br>\u00b7 Node1<br>&#8211; Text : &#8220;Good afternoon May I help you?&#8221;<br>&#8211; Options :<br>        \u00b7 Option 0<br>              \u00b7 OptionText : &#8220;Hi!&#8221;<br>              \u00b7 NextNode : Node2 (\ub2e4\uc74c \ub178\ub4dc)<br>        \u00b7 Option 1<br>              \u00b7 OptionText : &#8220;good bye&#8221;<br>              \u00b7 NextNode : null (\ub300\ud654 \uc885\ub8cc)<br>\u00b7 Node2<br>&#8211; Text : &#8220;Have a nice day!&#8221;<br>&#8211; Options : \ube48 \ubc30\uc5f4 \ub610\ub294 \uc885\ub8cc<\/p>\n\n\n\n<p>5.6 [DialogueNode.cs] : Dialogue &gt; Node \uc0dd\uc131\uc744 \uc704\ud574 \uc0ac\uc6a9<br>using System.Collections.Generic;<br>using UnityEngine;<\/p>\n\n\n\n<p>[CreateAssetMenu(fileName = &#8220;NewNode&#8221;, menuName = &#8220;Dialogue\/Node&#8221;)]<br>public class DialogueNode : ScriptableObject<br>{<br>    [TextArea(3, 10)]<br>    public string text;<br><br>    public List&lt;DialogueOption&gt; options = new List&lt;DialogueOption&gt;();<br>}<\/p>\n\n\n\n<p>[System.Serializable]<br>public class DialogueOption<br>{<br>    public string optionText;<br>    public DialogueNode nextNode;<br>}<\/p>\n\n\n\n<p><strong><em>7. NPC \uc624\ube0c\uc81d\ud2b8\uc5d0 \uc5f0\uacb0\ub41c \uccab \ub178\ub4dc \uc9c0\uc815<\/em><\/strong><br>\u00b7 NPC GameObject\uc5d0 \ubd99\uc778 NPCClick.cs \ucef4\ud3ec\ub10c\ud2b8\uc758 firstNode \ud544\ub4dc\uc5d0 \ub300\ud654 \uc2dc\uc791\ud560 \ub178\ub4dc(Node1)\ub97c \ub4dc\ub798\uadf8 \uc564 \ub4dc\ub86d\uc73c\ub85c \ub123\uc5b4\uc8fc\uae30<\/p>\n\n\n\n<p><strong><em>8. \uc678 \uc0ac\uc6a9\ud55c scripts<\/em><\/strong><\/p>\n\n\n\n<p>&#8211; [Dialogue.cs] : startingNode\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud55c \uc2a4\ud06c\ub9bd\ud2b8<br>using UnityEngine;<\/p>\n\n\n\n<p>[CreateAssetMenu(fileName = &#8220;NewDialogue&#8221;, menuName = &#8220;Dialogue&#8221;)]<br>public class Dialogue : ScriptableObject<br>{<br>public string dialogueName;<br>public DialogueNode[] nodes;<br>}<\/p>\n\n\n\n<p>+ \ud074\ub9ad\uc2dc \uce74\uba54\ub77c\uac00 \ud655\ub300 \ub418\ub294 \uae30\ub2a5 \ucd94\uac00<\/p>\n\n\n\n<p>8.1. [NPCClick2.cs] \ucf54\ub4dc \uc218\uc815<\/p>\n\n\n\n<p>using UnityEngine;<\/p>\n\n\n\n<p>public class NPCClick2 : MonoBehaviour<br>{<br>    public DialogueNode startingNode;<br>    public Camera mainCamera; \/\/ \uce74\uba54\ub77c \uc5f0\uacb0<br>    public float zoomedInSize = 3f; \/\/ \uc90c\uc778 \uc2dc \ud06c\uae30<br>    private float originalSize; \/\/ \uc6d0\ub798 \ud06c\uae30 \uc800\uc7a5<br><br>    private void Start()<br>    {<br>        if (mainCamera == null)<br>        {<br>             mainCamera = Camera.main;<br>        }<br>        originalSize = mainCamera.orthographicSize;<br>    }<br>   <br>    private void OnMouseDown()<br>    {<br>        if (DialogueManager2.instance != null)<br>        {<br>            if (DialogueManager2.instance.lsDialogueVisible())<br>            {<br>                 DialogueManager2.instance.HideDialogue();<br>                 mainCamera.orthographicSize = originalSize;    \/\/ \uce74\uba54\ub77c \uc6d0\ub798\ub300\ub85c<br>             }<br>             else<br>             {<br>                 DialogueManager2.instance.ShowNode(startingNode);<br>                 mainCamera.orthographicSize = zoomedlnSize;    \/\/ \uce74\uba54\ub77c \ud655\ub300<br>              }<br>         }<br>    }<br>}<\/p>\n\n\n\n<p>8.2. NPC Inspector &gt; NPC Click2 (Script) &gt; Main Camera &gt; Hierarchy\uc5d0\uc11c Main Camera \ub4dc\ub798\uadf8<\/p>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<p><strong>\u25a0 \uc5d0\ub7ec \ubc1c\uacac \ubc0f \ud574\uacb0<\/strong><\/p>\n\n\n\n<p>1. \uc2e4\ud589\uc774 \ub418\uc9c0 \uc54a\uc74c &#8211; C# \uc2a4\ud06c\ub9bd\ud2b8\uc5d0 \ubb38\ubc95 \uc624\ub958(\ucef4\ud30c\uc77c \uc5d0\ub7ec)<br>\u00b7 \uc5d0\ub7ec \uba54\uc2dc\uc9c0 : All compiler errors have to be fixed before you can enter palymode!<br>\u00b7 \uc6d0\uc778 : DialogueOption.cs \uc5c6\uc774 \ub0b4\ubd80 \ud074\ub798\uc2a4\ub97c \uc4f8 \ub54c \ubc1c\uc0dd\ud55c \ubb38\ubc95 \uc624\ub958<br>&#8211; DialogueNode.cs \uc5d0\uc11c \uc120\ud0dd\uc9c0\ub97c \ub530\ub85c DialogueOption \ud074\ub798\uc2a4\ub85c \ubd84\ub9ac\ud558\uc9c0 \uc54a\uace0 Option \uc774\ub77c\ub294 \ub0b4\ubd80 \ud074\ub798\uc2a4\ub85c \uc815\uc758 \ud588\ub294\ub370,<br>&#8211; DialogueManager2.cs\uc5d0\uc11c DialogueOption\uc744 \ucc38\uc870\ud558\ub294 \ucf54\ub4dc\uac00 \uc5ec\uc804\ud788 \ub0a8\uc544 \uc788\uc5b4\uc11c \uc815\uc758\ub418\uc9c0 \uc54a\uc740 \ud074\ub798\uc2a4 \uc624\ub958 \ubc1c\uc0dd<br>\u00b7 \ud574\uacb0 \ubc29\ubc95 : DialogueOption.cs\ub97c \uc4f0\uc9c0 \uc54a\uae30\ub85c \ud558\uace0, DialogueNode.Option \uc73c\ub85c \ucf54\ub4dc \uc218\uc815<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<p>2. ScriptableObject \uc0dd\uc131 \uba54\ub274 \ub178\ucd9c \uc624\ub958 \ud574\uacb0<br>Assets &gt; create &gt; dialoge &gt; Node \uba54\ub274\uac00 \ub098\ud0c0\ub098\uc9c0 \uc54a\ub294 \ubb38\uc81c \ubc1c\uc0dd<br>\u00b7 \ud574\uacb0 \ubc29\ubc95 : DialogueNode.cs \ud30c\uc77c \uc0c1\ub2e8\uc5d0 \ub2e4\uc74c \uc5b4\ud2b8\ub9ac\ubdf0\ud2b8\ub97c \ucd94\uac00<br>[CreateAssetMenu(fileName = &#8220;New Dialogue Node&#8221;, menuName = &#8220;Dialogue\/Node&#8221;)]<br><br><strong>\u25a0 \uc2e4\ud589 \uc601\uc0c1<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"1288\" style=\"aspect-ratio: 1216 \/ 1288;\" width=\"1216\" controls src=\"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/wp-content\/uploads\/sites\/50\/2025\/05\/10\uc8fc\ucc28-\uc120\ud0dd\ud615-1.mp4\"><\/video><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\u25a0 \uad6c\ud604 \uae30\ub2a5 + \ud074\ub9ad\uc2dc \uce74\uba54\ub77c\uac00 \ud655\ub300 \ub418\ub294 \uae30\ub2a5 \ucd94\uac00\u00b7 NPC \ud074\ub9ad \uc2dc \ub300\ud654\ucc3d(UI) \ud45c\uc2dc\u00b7 \uc120\ud0dd\uc9c0 \ubc84\ud2bc \ud074\ub9ad\uc5d0 \ub530\ub77c \ub2e4\uc74c \ub300\ud654 \ud750\ub984\uc774 \ubcc0\ud654 \u25a0 \uad6c\ud604 \uacfc\uc815\uc52c \uad6c\ud604 \uacfc\uc815\uc740 9\uc8fc\ucc28\uc640 \ub3d9\uc77c 1.[DialogueNode] ScriptableObject \uc0dd\uc131\u00b7 \ub300\uc0ac\uc640 \uc120\ud0dd\uc9c0\ub97c \ud558\ub098\uc758 ScriptableObject(DialogueNode)\ub85c \uad00\ub9ac\u00b7 \uc120\ud0dd\uc9c0\ub294 \ud14d\uc2a4\ud2b8\uc640 \uc5f0\uacb0\ub420 \ub2e4\uc74c \ub178\ub4dc\ub97c \ub9ac\uc2a4\ud2b8\ub85c \uc800\uc7a5 [DialogueNode.cs][CreateAssetMenu(fileName = &#8220;New Dialogue Node&#8221;, menuName = &#8220;Dialogue\/Node&#8221;)]public class DialogueNode\u2026 <span class=\"read-more\"><a href=\"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/2025\/05\/16\/10%ec%a3%bc%ec%b0%a8\/\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":50,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[3],"tags":[],"class_list":["post-277","post","type-post","status-publish","format-standard","hentry","category-3"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/wp-json\/wp\/v2\/posts\/277","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=277"}],"version-history":[{"count":0,"href":"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/wp-json\/wp\/v2\/posts\/277\/revisions"}],"wp:attachment":[{"href":"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/wp-json\/wp\/v2\/media?parent=277"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/wp-json\/wp\/v2\/categories?post=277"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/infognu.ansan.ac.kr\/PortFolio\/202351028\/wp-json\/wp\/v2\/tags?post=277"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}