<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>monstrosite</title>
    <link>https://monstrosite.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 12 Jun 2026 22:18:18 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>monstro</managingEditor>
    <item>
      <title>유니티 엔진의 구성 - 48) Game Override</title>
      <link>https://monstrosite.tistory.com/1302</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Game Override&lt;/b&gt;는 모든 유저에게 동일한 값을 주는 것이 아닌,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;특정 &lt;span style=&quot;color: #ee2323;&quot;&gt;Audience(특정 기준에 따라 분류한 유저 그룹)&lt;/span&gt;별로 서로 다른 &lt;span style=&quot;color: #ee2323;&quot;&gt;게임 환경&lt;/span&gt; 또는 &lt;span style=&quot;color: #ee2323;&quot;&gt;값&lt;/span&gt;을 제공&lt;/b&gt;하는 것을 의미한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 코드 구성&lt;/h2&gt;
&lt;pre id=&quot;code_1781241977322&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Test : MonoBehaviour
{
    private const string PLAYER_SPEED = &quot;playerSpeed&quot;;
    private const string SCORE = &quot;Score&quot;;

    public struct UserAttributes
    {
        public bool isBeginner;
    }

    public struct AppAttributes
    {
        public float version;
    }

    private async void Awake()
    {
        await UnityServices.InitializeAsync();

        await AuthenticationService.Instance.SignInAnonymouslyAsync();

        RuntimeConfig runtimeConfig = await RemoteConfigService.Instance.FetchConfigsAsync
        (
            new UserAttributes
            {
                isBeginner = true,
            },
            new AppAttributes
            { 
                version = 1.0f,
            }
        );

        Debug.Log(&quot;playerSpeed : &quot; + runtimeConfig.GetFloat(PLAYER_SPEED));
        Debug.Log(&quot;score : &quot; + runtimeConfig.GetInt(SCORE));
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 사용한 코드를 위와 같이 수정한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;UserAttributes 구조체에 &lt;span style=&quot;color: #ef5369;&quot;&gt;불리언 변수&lt;/span&gt;를 추가&lt;/b&gt;하였고, &lt;b&gt;AppAttibutes 구초제에 &lt;span style=&quot;color: #ef5369;&quot;&gt;실수 변수&lt;/span&gt;를 추가&lt;/b&gt;하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또, &lt;b&gt;서버에서 데이터 값을 반환하면서 &lt;span style=&quot;color: #ef5369;&quot;&gt;두 구조체의 인스턴스&lt;/span&gt;를 생성하고 멤버변수의 값도 설정&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 사용절차&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) 첫 번째 단계&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1552&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qCsZO/dJMcadvuWEM/mSEVYzZ2idYDNK4h8WzuT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qCsZO/dJMcadvuWEM/mSEVYzZ2idYDNK4h8WzuT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qCsZO/dJMcadvuWEM/mSEVYzZ2idYDNK4h8WzuT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqCsZO%2FdJMcadvuWEM%2FmSEVYzZ2idYDNK4h8WzuT1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1552&quot; height=&quot;102&quot; data-origin-width=&quot;1552&quot; data-origin-height=&quot;102&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;유니티 대시보드에 접속&lt;/b&gt;하여 &lt;b&gt;Game Overrides를 선택&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1322&quot; data-origin-height=&quot;60&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pmEuo/dJMcadvuWRw/jreq55ihQBToOih8KArMGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pmEuo/dJMcadvuWRw/jreq55ihQBToOih8KArMGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pmEuo/dJMcadvuWRw/jreq55ihQBToOih8KArMGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpmEuo%2FdJMcadvuWRw%2Fjreq55ihQBToOih8KArMGK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1322&quot; height=&quot;60&quot; data-origin-width=&quot;1322&quot; data-origin-height=&quot;60&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;오른쪽 상단의&lt;span style=&quot;color: #006dd7;&quot;&gt; Create Game Override&lt;/span&gt;를 선택&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) 두 번째 단계&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1312&quot; data-origin-height=&quot;592&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDg6sx/dJMcaiXTxxi/wjNTCnnjNCmlcglw19hNFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDg6sx/dJMcaiXTxxi/wjNTCnnjNCmlcglw19hNFK/img.png&quot; data-alt=&quot;첫 번째 단계&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDg6sx/dJMcaiXTxxi/wjNTCnnjNCmlcglw19hNFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDg6sx%2FdJMcaiXTxxi%2FwjNTCnnjNCmlcglw19hNFK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1312&quot; height=&quot;592&quot; data-origin-width=&quot;1312&quot; data-origin-height=&quot;592&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;첫 번째 단계&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성할 Game Override의 &lt;b&gt;이름과 상세설명&lt;/b&gt;을 작성한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;917&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pgYfH/dJMcah5RROd/lsQCkCI5yWUM7NkChQKQwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pgYfH/dJMcah5RROd/lsQCkCI5yWUM7NkChQKQwK/img.png&quot; data-alt=&quot;두 번째 단계&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pgYfH/dJMcah5RROd/lsQCkCI5yWUM7NkChQKQwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpgYfH%2FdJMcah5RROd%2FlsQCkCI5yWUM7NkChQKQwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;877&quot; height=&quot;917&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;917&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;두 번째 단계&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2번째 단계에서는 &lt;span style=&quot;color: #006dd7;&quot;&gt;Audience&lt;/span&gt;를 설정&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옵션은 &lt;b&gt;2가지를 선택&lt;/b&gt;할 수 있다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Audiences&lt;/span&gt; 옵션 :&lt;span style=&quot;color: #006dd7;&quot;&gt; 미리 제공된 사용자 그룹&lt;/span&gt;으로 목적에 맞게 선택 가능&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;JEXL&lt;/span&gt; 옵션 : &lt;span style=&quot;color: #006dd7;&quot;&gt;개발자가 정의한 구조체 속성&lt;/span&gt;이나&lt;span style=&quot;color: #006dd7;&quot;&gt; 기본 제공되는 사용자 그룹&lt;/span&gt;을 조합하여 사용자 그룹 생성&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 그룹을 선택하면 &lt;b&gt;하단의&lt;span style=&quot;color: #006dd7;&quot;&gt; Rollout Percentage&lt;/span&gt; 수치를 설정&lt;/b&gt;하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 타겟 사용자 그룹 중 &lt;span style=&quot;color: #006dd7;&quot;&gt;몇 %&lt;/span&gt;에게 게임 환경이나 값을 &lt;span style=&quot;color: #006dd7;&quot;&gt;적용할지&lt;/span&gt; 설정&lt;/b&gt;할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;546&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSVVHu/dJMcaaTaGDI/5fKGGeKdcRMV00KFW8WID0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSVVHu/dJMcaaTaGDI/5fKGGeKdcRMV00KFW8WID0/img.png&quot; data-alt=&quot;두 번째 단계 - 실제 사용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSVVHu/dJMcaaTaGDI/5fKGGeKdcRMV00KFW8WID0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSVVHu%2FdJMcaaTaGDI%2F5fKGGeKdcRMV00KFW8WID0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;862&quot; height=&quot;546&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;546&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;두 번째 단계 - 실제 사용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 사용은 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;JEXL&lt;/span&gt; 옵션을 사용&lt;/b&gt;하여&lt;b&gt; 생성한 &lt;span style=&quot;color: #006dd7;&quot;&gt;2개의 구조체&lt;/span&gt; 속성을 사용하여 &lt;span style=&quot;color: #006dd7;&quot;&gt;사용자 그룹&lt;/span&gt;을 설정&lt;/b&gt;하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nN0bK/dJMcadvu2oM/K4f9zmuPSpuL3GyfspSNy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nN0bK/dJMcadvu2oM/K4f9zmuPSpuL3GyfspSNy1/img.png&quot; data-alt=&quot;두 번째 단계 - 실제 사용 (2)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nN0bK/dJMcadvu2oM/K4f9zmuPSpuL3GyfspSNy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnN0bK%2FdJMcadvu2oM%2FK4f9zmuPSpuL3GyfspSNy1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;857&quot; height=&quot;152&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;152&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;두 번째 단계 - 실제 사용 (2)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 그룹 비중은 위와 같이 &lt;b&gt;100%&lt;/b&gt;로 설정한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3) 세 번째 단계&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1150&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOoc4R/dJMcag6TNjP/beNo67Lm4e8cB00AzDIWDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOoc4R/dJMcag6TNjP/beNo67Lm4e8cB00AzDIWDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOoc4R/dJMcag6TNjP/beNo67Lm4e8cB00AzDIWDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOoc4R%2FdJMcag6TNjP%2FbeNo67Lm4e8cB00AzDIWDk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1150&quot; height=&quot;505&quot; data-origin-width=&quot;1150&quot; data-origin-height=&quot;505&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사용자 그룹에 &lt;span style=&quot;color: #0593d3;&quot;&gt;적용할 서비스&lt;/span&gt;를 선택&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트에서는 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;Remote Config&lt;/span&gt;를 적용하도록 설정&lt;/b&gt;하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;371&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mgiop/dJMcahSe6i3/oJ3RvN9ngMiIv09Q9zkIAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mgiop/dJMcahSe6i3/oJ3RvN9ngMiIv09Q9zkIAk/img.png&quot; data-alt=&quot;Config Overrides&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mgiop/dJMcahSe6i3/oJ3RvN9ngMiIv09Q9zkIAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmgiop%2FdJMcahSe6i3%2FoJ3RvN9ngMiIv09Q9zkIAk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;892&quot; height=&quot;371&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;371&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Config Overrides&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;초보자&lt;/span&gt;인 플레이어를 대상으로 하는 &lt;span style=&quot;color: #0593d3;&quot;&gt;Config Overrides&lt;/span&gt;&amp;nbsp;생성&lt;/b&gt;하고 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;Score&lt;/span&gt; 변수의 값을 &lt;span style=&quot;color: #0593d3;&quot;&gt;20&lt;/span&gt;으로 수정하여 적용&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4) 네 번째 단계&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1332&quot; data-origin-height=&quot;627&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lZaBd/dJMcaaZU4h5/YJugzFtOoGoA82LVzOxTi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lZaBd/dJMcaaZU4h5/YJugzFtOoGoA82LVzOxTi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lZaBd/dJMcaaZU4h5/YJugzFtOoGoA82LVzOxTi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlZaBd%2FdJMcaaZU4h5%2FYJugzFtOoGoA82LVzOxTi1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1332&quot; height=&quot;627&quot; data-origin-width=&quot;1332&quot; data-origin-height=&quot;627&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;네 번째 단계&lt;/b&gt;에서는 &lt;b&gt;생성한 Game Override의 &lt;span style=&quot;color: #009a87;&quot;&gt;시작&lt;/span&gt; + &lt;span style=&quot;color: #009a87;&quot;&gt;종료&lt;/span&gt; 날짜를 지정&lt;/b&gt;하거나&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;여러 오버라이드가 충돌할 때를 대비한 &lt;span style=&quot;color: #009a87;&quot;&gt;우선순위&lt;/span&gt;를 지정&lt;/b&gt;할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트에서는 위와 같이 &lt;b&gt;기본값으로 설정&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 최종 실행 결과&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1292&quot; data-origin-height=&quot;92&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/41U7h/dJMcabdpssN/WZSQssMkDX0rhljbrgK6ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/41U7h/dJMcabdpssN/WZSQssMkDX0rhljbrgK6ok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/41U7h/dJMcabdpssN/WZSQssMkDX0rhljbrgK6ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F41U7h%2FdJMcabdpssN%2FWZSQssMkDX0rhljbrgK6ok%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1292&quot; height=&quot;92&quot; data-origin-width=&quot;1292&quot; data-origin-height=&quot;92&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;생성한 Game Override에 대해&lt;/b&gt;서 &lt;b&gt;우측 상단의 &lt;span style=&quot;color: #409d00;&quot;&gt;Enable&lt;/span&gt;을 선택&lt;/b&gt;해야 실제로 사용할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;290&quot; data-origin-height=&quot;95&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cO4CZb/dJMcabEwieZ/g7acJW0gDHg0MSpuA1SJTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cO4CZb/dJMcabEwieZ/g7acJW0gDHg0MSpuA1SJTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cO4CZb/dJMcabEwieZ/g7acJW0gDHg0MSpuA1SJTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcO4CZb%2FdJMcabEwieZ%2Fg7acJW0gDHg0MSpuA1SJTk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;290&quot; height=&quot;95&quot; data-origin-width=&quot;290&quot; data-origin-height=&quot;95&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트를 실행한 후에&lt;b&gt; 로그를 확인&lt;/b&gt;해보면 10이 아닌 덮어씌워진 &lt;b&gt;20이 출력&lt;/b&gt;되는 것을 확인할 수 있다&lt;/p&gt;</description>
      <category>유니티 엔진/유니티 엔진의 구성</category>
      <category>유니티 엔진의 구성</category>
      <author>monstro</author>
      <guid isPermaLink="true">https://monstrosite.tistory.com/1302</guid>
      <comments>https://monstrosite.tistory.com/1302#entry1302comment</comments>
      <pubDate>Fri, 12 Jun 2026 14:59:34 +0900</pubDate>
    </item>
    <item>
      <title>AWS Cognito - 최종) 인증 코드 예외 처리 + SignIn API 요청과 처리</title>
      <link>https://monstrosite.tistory.com/1301</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;인증 코드&lt;/span&gt;를 입력하는 경우에 &lt;span style=&quot;color: #ee2323;&quot;&gt;6자리 숫자&lt;/span&gt;만을 입력할 수 있도록 예외를 처리&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또, &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;클라이언트&lt;/span&gt;에서 &lt;span style=&quot;color: #ee2323;&quot;&gt;로그인 정보&lt;/span&gt;를 입력하여 &lt;span style=&quot;color: #ee2323;&quot;&gt;SignIn API&lt;/span&gt;를 요청하고&lt;span style=&quot;color: #ee2323;&quot;&gt; 로그인&lt;/span&gt;을 진행&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;서버&lt;/span&gt;에서 &lt;span style=&quot;color: #ee2323;&quot;&gt;처리한 결과&lt;/span&gt;를 반환하는 작업을 구현&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 스크립트 작업&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) ConfirmSignUpPage 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;397&quot; data-origin-height=&quot;127&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdSgxt/dJMcahdHgtb/3dFN2qxl2oa7WB66OYqt0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdSgxt/dJMcahdHgtb/3dFN2qxl2oa7WB66OYqt0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdSgxt/dJMcahdHgtb/3dFN2qxl2oa7WB66OYqt0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdSgxt%2FdJMcahdHgtb%2F3dFN2qxl2oa7WB66OYqt0k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;397&quot; height=&quot;127&quot; data-origin-width=&quot;397&quot; data-origin-height=&quot;127&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회원인증 페이지 UI 클래스&lt;/b&gt;에 위 &lt;b&gt;2개의 함수를 추가&lt;/b&gt;하여 &lt;b&gt;입력한 인증 코드에 대한 &lt;span style=&quot;color: #ef5369;&quot;&gt;예외&lt;/span&gt;를 처리&lt;/b&gt;하도록 설정한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;302&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/coPHbC/dJMcabR1k8Q/M4zwANijyST3BIFCKLy1aK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/coPHbC/dJMcabR1k8Q/M4zwANijyST3BIFCKLy1aK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/coPHbC/dJMcabR1k8Q/M4zwANijyST3BIFCKLy1aK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoPHbC%2FdJMcabR1k8Q%2FM4zwANijyST3BIFCKLy1aK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;732&quot; height=&quot;302&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;302&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;UpdateConfirmButtonState 함수&lt;/b&gt;의 로직은 위와 같다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;함수가 &lt;span style=&quot;color: #ef5369;&quot;&gt;호출&lt;/span&gt;된 시점에&lt;span style=&quot;color: #ef5369;&quot;&gt; static 정규표현식 객체&lt;/span&gt;를 생성&lt;/b&gt;하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력한 인증 코드가 &lt;b&gt;정규표현식에 &lt;span style=&quot;color: #ef5369;&quot;&gt;부합&lt;/span&gt;하면 버튼을 활성화 + 상태 메세지를 비우지만&lt;/b&gt;,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;부합하지 않으면&lt;/span&gt; 상태 메세지를 통해 6자리 숫자를 입력하도록 알려&lt;/b&gt;준다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vl5Uv/dJMcaf7Xf13/lB1MMISxUq9X0UsYkpzvPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vl5Uv/dJMcaf7Xf13/lB1MMISxUq9X0UsYkpzvPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vl5Uv/dJMcaf7Xf13/lB1MMISxUq9X0UsYkpzvPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvl5Uv%2FdJMcaf7Xf13%2FlB1MMISxUq9X0UsYkpzvPk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;802&quot; height=&quot;120&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;NativeConstruct 함수&lt;/b&gt;의 로직을 위와 같이 구성하여&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;TexBox에 &lt;span style=&quot;color: #ef5369;&quot;&gt;입력할 때&lt;/span&gt;마다 &lt;span style=&quot;color: #ef5369;&quot;&gt;UpdateConfirmButtonState&lt;/span&gt; 함수를 호출&lt;/b&gt;하도록 설정한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) PortalManager 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;62&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wgRM8/dJMcaf7Xf6i/aybXjScIBtCX5cnkPUzaMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wgRM8/dJMcaf7Xf6i/aybXjScIBtCX5cnkPUzaMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wgRM8/dJMcaf7Xf6i/aybXjScIBtCX5cnkPUzaMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwgRM8%2FdJMcaf7Xf6i%2FaybXjScIBtCX5cnkPUzaMK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;352&quot; height=&quot;62&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;62&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;서버에서 반환된 &lt;span style=&quot;color: #006dd7;&quot;&gt;로그인 처리 결과&lt;/span&gt;를 브로드캐스트하는 &lt;span style=&quot;color: #006dd7;&quot;&gt;SignInStatusMessageDelegate&lt;/span&gt; 멤버변수&lt;/b&gt;를 추가한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;101&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kH9Eu/dJMcahY1K1Y/qz1zJJzoJKRptJcpC5TQ30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kH9Eu/dJMcahY1K1Y/qz1zJJzoJKRptJcpC5TQ30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kH9Eu/dJMcahY1K1Y/qz1zJJzoJKRptJcpC5TQ30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkH9Eu%2FdJMcahY1K1Y%2Fqz1zJJzoJKRptJcpC5TQ30%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;747&quot; height=&quot;101&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;101&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SignIn_Response 함수&lt;/b&gt;를 추가하여 &lt;b&gt;서버에서 반환된 &lt;span style=&quot;color: #006dd7;&quot;&gt;로그인 처리 결과&lt;/span&gt;를 처리&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;691&quot; data-origin-height=&quot;416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oV1hF/dJMcag6Tqoi/oND3zzmVxZulRkck3lO4d0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oV1hF/dJMcag6Tqoi/oND3zzmVxZulRkck3lO4d0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oV1hF/dJMcag6Tqoi/oND3zzmVxZulRkck3lO4d0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoV1hF%2FdJMcag6Tqoi%2FoND3zzmVxZulRkck3lO4d0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;691&quot; height=&quot;416&quot; data-origin-width=&quot;691&quot; data-origin-height=&quot;416&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Sign 함수의 로직을 위와 같이 구성한다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;b&gt;델리게이트에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;False&lt;/span&gt;를 넘겨주어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;브로드캐스트&lt;/span&gt;하여 필요한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;하위 UI&lt;/span&gt;를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;비활성화&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;b&gt;서버에 전송할&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;HTTPRequest&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;객체 생성&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;민감한 정보를 포함하여 전송&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하므로&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;POST &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;함수로 설정 +&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;HTTP 헤더 및 URL&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설정&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;로그인에 필요한 데이터&lt;/span&gt;를 구성하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;JSON&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;포맷으로 직렬화&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;b&gt;직렬화된 데이터를 포함한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;HTTP 요청&lt;/span&gt;을 서버로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;전송&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;412&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfB4MH/dJMcacKf0lb/zPUXaHcb1nfO9CBb5UFJeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfB4MH/dJMcacKf0lb/zPUXaHcb1nfO9CBb5UFJeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfB4MH/dJMcacKf0lb/zPUXaHcb1nfO9CBb5UFJeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfB4MH%2FdJMcacKf0lb%2FzPUXaHcb1nfO9CBb5UFJeK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;811&quot; height=&quot;412&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;412&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SignIn_Response 함수&lt;/b&gt;의 로직을 위와 같이 구성한다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;b&gt;네트워크 연결이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;실패&lt;/span&gt;했다면 델리게이트로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;True&lt;/span&gt;를 브로드캐스트하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;필요한 하위 UI&lt;/span&gt;를 활성화&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;b&gt;서버로부터&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;반환된 문자열&lt;/span&gt;을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;JSON&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;데이터로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;역직렬화&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;에러 메세지가 포함&lt;/span&gt;되어 있다면 마찬가지로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;True&lt;/span&gt;를 브로드캐스트하고 얼리 리턴&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;리플렉션&lt;/span&gt;을 사용하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;JSON&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;데이터를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;언리얼 구조체&lt;/span&gt;로 변환하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Dump&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;함수를 호출하여 출력&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3) SignInPage 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;566&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tfKfZ/dJMcagFTgKx/flkDORfKpoxigakDD6dqSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tfKfZ/dJMcagFTgKx/flkDORfKpoxigakDD6dqSk/img.png&quot; data-alt=&quot;헤더 파일&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tfKfZ/dJMcagFTgKx/flkDORfKpoxigakDD6dqSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtfKfZ%2FdJMcagFTgKx%2FflkDORfKpoxigakDD6dqSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;566&quot; height=&quot;61&quot; data-origin-width=&quot;566&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;헤더 파일&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;650&quot; data-origin-height=&quot;171&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tOWdP/dJMcajoVVHj/OKEg3V8nkNOtXQynkigKek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tOWdP/dJMcajoVVHj/OKEg3V8nkNOtXQynkigKek/img.png&quot; data-alt=&quot;cpp 파일&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tOWdP/dJMcajoVVHj/OKEg3V8nkNOtXQynkigKek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtOWdP%2FdJMcajoVVHj%2FOKEg3V8nkNOtXQynkigKek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;650&quot; height=&quot;171&quot; data-origin-width=&quot;650&quot; data-origin-height=&quot;171&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;cpp 파일&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;로그인 페이지 UI&lt;/span&gt; 클래스에 UpdateStatusMessage 함수를 추가&lt;/b&gt;하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;TextBlock&lt;/span&gt; UI의 메세지를 설정&lt;/b&gt;하고 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;버튼&lt;/span&gt; UI를 활성화&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4) SignInOverlay 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;317&quot; data-origin-height=&quot;52&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXW7GB/dJMcajifnMr/aZi0k7rgqQUspKslmu1UE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXW7GB/dJMcajifnMr/aZi0k7rgqQUspKslmu1UE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXW7GB/dJMcajifnMr/aZi0k7rgqQUspKslmu1UE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXW7GB%2FdJMcajifnMr%2FaZi0k7rgqQUspKslmu1UE0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;317&quot; height=&quot;52&quot; data-origin-width=&quot;317&quot; data-origin-height=&quot;52&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;432&quot; data-origin-height=&quot;292&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YfHW0/dJMcacKf0CS/Yt5tYfywmzhxHh6xOJNju1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YfHW0/dJMcacKf0CS/Yt5tYfywmzhxHh6xOJNju1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YfHW0/dJMcacKf0CS/Yt5tYfywmzhxHh6xOJNju1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYfHW0%2FdJMcacKf0CS%2FYt5tYfywmzhxHh6xOJNju1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;432&quot; height=&quot;292&quot; data-origin-width=&quot;432&quot; data-origin-height=&quot;292&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;GameSession에 참여하는 테스트 위젯&lt;/b&gt;과 로그인 관련 페이지 UI들을 &lt;b&gt;테스트하는 버튼 멤버변수를 제거&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;897&quot; data-origin-height=&quot;482&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SsrBX/dJMcadCeLmG/HJd7OhbCPcSu4SerVwxG60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SsrBX/dJMcadCeLmG/HJd7OhbCPcSu4SerVwxG60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SsrBX/dJMcadCeLmG/HJd7OhbCPcSu4SerVwxG60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSsrBX%2FdJMcadCeLmG%2FHJd7OhbCPcSu4SerVwxG60%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;897&quot; height=&quot;482&quot; data-origin-width=&quot;897&quot; data-origin-height=&quot;482&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NativeConstruct 함수에 위와 같이 로직을 추가하여&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;로그인 페이지 UI&lt;/span&gt;의 UpdateStatusMessage 함수&lt;/b&gt;를&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Portal 중재자&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;클래스의 델리게이트에 연결&lt;/b&gt;한다&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;br /&gt;- 블루프린트 작업&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) WBP_SignInOverlay 위젯 블루프린트&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;837&quot; data-origin-height=&quot;485&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yroLL/dJMcaijlQGB/WEnBk187rNsEZoDLvFGr5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yroLL/dJMcaijlQGB/WEnBk187rNsEZoDLvFGr5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yroLL/dJMcaijlQGB/WEnBk187rNsEZoDLvFGr5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyroLL%2FdJMcaijlQGB%2FWEnBk187rNsEZoDLvFGr5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;837&quot; height=&quot;485&quot; data-origin-width=&quot;837&quot; data-origin-height=&quot;485&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불필요한 하위 UI들을 전부 제거한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 최종 실행 결과&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/diigXU/dJMcacDt7gm/B2Kj6ariTZfAUXgZyJot9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/diigXU/dJMcacDt7gm/B2Kj6ariTZfAUXgZyJot9K/img.png&quot; data-alt=&quot;회원가입&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/diigXU/dJMcacDt7gm/B2Kj6ariTZfAUXgZyJot9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdiigXU%2FdJMcacDt7gm%2FB2Kj6ariTZfAUXgZyJot9K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;655&quot; height=&quot;505&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;505&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;회원가입&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 정보를 입력하여 &lt;b&gt;회원가입&lt;/b&gt;을 진행한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;651&quot; data-origin-height=&quot;510&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbUwHR/dJMcaaZUGHq/QgdKyhFp5HgaHKLkDJtUNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbUwHR/dJMcaaZUGHq/QgdKyhFp5HgaHKLkDJtUNk/img.png&quot; data-alt=&quot;회원인증&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbUwHR/dJMcaaZUGHq/QgdKyhFp5HgaHKLkDJtUNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbUwHR%2FdJMcaaZUGHq%2FQgdKyhFp5HgaHKLkDJtUNk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;651&quot; height=&quot;510&quot; data-origin-width=&quot;651&quot; data-origin-height=&quot;510&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;회원인증&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 발송된 인증코드를 입력하여 &lt;b&gt;회원인증&lt;/b&gt;을 진행한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;507&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kGq2P/dJMcaijlQMv/YbH9wj2fkOetQIkFMMrd31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kGq2P/dJMcaijlQMv/YbH9wj2fkOetQIkFMMrd31/img.png&quot; data-alt=&quot;인증 성공&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kGq2P/dJMcaijlQMv/YbH9wj2fkOetQIkFMMrd31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkGq2P%2FdJMcaijlQMv%2FYbH9wj2fkOetQIkFMMrd31%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;652&quot; height=&quot;507&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;507&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;인증 성공&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회원인증이 성공하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;510&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHik9o/dJMcadbcm2O/S9vll0JKtK9p7vatzDKMLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHik9o/dJMcadbcm2O/S9vll0JKtK9p7vatzDKMLK/img.png&quot; data-alt=&quot;로그인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHik9o/dJMcadbcm2O/S9vll0JKtK9p7vatzDKMLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHik9o%2FdJMcadbcm2O%2FS9vll0JKtK9p7vatzDKMLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;655&quot; height=&quot;510&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;510&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로그인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqzFOb/dJMcaaMnGZA/XECwBkTkdoN5yDfUSeIrqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqzFOb/dJMcaaMnGZA/XECwBkTkdoN5yDfUSeIrqK/img.png&quot; data-alt=&quot;로그인 후 Dump 함수 호출&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqzFOb/dJMcaaMnGZA/XECwBkTkdoN5yDfUSeIrqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqzFOb%2FdJMcaaMnGZA%2FXECwBkTkdoN5yDfUSeIrqK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;457&quot; height=&quot;242&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;242&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로그인 후 Dump 함수 호출&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인 후에 위와 같이 &lt;b&gt;SignIn_Response 함수가 호출&lt;/b&gt;되고 내부적으로 &lt;b&gt;Dump 함수가 호출&lt;/b&gt;된 것을 확인할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1525&quot; data-origin-height=&quot;272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pgDkD/dJMcadh4sTZ/x7pWEdjBB0THXhz1uIEZp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pgDkD/dJMcadh4sTZ/x7pWEdjBB0THXhz1uIEZp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pgDkD/dJMcadh4sTZ/x7pWEdjBB0THXhz1uIEZp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpgDkD%2FdJMcadh4sTZ%2Fx7pWEdjBB0THXhz1uIEZp0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1525&quot; height=&quot;272&quot; data-origin-width=&quot;1525&quot; data-origin-height=&quot;272&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS Cognito에서 &lt;b&gt;실제 추가된 사용자&lt;/b&gt;를 확인할 수 있다&lt;/p&gt;</description>
      <category>언리얼 엔진 - 게임 프로젝트/AWS GameLift를 활용한 데디케이트 FPS 프로젝트</category>
      <category>AWS를 활용한 FPS 게임</category>
      <author>monstro</author>
      <guid isPermaLink="true">https://monstrosite.tistory.com/1301</guid>
      <comments>https://monstrosite.tistory.com/1301#entry1301comment</comments>
      <pubDate>Fri, 12 Jun 2026 11:36:44 +0900</pubDate>
    </item>
    <item>
      <title>AWS Cognito - 13) ConfirmSignUp API 요청과 처리</title>
      <link>https://monstrosite.tistory.com/1300</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 개요&lt;/h2&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;클라이언트&lt;/span&gt;에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;회원가입 후에 &lt;b&gt;인증정보를 입력하여&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span&gt;&amp;nbsp;ConfirmSignUp&amp;nbsp;API&lt;/span&gt;&lt;/span&gt;를 요청하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;회원인증&lt;/span&gt;을 진행&lt;/b&gt;한다&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이후&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;서버&lt;/span&gt;에서 &lt;span style=&quot;color: #ee2323;&quot;&gt;처리한 결과&lt;/span&gt;를 반환&lt;/b&gt;하는 작업을 구현한다&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;- 스크립트 작업&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) HTTPRequestTypes 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9iU4r/dJMcaalhtv3/Y6Cez2QwSYe7nvBhGyjqI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9iU4r/dJMcaalhtv3/Y6Cez2QwSYe7nvBhGyjqI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9iU4r/dJMcaalhtv3/Y6Cez2QwSYe7nvBhGyjqI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9iU4r%2FdJMcaalhtv3%2FY6Cez2QwSYe7nvBhGyjqI1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;602&quot; height=&quot;462&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;462&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트에서 &lt;b&gt;지정한 규격에 맞춰 구조체의 이름에 &quot;&lt;span style=&quot;color: #ef5369;&quot;&gt;DS&lt;/span&gt;&quot;를 수식&lt;/b&gt;하여 이름을 수정한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) HTTPRequestManager 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;917&quot; data-origin-height=&quot;48&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2ZUwn/dJMcajvM2dP/LXcZSpuNYpwj3Y7KPLdw50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2ZUwn/dJMcajvM2dP/LXcZSpuNYpwj3Y7KPLdw50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2ZUwn/dJMcajvM2dP/LXcZSpuNYpwj3Y7KPLdw50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2ZUwn%2FdJMcajvM2dP%2FLXcZSpuNYpwj3Y7KPLdw50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;917&quot; height=&quot;48&quot; data-origin-width=&quot;917&quot; data-origin-height=&quot;48&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;클라이언트&lt;/span&gt;에서 요청한 &lt;span style=&quot;color: #006dd7;&quot;&gt;API의 실행&lt;span style=&quot;color: #000000;&quot;&gt;이&lt;/span&gt; 성공&lt;/span&gt;하면 브로드캐스트하는 &lt;span style=&quot;color: #006dd7;&quot;&gt;FOnAPIRequestSucceeded&lt;/span&gt; 델리게이트&lt;/b&gt;를 추가한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;자식 중재자&lt;/span&gt; 클래스&lt;/b&gt;에서는 &lt;b&gt;해당 델리게이트를 사용하여 필요한 &lt;span style=&quot;color: #006dd7;&quot;&gt;UI&lt;/span&gt;를 갱신&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3) PortalManager 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;701&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb6f7w/dJMcahkuPxi/CmZ4Mc8y6F2JiIr5NrukO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb6f7w/dJMcahkuPxi/CmZ4Mc8y6F2JiIr5NrukO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb6f7w/dJMcahkuPxi/CmZ4Mc8y6F2JiIr5NrukO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb6f7w%2FdJMcahkuPxi%2FCmZ4Mc8y6F2JiIr5NrukO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;742&quot; height=&quot;701&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;701&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Portal 중재자 클래스&lt;/b&gt;에 위와 같이 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;회원인증&lt;/span&gt; 관련 멤버변수와 함수를 추가&lt;/b&gt;한다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;LastSignUpResponse&lt;/span&gt; 멤버변수 : 서버로부터 반환된 &lt;span style=&quot;color: #0593d3;&quot;&gt;회원가입 처리 결과&lt;/span&gt;를 저장&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;LastUsername&lt;/span&gt; 멤버변수 : 회원가입한&lt;span style=&quot;color: #0593d3;&quot;&gt; 사용자의 이름&lt;/span&gt;을 저장&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;ConfirmStatusMessageDelegate&lt;/span&gt; 멤버변수 : 서버에서 반환된 &lt;span style=&quot;color: #0593d3;&quot;&gt;회원인증 처리 결과&lt;/span&gt;를 &lt;span style=&quot;color: #0593d3;&quot;&gt;브로드캐스트&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;OnSignUpSucceeded&lt;/span&gt; 멤버변수 :&lt;span style=&quot;color: #0593d3;&quot;&gt; 회원가입&lt;/span&gt;이&lt;span style=&quot;color: #0593d3;&quot;&gt; 성공한 경우&lt;/span&gt;에 &lt;span style=&quot;color: #0593d3;&quot;&gt;브로드캐스트&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;OnConfirmSucceeded&lt;/span&gt; 멤버변수 : &lt;span style=&quot;color: #0593d3;&quot;&gt;회원인증&lt;/span&gt;이 &lt;span style=&quot;color: #0593d3;&quot;&gt;성공한 경우&lt;/span&gt;에 &lt;span style=&quot;color: #0593d3;&quot;&gt;브로드캐스트&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;Confirm_Response&lt;/span&gt; 함수 : 서버에서 &lt;span style=&quot;color: #0593d3;&quot;&gt;반환된&lt;/span&gt; &lt;span style=&quot;color: #0593d3;&quot;&gt;회원인증 처리 결과&lt;/span&gt;를 처리하는 함수&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;437&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAptfN/dJMcabq0y4p/ddHEB0kdjSKq4ZCqMC9ahk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAptfN/dJMcabq0y4p/ddHEB0kdjSKq4ZCqMC9ahk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAptfN/dJMcabq0y4p/ddHEB0kdjSKq4ZCqMC9ahk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAptfN%2FdJMcabq0y4p%2FddHEB0kdjSKq4ZCqMC9ahk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;742&quot; height=&quot;437&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;437&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SignUp 함수&lt;/b&gt;에 위의 로직을 추가하여 &lt;b&gt;입력한 &lt;span style=&quot;color: #0593d3;&quot;&gt;사용자의 이름&lt;/span&gt;을 사용하여 &lt;span style=&quot;color: #0593d3;&quot;&gt;LastUserName&lt;/span&gt; 변수의 값을 설정&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;817&quot; data-origin-height=&quot;397&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbIrhz/dJMcacpVNMK/tjL5WSBtOyBekxp04gHMmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbIrhz/dJMcacpVNMK/tjL5WSBtOyBekxp04gHMmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbIrhz/dJMcacpVNMK/tjL5WSBtOyBekxp04gHMmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbIrhz%2FdJMcacpVNMK%2FtjL5WSBtOyBekxp04gHMmk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;817&quot; height=&quot;397&quot; data-origin-width=&quot;817&quot; data-origin-height=&quot;397&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SignUp_Response 함수&lt;/b&gt;에 위와 같이 로직을 추가한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회원가입 요청 처리 결과를 &lt;span style=&quot;color: #0593d3;&quot;&gt;역직렬화&lt;/span&gt;하여 에러가 포함되어 있다면 &lt;span style=&quot;color: #0593d3;&quot;&gt;얼리 리턴&lt;/span&gt;&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;얼리 리턴되지 않았다면&lt;b&gt; 문제가 없으므로 &lt;span style=&quot;color: #0593d3;&quot;&gt;리플렉션&lt;/span&gt;을 통해 &lt;span style=&quot;color: #0593d3;&quot;&gt;LastSignUpResponse&lt;/span&gt; 변수의 값을 설정&lt;/b&gt;하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;OnSignUpSucceeded&lt;/span&gt; 델리게이트를 브로드캐스트&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHYyqS/dJMcaip6M12/Ixxo6QkFoKNJXK1mDl2NKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHYyqS/dJMcaip6M12/Ixxo6QkFoKNJXK1mDl2NKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHYyqS/dJMcaip6M12/Ixxo6QkFoKNJXK1mDl2NKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHYyqS%2FdJMcaip6M12%2FIxxo6QkFoKNJXK1mDl2NKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;742&quot; height=&quot;400&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Confirm 함수&lt;/b&gt;의 로직을 위와 같이 구성한다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;b&gt;델리게이트에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;False&lt;/span&gt;를 넘겨주어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;브로드캐스트&lt;/span&gt;하여 필요한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;하위 UI&lt;/span&gt;를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;비활성화&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;b&gt;서버에 전송할&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;HTTPRequest&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;객체 생성&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;사용자의 데이터를 갱신&lt;/span&gt;하므로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;PUT&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;함수로 설정 +&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;HTTP 헤더 및 URL&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;설정&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;회원인증에 필요한 데이터&lt;/span&gt;를 구성하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;JSON&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;포맷으로 직렬화&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;b&gt;직렬화된 데이터를 포함한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;HTTP 요청&lt;/span&gt;을 서버로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;전송&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;827&quot; data-origin-height=&quot;570&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7Oqw5/dJMcabdoL6G/IBU1CTQmOfqk4DykqsT5G0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7Oqw5/dJMcabdoL6G/IBU1CTQmOfqk4DykqsT5G0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7Oqw5/dJMcabdoL6G/IBU1CTQmOfqk4DykqsT5G0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7Oqw5%2FdJMcabdoL6G%2FIBU1CTQmOfqk4DykqsT5G0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;827&quot; height=&quot;570&quot; data-origin-width=&quot;827&quot; data-origin-height=&quot;570&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Confirm_Response 함수&lt;/b&gt;의 로직을 위와 같이 구성하여 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;b&gt;서버로부터 반환된&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;회원인증 요청 처리 결과&lt;/span&gt;를 처리&lt;/b&gt;한다&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;b&gt;네트워크 연결이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;실패&lt;/span&gt;했다면 델리게이트로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;True&lt;/span&gt;를 브로드캐스트하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;필요한 하위 UI&lt;/span&gt;를 활성화&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;b&gt;서버로부터&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;반환된 문자열&lt;/span&gt;을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;JSON&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;데이터로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;역직렬화&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;네트워크 에러&lt;span style=&quot;color: #000000;&quot;&gt;나&lt;/span&gt; 에러 메세지가 포함&lt;/span&gt;되어 있다면 &lt;span style=&quot;color: #006dd7;&quot;&gt;True&lt;/span&gt;를 브로드캐스트하고 얼리 리턴&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;얼리 리턴되지 않았다&lt;/span&gt;면 &lt;span style=&quot;color: #006dd7;&quot;&gt;OnConfirmSucceeded&lt;/span&gt; 델리게이트를 브로드캐스트&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4) SignUpPage 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;180&quot; data-origin-height=&quot;32&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6HFVM/dJMcacpVN9q/Ch7BED9NeYc0xVCPSQ9W91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6HFVM/dJMcacpVN9q/Ch7BED9NeYc0xVCPSQ9W91/img.png&quot; data-alt=&quot;함수 선언&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6HFVM/dJMcacpVN9q/Ch7BED9NeYc0xVCPSQ9W91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6HFVM%2FdJMcacpVN9q%2FCh7BED9NeYc0xVCPSQ9W91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;180&quot; height=&quot;32&quot; data-origin-width=&quot;180&quot; data-origin-height=&quot;32&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;함수 선언&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;422&quot; data-origin-height=&quot;137&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEm2QX/dJMcaiDEEPB/MBrq3079TsgZVi3LquNKJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEm2QX/dJMcaiDEEPB/MBrq3079TsgZVi3LquNKJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEm2QX/dJMcaiDEEPB/MBrq3079TsgZVi3LquNKJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEm2QX%2FdJMcaiDEEPB%2FMBrq3079TsgZVi3LquNKJ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;422&quot; height=&quot;137&quot; data-origin-width=&quot;422&quot; data-origin-height=&quot;137&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회원가입 페이지 UI&lt;/b&gt;에 &lt;b&gt;ClearTextBoxes 함수&lt;/b&gt;를 추가하고 위와 같이 정의한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 함수를 호출하여 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;TextBox UI&lt;/span&gt;를 모두 초기화&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5) ConfirmSignUpPage 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;107&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sCTJL/dJMcaar6Vwp/h2dTq5ORdLZDkPgYAP0zBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sCTJL/dJMcaar6Vwp/h2dTq5ORdLZDkPgYAP0zBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sCTJL/dJMcaar6Vwp/h2dTq5ORdLZDkPgYAP0zBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsCTJL%2FdJMcaar6Vwp%2Fh2dTq5ORdLZDkPgYAP0zBk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;570&quot; height=&quot;107&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;107&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회원인증 페이지 UI&lt;/b&gt;에 위와 같이 &lt;b&gt;2개의 함수&lt;/b&gt;를 추가한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;431&quot; data-origin-height=&quot;122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3TUdE/dJMcafUushE/Dj6JsXiev7TEupquqdpVi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3TUdE/dJMcafUushE/Dj6JsXiev7TEupquqdpVi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3TUdE/dJMcafUushE/Dj6JsXiev7TEupquqdpVi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd3TUdE%2FdJMcafUushE%2FDj6JsXiev7TEupquqdpVi1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;431&quot; height=&quot;122&quot; data-origin-width=&quot;431&quot; data-origin-height=&quot;122&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ClearTextBoxes 함수&lt;/b&gt;를 위와 같이 정의한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 함수를 호출하여 &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;TextBox UI&lt;/span&gt;를 모두 초기화&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;707&quot; data-origin-height=&quot;175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQf5uQ/dJMcaccmgQH/U7c8hq6xHcyqAwsKbb80y0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQf5uQ/dJMcaccmgQH/U7c8hq6xHcyqAwsKbb80y0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQf5uQ/dJMcaccmgQH/U7c8hq6xHcyqAwsKbb80y0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQf5uQ%2FdJMcaccmgQH%2FU7c8hq6xHcyqAwsKbb80y0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;707&quot; height=&quot;175&quot; data-origin-width=&quot;707&quot; data-origin-height=&quot;175&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UpdateStatusMessage 함수를 위와 같이 정의한다&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;인자로 받은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;문자열&lt;/span&gt;을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;TextBlock&amp;nbsp;&lt;/span&gt;UI에 적용&lt;/b&gt;하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;인자로 받은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;불리언 값&lt;/span&gt;에 따라&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;버튼&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;UI를 활성화&lt;/b&gt;한다&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;6) SignInOverlay 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;207&quot; data-origin-height=&quot;132&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3sdsa/dJMcabxJitY/n9pYKetMddhWxeBvwgaOwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3sdsa/dJMcabxJitY/n9pYKetMddhWxeBvwgaOwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3sdsa/dJMcabxJitY/n9pYKetMddhWxeBvwgaOwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3sdsa%2FdJMcabxJitY%2Fn9pYKetMddhWxeBvwgaOwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;207&quot; height=&quot;132&quot; data-origin-width=&quot;207&quot; data-origin-height=&quot;132&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;중재자&lt;/span&gt;를 통해 &lt;span style=&quot;color: #409d00;&quot;&gt;회원가입&lt;/span&gt;과 &lt;span style=&quot;color: #409d00;&quot;&gt;회원인증의 성공&lt;/span&gt;을 전달받은 경우 호출할 2개의 함수&lt;/b&gt;를 추가한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1142&quot; data-origin-height=&quot;552&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wgeyM/dJMcagsifoF/d3b6oGqclpfcPkZLPnl780/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wgeyM/dJMcagsifoF/d3b6oGqclpfcPkZLPnl780/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wgeyM/dJMcagsifoF/d3b6oGqclpfcPkZLPnl780/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwgeyM%2FdJMcagsifoF%2Fd3b6oGqclpfcPkZLPnl780%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1142&quot; height=&quot;552&quot; data-origin-width=&quot;1142&quot; data-origin-height=&quot;552&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;NativeConstruct 함수&lt;/b&gt;에 위와 같이 로직을 추가하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;회원가입&lt;/span&gt;이 성공&lt;/b&gt;하는 경우 &lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;OnSignUpSucceeded&lt;/span&gt; 멤버함수를 호출&lt;/b&gt;하도록 바인드하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;회원인증&lt;/span&gt;이 성공&lt;/b&gt;하는 경우 &lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;OnConfirmSucceeded&lt;/span&gt; 멤버함수&lt;/b&gt;와&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;회원인증 페이지 UI&lt;/span&gt;의 &lt;span style=&quot;color: #409d00;&quot;&gt;UpdateStatusMessage&lt;/span&gt; 함수를 호출&lt;/b&gt;하도록 바인드한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DrdbP/dJMcabq0zB9/9JYNixy9NbXFDe2v06A9gk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DrdbP/dJMcabq0zB9/9JYNixy9NbXFDe2v06A9gk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DrdbP/dJMcabq0zB9/9JYNixy9NbXFDe2v06A9gk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDrdbP%2FdJMcabq0zB9%2F9JYNixy9NbXFDe2v06A9gk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;775&quot; height=&quot;120&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ConfirmButtonClicked 함수&lt;/b&gt;에 위와 같이 로직을 추가하여 &lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;회원인증 페이지 UI&lt;/span&gt;의 버튼을 비활성화&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1042&quot; data-origin-height=&quot;116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2WDIQ/dJMcab5ASYM/QME7GNVgxnrcy1NLYKYkV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2WDIQ/dJMcab5ASYM/QME7GNVgxnrcy1NLYKYkV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2WDIQ/dJMcab5ASYM/QME7GNVgxnrcy1NLYKYkV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2WDIQ%2FdJMcab5ASYM%2FQME7GNVgxnrcy1NLYKYkV1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1042&quot; height=&quot;116&quot; data-origin-width=&quot;1042&quot; data-origin-height=&quot;116&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;OnSignUpSucceeded 함수&lt;/b&gt;의 로직은 위와 같다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;회원가입 페이지 UI&lt;/span&gt;의 TextBox들을 전부 초기화&lt;/b&gt;하고 &lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;회원인증 페이지 UI&lt;/span&gt;의 TextBox를 설정&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 &lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;ShowConfirmSignUpPage&lt;/span&gt; 함수를 호출&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;101&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PSuf3/dJMb997LJyn/rskpL1HFYKiGU50CcjgpwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PSuf3/dJMb997LJyn/rskpL1HFYKiGU50CcjgpwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PSuf3/dJMb997LJyn/rskpL1HFYKiGU50CcjgpwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPSuf3%2FdJMb997LJyn%2FrskpL1HFYKiGU50CcjgpwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;311&quot; height=&quot;101&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;101&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;OnConfirmSucceeded 함수&lt;/b&gt;의 로직은 위와 같다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;회원인증 페이지 UI&lt;/span&gt;의 TextBox들을 전부 초기화&lt;/b&gt;하고 &lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;ShowSuccessConfirmedPage&lt;/span&gt; 함수를 호출&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 최종 실행 결과&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Or3lj/dJMcaiXSZiL/0wKLmymmnbzHRyQTuG7cs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Or3lj/dJMcaiXSZiL/0wKLmymmnbzHRyQTuG7cs1/img.png&quot; data-alt=&quot;회원가입&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Or3lj/dJMcaiXSZiL/0wKLmymmnbzHRyQTuG7cs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOr3lj%2FdJMcaiXSZiL%2F0wKLmymmnbzHRyQTuG7cs1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;666&quot; height=&quot;512&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;회원가입&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 &lt;b&gt;회원가입에 필요한 정보&lt;/b&gt;를 입력한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;515&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Lvcvv/dJMcaftnyQF/ioI5CAAvXpJubAj3Qu5aA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Lvcvv/dJMcaftnyQF/ioI5CAAvXpJubAj3Qu5aA1/img.png&quot; data-alt=&quot;회원인증&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Lvcvv/dJMcaftnyQF/ioI5CAAvXpJubAj3Qu5aA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLvcvv%2FdJMcaftnyQF%2FioI5CAAvXpJubAj3Qu5aA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;652&quot; height=&quot;515&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;515&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;회원인증&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이&lt;b&gt; 발송된 인증코드&lt;/b&gt;를 입력한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;651&quot; data-origin-height=&quot;507&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqQcb6/dJMcabR01PA/PRTt8dInn7FuaMqEnURi6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqQcb6/dJMcabR01PA/PRTt8dInn7FuaMqEnURi6k/img.png&quot; data-alt=&quot;회원인증 성공&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqQcb6/dJMcabR01PA/PRTt8dInn7FuaMqEnURi6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqQcb6%2FdJMcabR01PA%2FPRTt8dInn7FuaMqEnURi6k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;651&quot; height=&quot;507&quot; data-origin-width=&quot;651&quot; data-origin-height=&quot;507&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;회원인증 성공&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 &lt;b&gt;회원인증이 성공&lt;/b&gt;하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1511&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dy8Xor/dJMcabkgUJb/bF8k9fhLdXiIXTvSfkKYC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dy8Xor/dJMcabkgUJb/bF8k9fhLdXiIXTvSfkKYC1/img.png&quot; data-alt=&quot;AWS 콘솔&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dy8Xor/dJMcabkgUJb/bF8k9fhLdXiIXTvSfkKYC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdy8Xor%2FdJMcabkgUJb%2FbF8k9fhLdXiIXTvSfkKYC1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1511&quot; height=&quot;257&quot; data-origin-width=&quot;1511&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;AWS 콘솔&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS 콘솔에서 확인해보면 위와 같이 &lt;b&gt;인증된 사용자가 추가&lt;/b&gt;된 것을 확인할 수 있다&lt;/p&gt;</description>
      <category>언리얼 엔진 - 게임 프로젝트/AWS GameLift를 활용한 데디케이트 FPS 프로젝트</category>
      <category>AWS를 활용한 FPS 게임</category>
      <author>monstro</author>
      <guid isPermaLink="true">https://monstrosite.tistory.com/1300</guid>
      <comments>https://monstrosite.tistory.com/1300#entry1300comment</comments>
      <pubDate>Thu, 11 Jun 2026 19:51:14 +0900</pubDate>
    </item>
    <item>
      <title>AWS Cognito - 12) SignUp API 요청과 처리</title>
      <link>https://monstrosite.tistory.com/1299</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;클라이언트&lt;/span&gt;에서 &lt;span style=&quot;color: #ee2323;&quot;&gt;필요한 정보&lt;/span&gt;를 입력&lt;/b&gt;하여&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt; SignUp API&lt;/span&gt;를 요청하여 &lt;span style=&quot;color: #ee2323;&quot;&gt;회원가입&lt;/span&gt;을 진행&lt;/b&gt;하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;서버&lt;/span&gt;에서 &lt;span style=&quot;color: #ee2323;&quot;&gt;처리한 결과&lt;/span&gt;를 반환&lt;/b&gt;하는 작업을 구현한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 스크립트 작업&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) HTTPRequestManager 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;30&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dStMRQ/dJMcafNKrHC/Y3a26AM26ETSBiokZLYUo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dStMRQ/dJMcafNKrHC/Y3a26AM26ETSBiokZLYUo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dStMRQ/dJMcafNKrHC/Y3a26AM26ETSBiokZLYUo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdStMRQ%2FdJMcafNKrHC%2FY3a26AM26ETSBiokZLYUo1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;915&quot; height=&quot;30&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;30&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;확장된&lt;span style=&quot;color: #ef5369;&quot;&gt; 자식 중재자&lt;/span&gt; 클래스들에서 공통적으로 사용할 &lt;span style=&quot;color: #ef5369;&quot;&gt;APIStatusMessage&lt;/span&gt; 델리게이트를 추가&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중재자 클래스들은 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;용도&lt;/span&gt;에 맞춰 &lt;span style=&quot;color: #ef5369;&quot;&gt;인자&lt;/span&gt;를 넘겨주어 해당 델리게이트를 &lt;span style=&quot;color: #ef5369;&quot;&gt;브로드캐스트&lt;/span&gt;하고&amp;nbsp; UI를 갱신&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) GameSessionsManager 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4HH4W/dJMcajbonpQ/wabjwsNUGCk9i3fVpMtYjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4HH4W/dJMcajbonpQ/wabjwsNUGCk9i3fVpMtYjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4HH4W/dJMcajbonpQ/wabjwsNUGCk9i3fVpMtYjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4HH4W%2FdJMcajbonpQ%2FwabjwsNUGCk9i3fVpMtYjk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;860&quot; height=&quot;416&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;416&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 사용하던 고유한 델리게이트 멤버변수를 제거하고 &lt;b&gt;상속받은 델리게이트 멤버변수를 사용&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3) PortalManager 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J5h2h/dJMcafGXqSq/GRHtl3KAhhWu7k3QxthMQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J5h2h/dJMcafGXqSq/GRHtl3KAhhWu7k3QxthMQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J5h2h/dJMcafGXqSq/GRHtl3KAhhWu7k3QxthMQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ5h2h%2FdJMcafGXqSq%2FGRHtl3KAhhWu7k3QxthMQK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;732&quot; height=&quot;116&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;116&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Portal 중재자 클래스&lt;/b&gt;에 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;회원가입&lt;/span&gt;과 관련된 동작을 처리하는 멤버변수와 함수를 추가&lt;/b&gt;한다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;SignUpStatusMessageDelegate&lt;/span&gt; 멤버변수 : 서버에서 &lt;span style=&quot;color: #006dd7;&quot;&gt;반환된 처리결과&lt;/span&gt;를 &lt;span style=&quot;color: #006dd7;&quot;&gt;UI&lt;/span&gt;에 &lt;span style=&quot;color: #006dd7;&quot;&gt;브로드캐스트&lt;/span&gt;하는 델리게이트&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;SignUp_Response&lt;/span&gt; 함수 : 서버에서 &lt;span style=&quot;color: #006dd7;&quot;&gt;반환된 처리결과&lt;/span&gt;를 처리하는 함수&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;417&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4pSqg/dJMcajvMPqk/KgP7ZSVCSYxSDuIBKNvVg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4pSqg/dJMcajvMPqk/KgP7ZSVCSYxSDuIBKNvVg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4pSqg/dJMcajvMPqk/KgP7ZSVCSYxSDuIBKNvVg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4pSqg%2FdJMcajvMPqk%2FKgP7ZSVCSYxSDuIBKNvVg1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;742&quot; height=&quot;417&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;417&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SignUp 함수&lt;/b&gt;의 로직을 위와 같이 구성한다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;델리게이트에 &lt;span style=&quot;color: #006dd7;&quot;&gt;False&lt;/span&gt;를 넘겨주어 &lt;span style=&quot;color: #006dd7;&quot;&gt;브로드캐스트&lt;/span&gt;하여 필요한 &lt;span style=&quot;color: #006dd7;&quot;&gt;하위 UI&lt;/span&gt;를 &lt;span style=&quot;color: #006dd7;&quot;&gt;비활성화&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;서버에 전송할 &lt;span style=&quot;color: #006dd7;&quot;&gt;HTTPRequest&lt;/span&gt; 객체 생성&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;회원가입할 데이터&lt;/span&gt;를 전송하므로 &lt;span style=&quot;color: #006dd7;&quot;&gt;POST&lt;/span&gt; 함수로 설정 +&lt;span style=&quot;color: #006dd7;&quot;&gt; HTTP 헤더 및 URL&lt;/span&gt; 설정&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;회원가입에 필요한 데이터&lt;/span&gt;를 구성하고 &lt;span style=&quot;color: #006dd7;&quot;&gt;JSON&lt;/span&gt; 포맷으로 직렬화&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;직렬화된 데이터를 포함한 &lt;span style=&quot;color: #006dd7;&quot;&gt;HTTP 요청&lt;/span&gt;을 서버로 &lt;span style=&quot;color: #006dd7;&quot;&gt;전송&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;397&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5FmXM/dJMcahLvt8T/scZC8GKEOuTKRlesbywjUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5FmXM/dJMcahLvt8T/scZC8GKEOuTKRlesbywjUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5FmXM/dJMcahLvt8T/scZC8GKEOuTKRlesbywjUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5FmXM%2FdJMcahLvt8T%2FscZC8GKEOuTKRlesbywjUk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;816&quot; height=&quot;397&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;397&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SignUp_Response 함수&lt;/b&gt;를 위와 같이 구성하여 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;b&gt;서버로부터 반환된 &lt;span style=&quot;color: #006dd7;&quot;&gt;회원가입 요청 처리 결과&lt;/span&gt;를 처리&lt;/b&gt;한다&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;네트워크 연결이 &lt;span style=&quot;color: #006dd7;&quot;&gt;실패&lt;/span&gt;했다면 델리게이트로 &lt;span style=&quot;color: #006dd7;&quot;&gt;True&lt;/span&gt;를 브로드캐스트하여 &lt;span style=&quot;color: #006dd7;&quot;&gt;필요한 하위 UI&lt;/span&gt;를 활성화&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;서버로부터 &lt;span style=&quot;color: #006dd7;&quot;&gt;반환된 문자열&lt;/span&gt;을 &lt;span style=&quot;color: #006dd7;&quot;&gt;JSON&lt;/span&gt; 데이터로 &lt;span style=&quot;color: #006dd7;&quot;&gt;역직렬화&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;에러 메세지가 포함&lt;/span&gt;되어 있다면 마찬가지로 &lt;span style=&quot;color: #006dd7;&quot;&gt;True&lt;/span&gt;를 브로드캐스트하여 &lt;span style=&quot;color: #006dd7;&quot;&gt;필요한 하위 UI&lt;/span&gt;를 활성화&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;리플렉션&lt;/span&gt;을 사용하여 &lt;span style=&quot;color: #006dd7;&quot;&gt;JSON&lt;/span&gt; 데이터를 &lt;span style=&quot;color: #006dd7;&quot;&gt;언리얼 구조체&lt;/span&gt;로 변환하고 &lt;span style=&quot;color: #006dd7;&quot;&gt;Dump&lt;/span&gt; 함수를 호출하여 출력&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4) SignUpPage 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;65&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pvX2R/dJMcaccl6pj/wpokTpwjHOVKqczEQ6Stb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pvX2R/dJMcaccl6pj/wpokTpwjHOVKqczEQ6Stb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pvX2R/dJMcaccl6pj/wpokTpwjHOVKqczEQ6Stb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpvX2R%2FdJMcaccl6pj%2FwpokTpwjHOVKqczEQ6Stb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;562&quot; height=&quot;65&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;65&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;로그인 페이지&lt;/span&gt;의 UI 클래스&lt;/b&gt;에 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;로그인 상태&lt;/span&gt;에 따라 &lt;span style=&quot;color: #0593d3;&quot;&gt;하위 UI&lt;/span&gt;를 갱신하는 함수&lt;/b&gt;를 추가한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;647&quot; data-origin-height=&quot;175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KxgNF/dJMcaiRam0P/PvmD7sMKKSmA45H6YJnA9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KxgNF/dJMcaiRam0P/PvmD7sMKKSmA45H6YJnA9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KxgNF/dJMcaiRam0P/PvmD7sMKKSmA45H6YJnA9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKxgNF%2FdJMcaiRam0P%2FPvmD7sMKKSmA45H6YJnA9k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;647&quot; height=&quot;175&quot; data-origin-width=&quot;647&quot; data-origin-height=&quot;175&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;UpdateStatusMessage 함수&lt;/b&gt;의 로직은 위와 같다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;인자로 받은 &lt;span style=&quot;color: #0593d3;&quot;&gt;문자열&lt;/span&gt;을 &lt;span style=&quot;color: #0593d3;&quot;&gt;TextBlock&lt;/span&gt; UI에 적용&lt;/b&gt;하고 &lt;b&gt;인자로 받은 &lt;span style=&quot;color: #0593d3;&quot;&gt;불리언 값&lt;/span&gt;에 따라 &lt;span style=&quot;color: #0593d3;&quot;&gt;버튼&lt;/span&gt; UI를 활성화&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5) SignInOverlay 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfhB4Z/dJMcacQVSW3/2Wxr8kknWSkfcBrvwI9DA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfhB4Z/dJMcacQVSW3/2Wxr8kknWSkfcBrvwI9DA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfhB4Z/dJMcacQVSW3/2Wxr8kknWSkfcBrvwI9DA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfhB4Z%2FdJMcacQVSW3%2F2Wxr8kknWSkfcBrvwI9DA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1132&quot; height=&quot;492&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;492&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;NativeConstruct 함수&lt;/b&gt;에 위와 같이 로직을 추가하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;회원가입 페이지 UI&lt;/span&gt;의 UpdateStatusMessage 함수&lt;/b&gt;를&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt; Portal 중재자&lt;/span&gt; 클래스의 델리게이트에 연결&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 최종 실행 결과&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;677&quot; data-origin-height=&quot;662&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lPDGk/dJMcag6SY9I/yLYlZrrTz2Jf0t0I1Rnl91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lPDGk/dJMcag6SY9I/yLYlZrrTz2Jf0t0I1Rnl91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lPDGk/dJMcag6SY9I/yLYlZrrTz2Jf0t0I1Rnl91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlPDGk%2FdJMcag6SY9I%2FyLYlZrrTz2Jf0t0I1Rnl91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;677&quot; height=&quot;662&quot; data-origin-width=&quot;677&quot; data-origin-height=&quot;662&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 &lt;b&gt;에디터에서 회원가입에 &lt;span style=&quot;color: #409d00;&quot;&gt;필요한 정보&lt;/span&gt;를 입력하고 회원가입&lt;/b&gt;을 진행한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1505&quot; data-origin-height=&quot;271&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMIOaI/dJMcadWCC74/4claPfJStDl4wD5wGJd8vk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMIOaI/dJMcadWCC74/4claPfJStDl4wD5wGJd8vk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMIOaI/dJMcadWCC74/4claPfJStDl4wD5wGJd8vk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMIOaI%2FdJMcadWCC74%2F4claPfJStDl4wD5wGJd8vk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1505&quot; height=&quot;271&quot; data-origin-width=&quot;1505&quot; data-origin-height=&quot;271&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AWS 콘솔에 접속&lt;/b&gt;하여 &lt;b&gt;AWS Cognito - 사용자 풀에서 &lt;span style=&quot;color: #409d00;&quot;&gt;새로 추가된 사용자&lt;/span&gt;를 확인&lt;/b&gt;할 수 있다&lt;/p&gt;</description>
      <category>언리얼 엔진 - 게임 프로젝트/AWS GameLift를 활용한 데디케이트 FPS 프로젝트</category>
      <category>AWS를 활용한 FPS 게임</category>
      <author>monstro</author>
      <guid isPermaLink="true">https://monstrosite.tistory.com/1299</guid>
      <comments>https://monstrosite.tistory.com/1299#entry1299comment</comments>
      <pubDate>Thu, 11 Jun 2026 16:30:13 +0900</pubDate>
    </item>
    <item>
      <title>AWS Cognito - 11) 중재자 클래스 분리 + Cognito 반환값 구조체</title>
      <link>https://monstrosite.tistory.com/1298</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 알아본&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt; 관심사 분리&lt;/span&gt;를 적용&lt;/b&gt;하여 &lt;b&gt;GameSession의&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;중간 단계&lt;/span&gt;를 처리하는 &lt;span style=&quot;color: #ee2323;&quot;&gt;Portal&lt;/span&gt; 중재자&lt;/b&gt;와&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;GameSession 관련 작업&lt;/span&gt;을 처리하는 중재자로 분리&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또,&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt; AWS Cognito&lt;/span&gt; 관련 작업에 대한 &lt;span style=&quot;color: #ee2323;&quot;&gt;데이터를&amp;nbsp;저장&lt;/span&gt;하는 구조체를 추가&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 스크립트 작업&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) HTTPRequestTypes 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;347&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IyzuD/dJMcahkucJD/2JORKapsamAvNFPhSKmYN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IyzuD/dJMcahkucJD/2JORKapsamAvNFPhSKmYN0/img.png&quot; data-alt=&quot;회원가입 관련 구조체&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IyzuD/dJMcahkucJD/2JORKapsamAvNFPhSKmYN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIyzuD%2FdJMcahkucJD%2F2JORKapsamAvNFPhSKmYN0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;347&quot; height=&quot;630&quot; data-origin-width=&quot;347&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;회원가입 관련 구조체&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AWS Cognito의 &lt;span style=&quot;color: #ef5369;&quot;&gt;회원가입&lt;/span&gt; 관련 구조체&lt;/b&gt;를 2개 추가한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt; FCodeDeliveryDetails&lt;/span&gt; 구조체를 사용&lt;/b&gt;하여&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt; 인증 코드&lt;/span&gt;가 &lt;span style=&quot;color: #ef5369;&quot;&gt;어디로 어떻게 발송되었는지&lt;/span&gt;에 대해 저장&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt; FDSSignUpResponse&lt;/span&gt; 구조체를 사용&lt;/b&gt;하여 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;회원가입 요청&lt;/span&gt;을 보낸 후 &lt;span style=&quot;color: #ef5369;&quot;&gt;서버로부터 받는 응답&lt;/span&gt;을 저장&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;747&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dCD9m5/dJMcacKeZAj/PQPrjkqrBaKsWWcbSfoh81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dCD9m5/dJMcacKeZAj/PQPrjkqrBaKsWWcbSfoh81/img.png&quot; data-alt=&quot;로그인 및 인증 관련 구조체&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dCD9m5/dJMcacKeZAj/PQPrjkqrBaKsWWcbSfoh81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdCD9m5%2FdJMcacKeZAj%2FPQPrjkqrBaKsWWcbSfoh81%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;327&quot; height=&quot;747&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;747&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로그인 및 인증 관련 구조체&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AWS Cognito의 &lt;span style=&quot;color: #ef5369;&quot;&gt;로그인 + 인증 관련&lt;/span&gt; 구조체&lt;/b&gt;를 2개 추가한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt; FDSNewDeviceMetaData&lt;/span&gt; 구조체를 사용&lt;/b&gt;하여 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;새로운 기기&lt;/span&gt;나 &lt;span style=&quot;color: #ef5369;&quot;&gt;브라우저&lt;/span&gt;에서 로그인했을 때 &lt;span style=&quot;color: #ef5369;&quot;&gt;기억&lt;/span&gt;하거나 &lt;span style=&quot;color: #ef5369;&quot;&gt;인증&lt;/span&gt;&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt; FDSAuthenticationResult&lt;/span&gt; 구조체를 사용&lt;/b&gt;하여 로그인이 성공했을 때 &lt;b&gt;발급되는 &lt;span style=&quot;color: #ef5369;&quot;&gt;토큰 세트&lt;/span&gt;와&lt;span style=&quot;color: #ef5369;&quot;&gt; 인증 결과&lt;/span&gt;를 저장&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;372&quot; data-origin-height=&quot;571&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xF7Z2/dJMcag6SyCE/V3sPYD5YSbNa0jKXrrCO3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xF7Z2/dJMcag6SyCE/V3sPYD5YSbNa0jKXrrCO3k/img.png&quot; data-alt=&quot;챌린지(추가 인증) 관련 구조체&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xF7Z2/dJMcag6SyCE/V3sPYD5YSbNa0jKXrrCO3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxF7Z2%2FdJMcag6SyCE%2FV3sPYD5YSbNa0jKXrrCO3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;372&quot; height=&quot;571&quot; data-origin-width=&quot;372&quot; data-origin-height=&quot;571&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;챌린지(추가 인증) 관련 구조체&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AWS Cognito의 &lt;span style=&quot;color: #ef5369;&quot;&gt;챌린지(추가 인증)&lt;/span&gt; 관련 구조체&lt;/b&gt;를 추가한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt; FDSChallengeParameters&lt;/span&gt; 구조체&lt;/b&gt;를 사용하여 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;추가 인증시&lt;/span&gt;에 클라이언트에게 &lt;span style=&quot;color: #ef5369;&quot;&gt;요구하는 파라미터&lt;/span&gt;를 저장&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt; FDSInitiateAuthResponse&lt;/span&gt; 구조체&lt;/b&gt;를 사용하여 &lt;b&gt;로그인을 &lt;span style=&quot;color: #ef5369;&quot;&gt;처음 시도&lt;/span&gt;했을 때 서버가 반환하는 &lt;span style=&quot;color: #ef5369;&quot;&gt;전체 응답&lt;/span&gt;을 저장&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;872&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d9MGhR/dJMcadbbu9L/VKkLJFImmkLxtt6yJ66mSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d9MGhR/dJMcadbbu9L/VKkLJFImmkLxtt6yJ66mSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d9MGhR/dJMcadbbu9L/VKkLJFImmkLxtt6yJ66mSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd9MGhR%2FdJMcadbbu9L%2FVKkLJFImmkLxtt6yJ66mSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;747&quot; height=&quot;872&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;872&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가한 각 구조체들의 &lt;b&gt;Dump 함수&lt;/b&gt;를 위와 같이 정의한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;멤버변수들을 &lt;span style=&quot;color: #ef5369;&quot;&gt;로그&lt;/span&gt;로 찍어 출력&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) SignInOverlay 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;752&quot; data-origin-height=&quot;131&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WAfb8/dJMcaar6jPu/GG5mWCBph9iYxPZqIiKuRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WAfb8/dJMcaar6jPu/GG5mWCBph9iYxPZqIiKuRk/img.png&quot; data-alt=&quot;제거하는 함수&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WAfb8/dJMcaar6jPu/GG5mWCBph9iYxPZqIiKuRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWAfb8%2FdJMcaar6jPu%2FGG5mWCBph9iYxPZqIiKuRk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;752&quot; height=&quot;131&quot; data-origin-width=&quot;752&quot; data-origin-height=&quot;131&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;제거하는 함수&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;로그인 UI에 존재하던&lt;span style=&quot;color: #006dd7;&quot;&gt; GameSession 관련 2개의 함수&lt;/span&gt;를 제거&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;652&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmvd9v/dJMcafz98jx/Q4QV6GOegJVKhoBswQ7wh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmvd9v/dJMcafz98jx/Q4QV6GOegJVKhoBswQ7wh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmvd9v/dJMcafz98jx/Q4QV6GOegJVKhoBswQ7wh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcmvd9v%2FdJMcafz98jx%2FQ4QV6GOegJVKhoBswQ7wh0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1266&quot; height=&quot;652&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;652&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;NativeConstruct 함수&lt;/b&gt;에서 &lt;b&gt;버튼에&lt;span style=&quot;color: #006dd7;&quot;&gt; GameSesssion 관련 함수&lt;/span&gt;를 바인드하는 로직을 제거&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3) PortalManager 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1208&quot; data-origin-height=&quot;777&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kOnut/dJMcaayRTSh/sECE8mUXh7Xfl13h7LQDWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kOnut/dJMcaayRTSh/sECE8mUXh7Xfl13h7LQDWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kOnut/dJMcaayRTSh/sECE8mUXh7Xfl13h7LQDWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkOnut%2FdJMcaayRTSh%2FsECE8mUXh7Xfl13h7LQDWK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1208&quot; height=&quot;777&quot; data-origin-width=&quot;1208&quot; data-origin-height=&quot;777&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;GameSession의 중간 단계&lt;/span&gt;를 처리하는 &lt;span style=&quot;color: #0593d3;&quot;&gt;Portal의 중재자&lt;/span&gt; 클래스&lt;/b&gt;에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;GameSession&lt;/span&gt; 관련 멤버변수와 함수, 델리게이트를 제거&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;457&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceRMUW/dJMcaf1bkNQ/yWMBfukXskeM2O8HNEYHVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceRMUW/dJMcaf1bkNQ/yWMBfukXskeM2O8HNEYHVK/img.png&quot; data-alt=&quot;Portal 중재자 클래스의 cpp 파일&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceRMUW/dJMcaf1bkNQ/yWMBfukXskeM2O8HNEYHVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceRMUW%2FdJMcaf1bkNQ%2FyWMBfukXskeM2O8HNEYHVK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;742&quot; height=&quot;457&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;457&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Portal 중재자 클래스의 cpp 파일&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;Portal의 중재자&lt;/span&gt; 클래스의 &lt;span style=&quot;color: #0593d3;&quot;&gt;cpp&lt;/span&gt; 파일&lt;/b&gt;은 위와 같이 구성된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4) GameSessionsManager 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1072&quot; data-origin-height=&quot;477&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buIXGN/dJMcafmExAJ/ZtSbnxwiV2NbvQ1owKth10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buIXGN/dJMcafmExAJ/ZtSbnxwiV2NbvQ1owKth10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buIXGN/dJMcafmExAJ/ZtSbnxwiV2NbvQ1owKth10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuIXGN%2FdJMcafmExAJ%2FZtSbnxwiV2NbvQ1owKth10%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1072&quot; height=&quot;477&quot; data-origin-width=&quot;1072&quot; data-origin-height=&quot;477&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Portal 중재자 클래스에서 &lt;b&gt;제거한 &lt;span style=&quot;color: #009a87;&quot;&gt;GameSession&lt;/span&gt; 관련 요소&lt;/b&gt;를 &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;GameSessions 중재자&lt;/span&gt; 클래스로 이주&lt;/b&gt;하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;265&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmFTvg/dJMcafmExFy/kJAtusEK0HO6Gu6iM8t2e1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmFTvg/dJMcafmExFy/kJAtusEK0HO6Gu6iM8t2e1/img.png&quot; data-alt=&quot;GameSessions 중재자 클래스의 cpp 파일 일부&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmFTvg/dJMcafmExFy/kJAtusEK0HO6Gu6iM8t2e1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmFTvg%2FdJMcafmExFy%2FkJAtusEK0HO6Gu6iM8t2e1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;857&quot; height=&quot;265&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;265&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;GameSessions 중재자 클래스의 cpp 파일 일부&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;GameSession&lt;/span&gt; 함수 정의부를 &lt;span style=&quot;color: #009a87;&quot;&gt;GameSessions 중재자&lt;/span&gt; 클래스의 &lt;span style=&quot;color: #009a87;&quot;&gt;cpp&lt;/span&gt; 파일로 이주&lt;/b&gt;하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 블루프린트 작업&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) BP_PortalManager 블루프린트&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1122&quot; data-origin-height=&quot;110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSfn7v/dJMcafmExMw/zSHkzbWnVfJBgQ3RgP96Ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSfn7v/dJMcafmExMw/zSHkzbWnVfJBgQ3RgP96Ek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSfn7v/dJMcafmExMw/zSHkzbWnVfJBgQ3RgP96Ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSfn7v%2FdJMcafmExMw%2FzSHkzbWnVfJBgQ3RgP96Ek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1122&quot; height=&quot;110&quot; data-origin-width=&quot;1122&quot; data-origin-height=&quot;110&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;PortalAPI&lt;/span&gt; 데이터 애셋을 사용&lt;/b&gt;하도록 수정한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) BP_GameSessionsManager 블루프린트&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1100&quot; data-origin-height=&quot;112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Sh6dF/dJMcaffTiRp/izKLErqaD6KG6kwDGopCy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Sh6dF/dJMcaffTiRp/izKLErqaD6KG6kwDGopCy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Sh6dF/dJMcaffTiRp/izKLErqaD6KG6kwDGopCy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSh6dF%2FdJMcaffTiRp%2FizKLErqaD6KG6kwDGopCy1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1100&quot; height=&quot;112&quot; data-origin-width=&quot;1100&quot; data-origin-height=&quot;112&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;GameSessions 중재자&lt;/span&gt; 클래스의 블루프린트를 생성&lt;/b&gt;하고 &lt;b&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;GameSessionsAPI&lt;/span&gt; 데이터 애셋을 사용&lt;/b&gt;하도록 설정한다&lt;/p&gt;</description>
      <category>언리얼 엔진 - 게임 프로젝트/AWS GameLift를 활용한 데디케이트 FPS 프로젝트</category>
      <category>AWS를 활용한 FPS 게임</category>
      <author>monstro</author>
      <guid isPermaLink="true">https://monstrosite.tistory.com/1298</guid>
      <comments>https://monstrosite.tistory.com/1298#entry1298comment</comments>
      <pubDate>Thu, 11 Jun 2026 11:34:07 +0900</pubDate>
    </item>
    <item>
      <title>유니티 엔진의 구성 - 47) Remote Config</title>
      <link>https://monstrosite.tistory.com/1297</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Remote Config&lt;/b&gt;는 &lt;span data-path-to-node=&quot;3,1,0,0&quot;&gt;&lt;/span&gt;&lt;span data-path-to-node=&quot;3,1,1,0&quot;&gt;게임 빌드를 새로 바꾸지 않고도 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-path-to-node=&quot;3,1,1,0&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;유니티 대시보드&lt;/span&gt;에서&lt;span style=&quot;color: #ee2323;&quot;&gt; 게임 내 필드 값&lt;/span&gt;을 &lt;span style=&quot;color: #ee2323;&quot;&gt;실시간&lt;/span&gt;으로 수정할 수 있는 서비스&lt;/b&gt;를 의미한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-path-to-node=&quot;3,1,1,0&quot;&gt;주로 &lt;b&gt;게임의 밸런싱&lt;/b&gt;이나, &lt;b&gt;보상 수정&lt;/b&gt;, &lt;b&gt;게임을 덮어씌우는 용도&lt;/b&gt;로 사용할 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span data-path-to-node=&quot;3,1,1,0&quot;&gt;- Remote Config 사용 절차&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span data-path-to-node=&quot;3,1,1,0&quot;&gt;1) 패키지 설치 및 설정&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnv82X/dJMcafmEcri/E0dlKWC7lv9fkQvdtGxkTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnv82X/dJMcafmEcri/E0dlKWC7lv9fkQvdtGxkTk/img.png&quot; data-alt=&quot;Remote Config 패키지 설치&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnv82X/dJMcafmEcri/E0dlKWC7lv9fkQvdtGxkTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcnv82X%2FdJMcafmEcri%2FE0dlKWC7lv9fkQvdtGxkTk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;606&quot; height=&quot;200&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Remote Config 패키지 설치&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지 매니저를 통해 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;Remote Config&lt;/span&gt; 패키지를 설치&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1707&quot; data-origin-height=&quot;602&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xlpwE/dJMcahdFYzz/ufrdEBluqqkq1E1YiNlvZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xlpwE/dJMcahdFYzz/ufrdEBluqqkq1E1YiNlvZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xlpwE/dJMcahdFYzz/ufrdEBluqqkq1E1YiNlvZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxlpwE%2FdJMcahdFYzz%2FufrdEBluqqkq1E1YiNlvZ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1707&quot; height=&quot;602&quot; data-origin-width=&quot;1707&quot; data-origin-height=&quot;602&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;상단의 &lt;span style=&quot;color: #ef5369;&quot;&gt;Project Settings&lt;/span&gt; - &lt;span style=&quot;color: #ef5369;&quot;&gt;Services&lt;/span&gt;에서 프로젝트에 대한 &lt;span style=&quot;color: #ef5369;&quot;&gt;Organization&lt;/span&gt;과 &lt;span style=&quot;color: #ef5369;&quot;&gt;Project ID&lt;/span&gt;를 연결&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;761&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGeYfv/dJMcaaMmmpF/RckzK65QZd2k110grtIzI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGeYfv/dJMcaaMmmpF/RckzK65QZd2k110grtIzI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGeYfv/dJMcaaMmmpF/RckzK65QZd2k110grtIzI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGeYfv%2FdJMcaaMmmpF%2FRckzK65QZd2k110grtIzI1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;747&quot; height=&quot;761&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;761&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;상단 &lt;span style=&quot;color: #ef5369;&quot;&gt;Window&lt;/span&gt; - &lt;span style=&quot;color: #ef5369;&quot;&gt;Remote Config&lt;/span&gt; 탭&lt;/b&gt;을 눌러 Remote Config 탭을 열 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;하단의 &lt;span style=&quot;color: #ef5369;&quot;&gt;Add Setting&lt;/span&gt; 버튼을 눌러 프로젝트에서 사용하는 &lt;span style=&quot;color: #ef5369;&quot;&gt;필드&lt;/span&gt;와 &lt;span style=&quot;color: #ef5369;&quot;&gt;그 값&lt;/span&gt;을 추가&lt;/b&gt;할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;222&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WTIGJ/dJMcahrepZv/q9FjSsGeR3QHcgBUp0dO90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WTIGJ/dJMcahrepZv/q9FjSsGeR3QHcgBUp0dO90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WTIGJ/dJMcahrepZv/q9FjSsGeR3QHcgBUp0dO90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWTIGJ%2FdJMcahrepZv%2Fq9FjSsGeR3QHcgBUp0dO90%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;742&quot; height=&quot;222&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;222&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가한 필드에서는 &lt;b&gt;사용하는 &lt;span style=&quot;color: #ef5369;&quot;&gt;데이터의 자료형&lt;/span&gt;에 따라 &lt;span style=&quot;color: #ef5369;&quot;&gt;Type&lt;/span&gt;을 설정&lt;/b&gt;할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;Key&lt;/span&gt;를 통해 데이터를 &lt;span style=&quot;color: #ef5369;&quot;&gt;탐색&lt;/span&gt;&lt;/b&gt;하고, &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;Value&lt;/span&gt;를 통해 &lt;span style=&quot;color: #ef5369;&quot;&gt;데이터의 값&lt;/span&gt;을 설정&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) 필드 추가 및 사용&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2 - 1) Push - 로컬에서 서버로 데이터를 업로드&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;70&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cer7Pd/dJMcadvtuWV/ysI0XIbdHquRqI3GzVwDmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cer7Pd/dJMcadvtuWV/ysI0XIbdHquRqI3GzVwDmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cer7Pd/dJMcadvtuWV/ysI0XIbdHquRqI3GzVwDmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcer7Pd%2FdJMcadvtuWV%2FysI0XIbdHquRqI3GzVwDmK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;745&quot; height=&quot;70&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;70&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;playerSpeed&lt;/span&gt; 데이터를 추가하고 값을 설정&lt;/b&gt;하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;777&quot; data-origin-height=&quot;197&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BuCYG/dJMcabLlEyV/lEA5KWRRubRX5H49CfKqF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BuCYG/dJMcabLlEyV/lEA5KWRRubRX5H49CfKqF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BuCYG/dJMcabLlEyV/lEA5KWRRubRX5H49CfKqF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBuCYG%2FdJMcabLlEyV%2FlEA5KWRRubRX5H49CfKqF1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;777&quot; height=&quot;197&quot; data-origin-width=&quot;777&quot; data-origin-height=&quot;197&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트의 데이터에 대해 위와 같이 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Push&lt;/span&gt;와 &lt;span style=&quot;color: #006dd7;&quot;&gt;Pull&lt;/span&gt;을 선택&lt;/b&gt;할 수 있다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Push&lt;/span&gt; : &lt;span style=&quot;color: #006dd7;&quot;&gt;로컬&lt;/span&gt;에서 변경한 설정을 &lt;span style=&quot;color: #006dd7;&quot;&gt;서버&lt;/span&gt;로 &lt;span style=&quot;color: #006dd7;&quot;&gt;업로드&lt;/span&gt;하는 용도&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Pull&lt;/span&gt; : &lt;span style=&quot;color: #006dd7;&quot;&gt;서버&lt;/span&gt;에서 변경한 설정을 &lt;span style=&quot;color: #006dd7;&quot;&gt;로컬&lt;/span&gt;로 &lt;span style=&quot;color: #006dd7;&quot;&gt;업로드&lt;/span&gt;하는 용도&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1287&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcfb4p/dJMcadWBRHz/XuoEGHKKKWRPuQToErJKnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcfb4p/dJMcadWBRHz/XuoEGHKKKWRPuQToErJKnK/img.png&quot; data-alt=&quot;로컬에서의 Push 실행 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcfb4p/dJMcadWBRHz/XuoEGHKKKWRPuQToErJKnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbcfb4p%2FdJMcadWBRHz%2FXuoEGHKKKWRPuQToErJKnK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1287&quot; height=&quot;242&quot; data-origin-width=&quot;1287&quot; data-origin-height=&quot;242&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로컬에서의 Push 실행 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 &lt;b&gt;유니티 대시보드에서 &lt;span style=&quot;color: #006dd7;&quot;&gt;Push된 데이터&lt;/span&gt;를 확인&lt;/b&gt;할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2 - 2) Publish - 서버에서 로컬로 데이터를 배포&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1322&quot; data-origin-height=&quot;527&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQfWnT/dJMcaaZTscN/JK8OLKZVdP4Ri1NfCsVId1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQfWnT/dJMcaaZTscN/JK8OLKZVdP4Ri1NfCsVId1/img.png&quot; data-alt=&quot;서버에서의 키 생성 + Publish&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQfWnT/dJMcaaZTscN/JK8OLKZVdP4Ri1NfCsVId1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQfWnT%2FdJMcaaZTscN%2FJK8OLKZVdP4Ri1NfCsVId1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1322&quot; height=&quot;527&quot; data-origin-width=&quot;1322&quot; data-origin-height=&quot;527&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;서버에서의 키 생성 + Publish&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;유니티 대시보드&lt;/b&gt;에서&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt; Add Key&lt;/span&gt;를 선택하여 데이터를 &lt;span style=&quot;color: #006dd7;&quot;&gt;추가&lt;/span&gt;&lt;/b&gt;하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Publish&lt;/span&gt;를 선택하여 추가한 데이터를 로컬에 &lt;span style=&quot;color: #006dd7;&quot;&gt;배포&lt;/span&gt;&lt;/b&gt;할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m3TI8/dJMcageKLma/kEKoZDGKNIMIcfYEsUuBC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m3TI8/dJMcageKLma/kEKoZDGKNIMIcfYEsUuBC0/img.png&quot; data-alt=&quot;로컬에서의 Pull 실행 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m3TI8/dJMcageKLma/kEKoZDGKNIMIcfYEsUuBC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm3TI8%2FdJMcageKLma%2FkEKoZDGKNIMIcfYEsUuBC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;779&quot; height=&quot;150&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로컬에서의 Pull 실행 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;로컬에서 &lt;span style=&quot;color: #006dd7;&quot;&gt;Pull&lt;/span&gt;을 실행&lt;/b&gt;하면 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;서버&lt;/span&gt;에서 추가한 데이터가 문제없이 로컬로 &lt;span style=&quot;color: #006dd7;&quot;&gt;배포&lt;/span&gt;&lt;/b&gt;된 것을 확인할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3) 스크립트를 통한 Remote Config 사용&lt;/h3&gt;
&lt;pre id=&quot;code_1781088335597&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Test : MonoBehaviour
{
    private const string PLAYER_SPEED = &quot;playerSpeed&quot;;
    private const string SCORE = &quot;Score&quot;;

    public struct UserAttributes
    { 
        // ...
    }

    public struct AppAttributes
    { 
        // ...
    }

    private async void Awake()
    {
        await UnityServices.InitializeAsync();

        await AuthenticationService.Instance.SignInAnonymouslyAsync();

        RuntimeConfig runtimeConfig = await RemoteConfigService.Instance.FetchConfigsAsync
        (
            new UserAttributes(),
            new AppAttributes()
        );

        Debug.Log(&quot;playerSpeed : &quot; + runtimeConfig.GetFloat(PLAYER_SPEED));
        Debug.Log(&quot;score : &quot; + runtimeConfig.GetInt(SCORE));
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 &lt;b&gt;코드를 구성&lt;/b&gt;하였다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;Remote Config&lt;/span&gt;에 등록된 데이터의 &lt;span style=&quot;color: #0593d3;&quot;&gt;Key&lt;/span&gt;를 의미하는 &lt;span style=&quot;color: #0593d3;&quot;&gt;상수 문자열&lt;/span&gt; 변수 추가&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Awake 함수 로직&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt; UnityServices.InitializeAsync&lt;/span&gt; 함수를 호출하여 &lt;span style=&quot;color: #0593d3;&quot;&gt;유니티 백엔드 서비스&lt;/span&gt; 초기화&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt; AuthenticationService.Instance.SignInAnonymouslyAsync&lt;/span&gt; 함수를 호출하여 &lt;span style=&quot;color: #0593d3;&quot;&gt;익명 로그인&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt; RemoteConfigService.Instance.FetchConfigsAsync&lt;/span&gt; 함수를 호출하여 &lt;span style=&quot;color: #0593d3;&quot;&gt;서버&lt;/span&gt;에서 &lt;span style=&quot;color: #0593d3;&quot;&gt;데이터 값 반환&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;Key&lt;/span&gt; 상수 문자열을 이용하여 &lt;span style=&quot;color: #0593d3;&quot;&gt;데이터의 값&lt;/span&gt; 출력&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 최종 실행 결과&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;307&quot; data-origin-height=&quot;95&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Qvd5y/dJMcahEGFOt/N5aiU3PDmraTocQNYjasQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Qvd5y/dJMcahEGFOt/N5aiU3PDmraTocQNYjasQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Qvd5y/dJMcahEGFOt/N5aiU3PDmraTocQNYjasQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQvd5y%2FdJMcahEGFOt%2FN5aiU3PDmraTocQNYjasQ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;307&quot; height=&quot;95&quot; data-origin-width=&quot;307&quot; data-origin-height=&quot;95&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종 실행 결과는 위와 같다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Remote Config&lt;/b&gt;를 통해 &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;원격&lt;/span&gt;에서 등록한 &lt;span style=&quot;color: #009a87;&quot;&gt;데이터의 값&lt;/span&gt;을 출력&lt;/b&gt;하였다&lt;/p&gt;</description>
      <category>유니티 엔진/유니티 엔진의 구성</category>
      <category>유니티 엔진의 구성</category>
      <author>monstro</author>
      <guid isPermaLink="true">https://monstrosite.tistory.com/1297</guid>
      <comments>https://monstrosite.tistory.com/1297#entry1297comment</comments>
      <pubDate>Wed, 10 Jun 2026 19:55:37 +0900</pubDate>
    </item>
    <item>
      <title>캐릭터 얼굴에서 발생한 왜곡 보정</title>
      <link>https://monstrosite.tistory.com/1296</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;원근 보정 매핑&lt;/span&gt;을 적용&lt;/b&gt;하여 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;왜곡&lt;/span&gt;이 발생한 캐릭터의 얼굴을 보정&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 문제 상황&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;515&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmvXxf/dJMcaaFEAlH/bo1jysSdXgn8NKSZF368S0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmvXxf/dJMcaaFEAlH/bo1jysSdXgn8NKSZF368S0/img.png&quot; data-alt=&quot;DrawTriangle3D 함수의 로직 일부&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmvXxf/dJMcaaFEAlH/bo1jysSdXgn8NKSZF368S0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmvXxf%2FdJMcaaFEAlH%2Fbo1jysSdXgn8NKSZF368S0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;877&quot; height=&quot;515&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;515&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DrawTriangle3D 함수의 로직 일부&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;메시를 &lt;span style=&quot;color: #ef5369;&quot;&gt;구성하는 삼각형&lt;/span&gt;을 그리는 DrawTriangle3D 함수&lt;/b&gt;의 일부 로직은 위와 같다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삼각형을 구성하는 &lt;b&gt;세 개의 점의 &lt;span style=&quot;color: #ef5369;&quot;&gt;무게중심좌표의 값&lt;/span&gt;이 &lt;span style=&quot;color: #ef5369;&quot;&gt;[0, 1]&lt;/span&gt;의 범위내에 있는 경우&lt;/b&gt;에만&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;해당 픽셀의&lt;span style=&quot;color: #ef5369;&quot;&gt; 최종 UV 값&lt;/span&gt;을 계산&lt;/b&gt;하도록 로직을 구성하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;위와 같은 텍스처 매핑 기법을 &quot;&lt;span style=&quot;color: #ef5369;&quot;&gt;아핀 텍스처 매핑&lt;/span&gt;&quot;이라고 표현&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;bandicam 2026-06-10 16-28-21-884.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;474&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPqaHh/dJMcagFRQih/8nLrtRvH9KRlmZzPgjhiH0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPqaHh/dJMcagFRQih/8nLrtRvH9KRlmZzPgjhiH0/img.gif&quot; data-alt=&quot;왜곡이 발생&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPqaHh/dJMcagFRQih/8nLrtRvH9KRlmZzPgjhiH0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bPqaHh/dJMcagFRQih/8nLrtRvH9KRlmZzPgjhiH0/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;474&quot; data-filename=&quot;bandicam 2026-06-10 16-28-21-884.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;474&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;왜곡이 발생&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;아핀 텍스처 매핑&lt;/span&gt;을 수행&lt;/b&gt;하면 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;깊이 값&lt;/span&gt;을 고려하지 않아 위와 같이 &lt;span style=&quot;color: #ef5369;&quot;&gt;왜곡&lt;/span&gt;이 발생&lt;/b&gt;하는 것을 확인할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 원근 보정 매핑의 사용&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1052&quot; data-origin-height=&quot;706&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S83xA/dJMcajidUSs/F06uwOpz6ZzkpjuMPyJwIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S83xA/dJMcajidUSs/F06uwOpz6ZzkpjuMPyJwIk/img.png&quot; data-alt=&quot;DrawTriangle3D 함수의 로직 일부&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S83xA/dJMcajidUSs/F06uwOpz6ZzkpjuMPyJwIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS83xA%2FdJMcajidUSs%2FF06uwOpz6ZzkpjuMPyJwIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1052&quot; height=&quot;706&quot; data-origin-width=&quot;1052&quot; data-origin-height=&quot;706&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DrawTriangle3D 함수의 로직 일부&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메시를 구성하는 삼각형을 그리는&lt;b&gt; DrawTriangle3D 함수&lt;/b&gt;의 로직을 위와 같이 수정한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이전에는 &lt;span style=&quot;color: #006dd7;&quot;&gt;무게중심좌표의 값&lt;/span&gt;만을 고려하여 &lt;span style=&quot;color: #006dd7;&quot;&gt;아핀 텍스처 매핑&lt;/span&gt;을 수행&lt;/b&gt;하였지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;추가적으로 &lt;span style=&quot;color: #006dd7;&quot;&gt;뷰 공간의 Z값(깊이값)&lt;/span&gt;도 고려하는 &lt;span style=&quot;color: #006dd7;&quot;&gt;원근 보정 매핑&lt;/span&gt;을 수행&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;수정한 코드&lt;/b&gt;는 다음과 같다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;뷰 공간의 Z값(깊이값)&lt;/span&gt;이 보관된 &lt;span style=&quot;color: #006dd7;&quot;&gt;클립 좌표의&lt;/span&gt; &lt;span style=&quot;color: #006dd7;&quot;&gt;W값의 역수&lt;/span&gt;를 로컬 변수에 각각 저장&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;NDC 공간의 무게중심좌표&lt;/span&gt;에 각각 역수를 곱해 &lt;span style=&quot;color: #006dd7;&quot;&gt;분모 값&lt;/span&gt;을 구하고 &lt;span style=&quot;color: #006dd7;&quot;&gt;z&lt;/span&gt; 로컬 변수에 저장&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;z&lt;/span&gt; 로컬 변수의 &lt;span style=&quot;color: #006dd7;&quot;&gt;역수&lt;/span&gt;를 계산하여 &lt;span style=&quot;color: #006dd7;&quot;&gt;invZ&lt;/span&gt; 로컬 변수에 저장&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;W값의 역수&lt;/span&gt;를 저장한 로컬 변수들에 &lt;span style=&quot;color: #006dd7;&quot;&gt;무게중심좌표&lt;/span&gt;를 곱하고 추가로 &lt;span style=&quot;color: #006dd7;&quot;&gt;invZ&lt;/span&gt; 변수를 곱하는 연산을 진행&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;최종적으로 &lt;span style=&quot;color: #006dd7;&quot;&gt;뷰 공간&lt;/span&gt;에서&lt;span style=&quot;color: #006dd7;&quot;&gt; 보간된 무게중심좌표&lt;/span&gt;를 계산하고 &lt;span style=&quot;color: #006dd7;&quot;&gt;targetUV&lt;/span&gt; 로컬 변수에 저장&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;bandicam 2026-06-10 16-43-36-297.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;474&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YNEbC/dJMcacclgPu/HUV6TZfJDRKYyyfiHAfdL1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YNEbC/dJMcacclgPu/HUV6TZfJDRKYyyfiHAfdL1/img.gif&quot; data-alt=&quot;왜곡이 발생하지 않음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YNEbC/dJMcacclgPu/HUV6TZfJDRKYyyfiHAfdL1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/YNEbC/dJMcacclgPu/HUV6TZfJDRKYyyfiHAfdL1/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;474&quot; data-filename=&quot;bandicam 2026-06-10 16-43-36-297.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;474&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;왜곡이 발생하지 않음&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;원근 보정 매핑&lt;/span&gt;을 사용하면 &lt;span style=&quot;color: #006dd7;&quot;&gt;무게중심좌표&lt;/span&gt; + &lt;span style=&quot;color: #006dd7;&quot;&gt;깊이값&lt;/span&gt;을 고려하여 매핑&lt;/b&gt;하므로&lt;b&gt; 왜곡이 &lt;span style=&quot;color: #000000;&quot;&gt;발생하지 않는&lt;/span&gt;&lt;/b&gt;다&lt;/p&gt;</description>
      <category>수학/이득우의 게임 수학 - 실습 예제</category>
      <category>게임 수학 실습 예제</category>
      <author>monstro</author>
      <guid isPermaLink="true">https://monstrosite.tistory.com/1296</guid>
      <comments>https://monstrosite.tistory.com/1296#entry1296comment</comments>
      <pubDate>Wed, 10 Jun 2026 16:46:19 +0900</pubDate>
    </item>
    <item>
      <title>원근 투영 (4) - 원근 보정 매핑</title>
      <link>https://monstrosite.tistory.com/1295</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 개요&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;215&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKRS8C/dJMcadIZATt/90iNnaAN8uhFSiF8n3u1xk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKRS8C/dJMcadIZATt/90iNnaAN8uhFSiF8n3u1xk/img.png&quot; data-alt=&quot;이미지 출처 - https://en.wikipedia.org/wiki/Texture_mapping#Affine_texture-mapping&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKRS8C/dJMcadIZATt/90iNnaAN8uhFSiF8n3u1xk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKRS8C%2FdJMcadIZATt%2F90iNnaAN8uhFSiF8n3u1xk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;507&quot; height=&quot;215&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;215&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이미지 출처 - https://en.wikipedia.org/wiki/Texture_mapping#Affine_texture-mapping&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전의 방식을 사용하여 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;깊이 값&lt;/span&gt;을 고려하지 않고 텍스처 매핑을 진행&lt;/b&gt;하는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 &lt;b&gt;격자 무늬가&lt;span style=&quot;color: #ee2323;&quot;&gt; 꺾이거나&lt;/span&gt;&amp;nbsp;캐릭터의 눈과 눈썹이 &lt;span style=&quot;color: #ee2323;&quot;&gt;출렁거리는&lt;/span&gt; 왜곡을 발생&lt;/b&gt;시킨다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 &lt;b&gt;아핀 텍스처 매핑이 &lt;span style=&quot;color: #ee2323;&quot;&gt;깊이 값&lt;/span&gt;을 무시한 채 &lt;span style=&quot;color: #ee2323;&quot;&gt;NDC의 무게중심좌표&lt;/span&gt;로만 텍스처를 &lt;span style=&quot;color: #ee2323;&quot;&gt;선형 보간&lt;/span&gt;하기에 발생&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 문제 원인 파악&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;735&quot; data-origin-height=&quot;661&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Uv9Qq/dJMcageJ8UW/DkjMXqkfsKqhbLguDiLr71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Uv9Qq/dJMcageJ8UW/DkjMXqkfsKqhbLguDiLr71/img.png&quot; data-alt=&quot;시야각에 걸쳐 있는 두 점과 이를 투영한 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Uv9Qq/dJMcageJ8UW/DkjMXqkfsKqhbLguDiLr71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUv9Qq%2FdJMcageJ8UW%2FDkjMXqkfsKqhbLguDiLr71%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;735&quot; height=&quot;661&quot; data-origin-width=&quot;735&quot; data-origin-height=&quot;661&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;시야각에 걸쳐 있는 두 점과 이를 투영한 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제의 원인을 명확히 알아보기 위해 위와 같이&lt;b&gt; 투영 과정을 구성&lt;/b&gt;하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;투영하기 전 사영 공간의 점 &lt;span style=&quot;color: #ef5369;&quot;&gt;P1&lt;/span&gt;과 &lt;span style=&quot;color: #ef5369;&quot;&gt;P2&lt;/span&gt;가 &lt;span style=&quot;color: #ef5369;&quot;&gt;카메라 시야각&lt;/span&gt;에 걸쳐있다고 가정&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;위 2개의 점을&lt;span style=&quot;color: #ef5369;&quot;&gt;&amp;nbsp;투영 평면&lt;/span&gt;에 투영한 점 &lt;span style=&quot;color: #ef5369;&quot;&gt;N1&lt;/span&gt;과 &lt;span style=&quot;color: #ef5369;&quot;&gt;N2&lt;/span&gt;의 &lt;span style=&quot;color: #ef5369;&quot;&gt;NDC 좌표 값&lt;/span&gt;은 각각 &lt;span style=&quot;color: #ef5369;&quot;&gt;-1&lt;/span&gt;과 &lt;span style=&quot;color: #ef5369;&quot;&gt;1&lt;/span&gt;&lt;/b&gt;이 된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;카메라의 정면&lt;/span&gt;에 위치한 사영 공간의 점 &lt;span style=&quot;color: #ef5369;&quot;&gt;P3&lt;/span&gt;를 투영한 NDC 좌표의 점 &lt;span style=&quot;color: #ef5369;&quot;&gt;N3&lt;/span&gt;는&lt;span style=&quot;color: #ef5369;&quot;&gt; 투영 평면의 중심&lt;/span&gt;에 위치&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;341&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/78RQG/dJMcadCc5y8/UEKCuDsfekCVIEi5mkXFxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/78RQG/dJMcadCc5y8/UEKCuDsfekCVIEi5mkXFxk/img.png&quot; data-alt=&quot;뷰 공간의 선을 수평으로 조정해 측정한 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/78RQG/dJMcadCc5y8/UEKCuDsfekCVIEi5mkXFxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F78RQG%2FdJMcadCc5y8%2FUEKCuDsfekCVIEi5mkXFxk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;762&quot; height=&quot;341&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;341&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;뷰 공간의 선을 수평으로 조정해 측정한 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NDC 공간에서 &lt;b&gt;점 &lt;span style=&quot;color: #ef5369;&quot;&gt;N1&lt;/span&gt;과 &lt;span style=&quot;color: #ef5369;&quot;&gt;N2&lt;/span&gt;를 이어 &lt;span style=&quot;color: #ef5369;&quot;&gt;선분&lt;/span&gt;을 생성&lt;/b&gt;하면 &lt;b&gt;선분의 중앙에 위치한 중점 &lt;span style=&quot;color: #ef5369;&quot;&gt;N3&lt;/span&gt;의 무게중심좌표는 &lt;span style=&quot;color: #ef5369;&quot;&gt;0.5&lt;/span&gt;&lt;/b&gt;가 된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 사영 공간에서의 &lt;b&gt;점 &lt;span style=&quot;color: #ef5369;&quot;&gt;P1&lt;/span&gt;과 &lt;span style=&quot;color: #ef5369;&quot;&gt;P2&lt;/span&gt;를 잇는 &lt;span style=&quot;color: #ef5369;&quot;&gt;선분&lt;/span&gt;의 점 &lt;span style=&quot;color: #ef5369;&quot;&gt;P3&lt;/span&gt;의 무게중심좌표는 &lt;span style=&quot;color: #ef5369;&quot;&gt;0.5보다 작은 값&lt;/span&gt;&lt;/b&gt;이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt; 왜곡&lt;/span&gt;이 발생하는 원인은 &lt;span style=&quot;color: #ef5369;&quot;&gt;사영 공간의 무게중심좌표&lt;/span&gt;와 &lt;span style=&quot;color: #ef5369;&quot;&gt;NDC에서의 무게중심좌표&lt;/span&gt;가 다르기 때문&lt;/b&gt;이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 &lt;b&gt;문제를 수정하기 위해&lt;/b&gt;서는 &lt;b&gt;투영되기 이전의 &lt;span style=&quot;color: #ef5369;&quot;&gt;사영 공간&lt;/span&gt;에서의 &lt;span style=&quot;color: #ef5369;&quot;&gt;무게중심좌표&lt;/span&gt;를 사용&lt;/b&gt;해야 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 투영 보정 보간&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) 원리&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;사영 공간&lt;/span&gt;의 &lt;span style=&quot;color: #006dd7;&quot;&gt;무게중심좌표&lt;/span&gt;를 사용&lt;/b&gt;하기 위해서는 다음의 절차를 진행한다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;투영 과정&lt;/span&gt;을 &lt;span style=&quot;color: #006dd7;&quot;&gt;거꾸로 추적&lt;/span&gt;하여 &lt;span style=&quot;color: #006dd7;&quot;&gt;NDC&lt;/span&gt;에서 &lt;span style=&quot;color: #006dd7;&quot;&gt;무게중심좌표&lt;/span&gt;를 계산&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;계산한 &lt;span style=&quot;color: #006dd7;&quot;&gt;무게중심좌표&lt;/span&gt;로부터 &lt;span style=&quot;color: #006dd7;&quot;&gt;사영 공간&lt;/span&gt;의 &lt;span style=&quot;color: #006dd7;&quot;&gt;무게중심좌표&lt;/span&gt;를 계산&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;투영 전의 무게중심좌표&lt;/span&gt;를 계산해 &lt;span style=&quot;color: #006dd7;&quot;&gt;텍스처를 매핑&lt;/span&gt;하는 것을 &quot;&lt;span style=&quot;color: #006dd7;&quot;&gt;투영 보정 보간&lt;/span&gt;&quot;이라고 표현&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;투영 보정 보간의 &lt;b&gt;계산식을 유도하기 위해&lt;/b&gt;서는 &lt;b&gt;반비례 함수 &lt;span style=&quot;color: #006dd7;&quot;&gt;y = -(1/x)&lt;/span&gt;의 성질을 알아볼 필요&lt;/b&gt;가 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) 반비례 함수의 성질&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;881&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HlCXF/dJMcahEF285/Lozgfjr8gqmYRhLLuGE4MK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HlCXF/dJMcahEF285/Lozgfjr8gqmYRhLLuGE4MK/img.png&quot; data-alt=&quot;반비례 함수의 그래프&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HlCXF/dJMcahEF285/Lozgfjr8gqmYRhLLuGE4MK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHlCXF%2FdJMcahEF285%2FLozgfjr8gqmYRhLLuGE4MK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;881&quot; height=&quot;630&quot; data-origin-width=&quot;881&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;반비례 함수의 그래프&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반비례 함수를 &lt;b&gt;그래프로 표현&lt;/b&gt;하면 위와 같이 표현할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;332&quot; data-origin-height=&quot;67&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rt3R4/dJMcacDr7NC/CqmoIVGaf55EOYWuNwThyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rt3R4/dJMcacDr7NC/CqmoIVGaf55EOYWuNwThyk/img.png&quot; data-alt=&quot;X값 4에 대응하는 무게중심좌표 계산식&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rt3R4/dJMcacDr7NC/CqmoIVGaf55EOYWuNwThyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frt3R4%2FdJMcacDr7NC%2FCqmoIVGaf55EOYWuNwThyk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;332&quot; height=&quot;67&quot; data-origin-width=&quot;332&quot; data-origin-height=&quot;67&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;X값 4에 대응하는 무게중심좌표 계산식&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 &lt;b&gt;x축에 위치한 2, 4, 6의 세 가지 수 중&lt;/b&gt;에서 &lt;b&gt;가운데에 위치한 &lt;span style=&quot;color: #0593d3;&quot;&gt;4&lt;/span&gt;의 무게중심좌표 a&lt;/b&gt;는 위 식을 통해 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;0.5&lt;/span&gt;로 계산&lt;/b&gt;된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;422&quot; data-origin-height=&quot;117&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mRhtL/dJMcaiXRyj1/VqzEKhlZIPVI0WRVBtAT5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mRhtL/dJMcaiXRyj1/VqzEKhlZIPVI0WRVBtAT5k/img.png&quot; data-alt=&quot;Y값 -(1/4)에 대응하는 무게중심좌표 계산식&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mRhtL/dJMcaiXRyj1/VqzEKhlZIPVI0WRVBtAT5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmRhtL%2FdJMcaiXRyj1%2FVqzEKhlZIPVI0WRVBtAT5k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;422&quot; height=&quot;117&quot; data-origin-width=&quot;422&quot; data-origin-height=&quot;117&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Y값 -(1/4)에 대응하는 무게중심좌표 계산식&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 4에 대응하는&lt;b&gt; Y값 &lt;span style=&quot;color: #0593d3;&quot;&gt;-(1/4)&lt;/span&gt;에 대응하는 무게중심좌표 a&lt;/b&gt;는 위 식을 통해 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;0.25&lt;/span&gt;로 계산&lt;/b&gt;된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이 식을 응용&lt;/b&gt;하여&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt; Y축&lt;/span&gt;의 무게중심좌표 &lt;span style=&quot;color: #0593d3;&quot;&gt;0.25&lt;/span&gt;로부터 &lt;span style=&quot;color: #0593d3;&quot;&gt;X축&lt;/span&gt;의 무게중심좌표 &lt;span style=&quot;color: #0593d3;&quot;&gt;0.5&lt;/span&gt;를 계산하는 식&lt;/b&gt;을 찾는다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;사영 공간&lt;/span&gt;에서의 무게중심값을 계산&lt;/b&gt;할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;310&quot; data-origin-height=&quot;72&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kzok3/dJMcah5PDAE/y5eQ57RQC1DGVmcXfD06zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kzok3/dJMcah5PDAE/y5eQ57RQC1DGVmcXfD06zk/img.png&quot; data-alt=&quot;Y축의 두 점 사이의 점을 구하는 수식&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kzok3/dJMcah5PDAE/y5eQ57RQC1DGVmcXfD06zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fkzok3%2FdJMcah5PDAE%2Fy5eQ57RQC1DGVmcXfD06zk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;310&quot; height=&quot;72&quot; data-origin-width=&quot;310&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Y축의 두 점 사이의 점을 구하는 수식&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;Y축&lt;/span&gt;에서의 무게중심좌표를 &lt;span style=&quot;color: #0593d3;&quot;&gt;q1&lt;/span&gt;과 &lt;span style=&quot;color: #0593d3;&quot;&gt;q2&lt;/span&gt;로 지정&lt;/b&gt;하고 이를 사용하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Y축의 두 점 &lt;span style=&quot;color: #0593d3;&quot;&gt;y1&lt;/span&gt;과 &lt;span style=&quot;color: #0593d3;&quot;&gt;y2&lt;/span&gt; 사이의 점 &lt;span style=&quot;color: #0593d3;&quot;&gt;y`&lt;/span&gt;를 계산하는 수식&lt;/b&gt;을 위와 같이 정리할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;무게중심좌표의 정의&lt;/b&gt;에서 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;두 무게중심좌표&lt;/span&gt;의 합 &lt;span style=&quot;color: #0593d3;&quot;&gt;q1 +&lt;/span&gt; &lt;span style=&quot;color: #0593d3;&quot;&gt;q2&lt;/span&gt;의 값은 &lt;span style=&quot;color: #0593d3;&quot;&gt;1&lt;/span&gt;&lt;/b&gt;이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;305&quot; data-origin-height=&quot;72&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rDjke/dJMb997Kj12/bVIBvWD20nqrQ7hagdxyV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rDjke/dJMb997Kj12/bVIBvWD20nqrQ7hagdxyV0/img.png&quot; data-alt=&quot;X축의 두 점 사이의 점을 구하는 수식&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rDjke/dJMb997Kj12/bVIBvWD20nqrQ7hagdxyV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrDjke%2FdJMb997Kj12%2FbVIBvWD20nqrQ7hagdxyV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;305&quot; height=&quot;72&quot; data-origin-width=&quot;305&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;X축의 두 점 사이의 점을 구하는 수식&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;X축&lt;/span&gt;에서의 무게중심좌표를 &lt;span style=&quot;color: #0593d3;&quot;&gt;t1&lt;/span&gt;과 &lt;span style=&quot;color: #0593d3;&quot;&gt;t2&lt;/span&gt;로 지정&lt;/b&gt;하고 이를 사용하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;X축&lt;/span&gt;의 &lt;span style=&quot;color: #0593d3;&quot;&gt;두 점 사이&lt;/span&gt;의 점 &lt;span style=&quot;color: #0593d3;&quot;&gt;x`&lt;/span&gt;를 계산하는 수식&lt;/b&gt;을 위와 같이 정리할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;동일하게 &lt;span style=&quot;color: #0593d3;&quot;&gt;t1 + t2&lt;/span&gt;의 값은 &lt;span style=&quot;color: #0593d3;&quot;&gt;1&lt;/span&gt;&lt;/b&gt;이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;317&quot; data-origin-height=&quot;140&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IeOZ0/dJMcaiQ8WxK/ZSCcgAtv2V2D8VOYx92hC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IeOZ0/dJMcaiQ8WxK/ZSCcgAtv2V2D8VOYx92hC1/img.png&quot; data-alt=&quot;x`와 y`는 반비례 관계&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IeOZ0/dJMcaiQ8WxK/ZSCcgAtv2V2D8VOYx92hC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIeOZ0%2FdJMcaiQ8WxK%2FZSCcgAtv2V2D8VOYx92hC1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;317&quot; height=&quot;140&quot; data-origin-width=&quot;317&quot; data-origin-height=&quot;140&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;x`와 y`는 반비례 관계&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 반비례 함수이므로&lt;b&gt; x`와 y`는&lt;span style=&quot;color: #0593d3;&quot;&gt; 반비례&lt;/span&gt; 관계&lt;/b&gt;이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 위와 같이&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt; 각각의 y값&lt;/span&gt;을 &lt;span style=&quot;color: #0593d3;&quot;&gt;x값&lt;/span&gt;으로 표현&lt;/b&gt;할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;332&quot; data-origin-height=&quot;136&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wuBXu/dJMcah5PDQZ/VlGzyjo1cuv6WKAlcMLNDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wuBXu/dJMcah5PDQZ/VlGzyjo1cuv6WKAlcMLNDk/img.png&quot; data-alt=&quot;Y축의 두 점과 무게중심좌표를 사용하여 x`점 계산&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wuBXu/dJMcah5PDQZ/VlGzyjo1cuv6WKAlcMLNDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwuBXu%2FdJMcah5PDQZ%2FVlGzyjo1cuv6WKAlcMLNDk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;332&quot; height=&quot;136&quot; data-origin-width=&quot;332&quot; data-origin-height=&quot;136&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Y축의 두 점과 무게중심좌표를 사용하여 x`점 계산&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 &lt;b&gt;변환한 식을 응용&lt;/b&gt;하여 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;Y축&lt;/span&gt;의 &lt;span style=&quot;color: #0593d3;&quot;&gt;두 점&lt;/span&gt;과 &lt;span style=&quot;color: #0593d3;&quot;&gt;무게중심좌표&lt;/span&gt;를 사용&lt;/b&gt;하여 X축의 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;x`&lt;/span&gt;점의 값을 계산&lt;/b&gt;할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;177&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rcWot/dJMcaalf4sF/9cK9ETh2JHLGUpsRjT6leK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rcWot/dJMcaalf4sF/9cK9ETh2JHLGUpsRjT6leK/img.png&quot; data-alt=&quot;위의 식에서 양변에 분모를 곱한 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rcWot/dJMcaalf4sF/9cK9ETh2JHLGUpsRjT6leK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrcWot%2FdJMcaalf4sF%2F9cK9ETh2JHLGUpsRjT6leK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;362&quot; height=&quot;177&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;177&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;위의 식에서 양변에 분모를 곱한 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 식의 &lt;b&gt;양변에 분모를 곱&lt;/b&gt;하면 위와 같이 식을 변환할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;371&quot; data-origin-height=&quot;92&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AXm1F/dJMcafz9fjN/ySo0neiWfLnUT64Pkl1FSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AXm1F/dJMcafz9fjN/ySo0neiWfLnUT64Pkl1FSK/img.png&quot; data-alt=&quot;두 무게중심좌표의 합이 1임을 이용하여 식을 변환&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AXm1F/dJMcafz9fjN/ySo0neiWfLnUT64Pkl1FSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAXm1F%2FdJMcafz9fjN%2FySo0neiWfLnUT64Pkl1FSK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;371&quot; height=&quot;92&quot; data-origin-width=&quot;371&quot; data-origin-height=&quot;92&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;두 무게중심좌표의 합이 1임을 이용하여 식을 변환&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 식에서 &lt;b&gt;두 무게중심좌표의 합이 1&lt;/b&gt;임을 이용하여 식을 변환할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vbuyr/dJMcagZ38Ee/k772WOpmBlB3Q8i3qvVrF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vbuyr/dJMcagZ38Ee/k772WOpmBlB3Q8i3qvVrF1/img.png&quot; data-alt=&quot;최종 계산식&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vbuyr/dJMcagZ38Ee/k772WOpmBlB3Q8i3qvVrF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvbuyr%2FdJMcagZ38Ee%2Fk772WOpmBlB3Q8i3qvVrF1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;321&quot; height=&quot;102&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;102&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;최종 계산식&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 식에서 &lt;b&gt;양변의 덧셈항을 분리하면 &lt;span style=&quot;color: #0593d3;&quot;&gt;최종 계산식&lt;/span&gt;&lt;/b&gt;을 얻을 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 식을 적용하면&lt;b&gt; X축에서의 무게중심좌표 &lt;span style=&quot;color: #0593d3;&quot;&gt;0.5&lt;/span&gt;가 문제없이 계산&lt;/b&gt;되는 것을 확인할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3) 최종 계산식을 세 점의 조합에 적용&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;497&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GROJ2/dJMcadh2xtM/m03HqAwgRKN8n1VsYN8gN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GROJ2/dJMcadh2xtM/m03HqAwgRKN8n1VsYN8gN1/img.png&quot; data-alt=&quot;최종 계산식을 세 점으로 확장한 수식&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GROJ2/dJMcadh2xtM/m03HqAwgRKN8n1VsYN8gN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGROJ2%2FdJMcadh2xtM%2Fm03HqAwgRKN8n1VsYN8gN1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;497&quot; height=&quot;252&quot; data-origin-width=&quot;497&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;최종 계산식을 세 점으로 확장한 수식&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2)의 최종 계산식을 &lt;b&gt;삼각형을 구성하는 &lt;span style=&quot;color: #009a87;&quot;&gt;세 점의 조합&lt;/span&gt;으로 확장&lt;/b&gt;하여 적용하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;세 점으로 확장한 수식&lt;/b&gt;은 위와 같다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;471&quot; data-origin-height=&quot;210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWG5Z2/dJMcaiKlh1V/ul4azG49sekjNlJM5Ozoh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWG5Z2/dJMcaiKlh1V/ul4azG49sekjNlJM5Ozoh1/img.png&quot; data-alt=&quot;최종 투영 보간 계산식&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWG5Z2/dJMcaiKlh1V/ul4azG49sekjNlJM5Ozoh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWG5Z2%2FdJMcaiKlh1V%2Ful4azG49sekjNlJM5Ozoh1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;471&quot; height=&quot;210&quot; data-origin-width=&quot;471&quot; data-origin-height=&quot;210&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;최종 투영 보간 계산식&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;확장한 최종 계산식을 사용&lt;/b&gt;하여&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt; NDC&lt;/span&gt;에서 구한 무게중심좌표를 &lt;span style=&quot;color: #009a87;&quot;&gt;사영 공간&lt;/span&gt;의 무게중심좌표로 변환&lt;/b&gt;할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;사영 공간&lt;/span&gt;에서 &lt;span style=&quot;color: #009a87;&quot;&gt;NDC&lt;/span&gt;로 변환될 때 나누는 값&lt;/b&gt;은&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt; 뷰 공간&lt;/span&gt;의 &lt;span style=&quot;color: #009a87;&quot;&gt;Z&lt;/span&gt;값&lt;/b&gt;이므로&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확장한 식에서 &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;X&lt;/span&gt;를 &lt;span style=&quot;color: #009a87;&quot;&gt;-Z&lt;/span&gt;로 치환하면 &lt;span style=&quot;color: #009a87;&quot;&gt;최종 투영 보간 계산식&lt;/span&gt;&lt;/b&gt;을 얻을 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 &lt;b&gt;수식을 활용한 텍스처 매핑을 &quot;&lt;span style=&quot;color: #009a87;&quot;&gt;원근 보정 매핑&lt;/span&gt;&quot;이라고 표현&lt;/b&gt;한다&lt;/p&gt;</description>
      <category>수학/이득우의 게임 수학</category>
      <category>게임 수학</category>
      <author>monstro</author>
      <guid isPermaLink="true">https://monstrosite.tistory.com/1295</guid>
      <comments>https://monstrosite.tistory.com/1295#entry1295comment</comments>
      <pubDate>Wed, 10 Jun 2026 11:18:19 +0900</pubDate>
    </item>
    <item>
      <title>레벨 생성 - 최종) 타일 추가와 타일맵의 NavMesh 수정</title>
      <link>https://monstrosite.tistory.com/1294</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;생성할 수 있는 &lt;span style=&quot;color: #ee2323;&quot;&gt;타일의 종류&lt;/span&gt;를 추가&lt;/b&gt;하고&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타일 오브젝트를 &lt;b&gt;다른 타일로 변경하는 경우 &lt;span style=&quot;color: #ee2323;&quot;&gt;Layer&lt;/span&gt;를 수정&lt;/b&gt;하여 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;NavMesh Surface&lt;/span&gt;를 다시 굽는 로직을 추가&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 스크립트 작업&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) TileSetHolder 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;305&quot; data-origin-height=&quot;110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4ApnV/dJMcadvsBBP/fq0DcUzS2dB1OVJkcGemw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4ApnV/dJMcadvsBBP/fq0DcUzS2dB1OVJkcGemw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4ApnV/dJMcadvsBBP/fq0DcUzS2dB1OVJkcGemw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4ApnV%2FdJMcadvsBBP%2Ffq0DcUzS2dB1OVJkcGemw0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;305&quot; height=&quot;110&quot; data-origin-width=&quot;305&quot; data-origin-height=&quot;110&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;타일의 종류&lt;/span&gt;를 모아놓는 컴포넌트의 클래스&lt;/b&gt;에 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;작은 코너&lt;/span&gt; 타일을 추가&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) TileSlotEditor 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;477&quot; data-origin-height=&quot;902&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BJuqe/dJMcadbalk0/9mkE6KDdaibQu7TK7NnNo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BJuqe/dJMcadbalk0/9mkE6KDdaibQu7TK7NnNo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BJuqe/dJMcadbalk0/9mkE6KDdaibQu7TK7NnNo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBJuqe%2FdJMcadbalk0%2F9mkE6KDdaibQu7TK7NnNo1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;477&quot; height=&quot;902&quot; data-origin-width=&quot;477&quot; data-origin-height=&quot;902&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;OnInspectorGUI 함수&lt;/b&gt;에 로직을 추가하여 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;코너&lt;/span&gt; 타일의 UI에 행을 추가&lt;/b&gt;하고 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;작은 타일&lt;/span&gt;로 변경하는 &lt;span style=&quot;color: #006dd7;&quot;&gt;버튼&lt;/span&gt;을 생성&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3) TileSlot 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bX5y1J/dJMcabdm5y1/xB7C9tH0L849sqkRzhD2Jk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bX5y1J/dJMcabdm5y1/xB7C9tH0L849sqkRzhD2Jk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bX5y1J/dJMcabdm5y1/xB7C9tH0L849sqkRzhD2Jk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbX5y1J%2FdJMcabdm5y1%2FxB7C9tH0L849sqkRzhD2Jk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;547&quot; height=&quot;180&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;180&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;GetTileNavMeshSurface 함수&lt;/b&gt;를 추가하여 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;부모 오브젝트&lt;/span&gt;의 &lt;span style=&quot;color: #0593d3;&quot;&gt;NavMeshSurface&lt;/span&gt; 컴포넌트를 반환&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;UpdateNavMeshSurface 함수&lt;/b&gt;를 호출하여 &lt;b&gt;새롭게 &lt;span style=&quot;color: #0593d3;&quot;&gt;NavMesh Surface&lt;/span&gt;를 굽는&lt;/b&gt;다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;155&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beYnts/dJMcadvsBZG/7rleBUuKHT0e1VrdzYrWQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beYnts/dJMcadvsBZG/7rleBUuKHT0e1VrdzYrWQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beYnts/dJMcadvsBZG/7rleBUuKHT0e1VrdzYrWQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeYnts%2FdJMcadvsBZG%2F7rleBUuKHT0e1VrdzYrWQ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;682&quot; height=&quot;155&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;155&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;UpdateTileLayer 함수&lt;/b&gt;를 추가하여 위와 같이 구성하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;GetStaticEditorFlags&lt;/span&gt; 함수를 호출&lt;/b&gt;하여 &lt;b&gt;변경할 타일 오브젝트의 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;물리 / 최적화&lt;/span&gt; 설정을&lt;/span&gt;&amp;nbsp;저장&lt;/b&gt;하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;SetStaticEditorFlags&lt;/span&gt; 함수를 호출&lt;/b&gt;하여 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;변경하기 이전&lt;/span&gt;의 타일 오브젝트에 덮어&lt;/b&gt;씌운다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;491&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdZ1LJ/dJMcagZ3RwQ/iZbyzcKjzdykXak3QJyev0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdZ1LJ/dJMcagZ3RwQ/iZbyzcKjzdykXak3QJyev0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdZ1LJ/dJMcagZ3RwQ/iZbyzcKjzdykXak3QJyev0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdZ1LJ%2FdJMcagZ3RwQ%2FiZbyzcKjzdykXak3QJyev0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;562&quot; height=&quot;491&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;491&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;RotateTile 함수&lt;/b&gt;와&lt;b&gt; AdjustVertical 함수&lt;/b&gt;에 위와 같이 로직을 추가하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;트랜스폼&lt;/span&gt;이 변경되면 &lt;span style=&quot;color: #0593d3;&quot;&gt;NavMesh Surface&lt;/span&gt;를 다시 굽도록 설정&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mRo5Z/dJMcacpTR17/02amjUFrpzLalhN6SGAWK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mRo5Z/dJMcacpTR17/02amjUFrpzLalhN6SGAWK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mRo5Z/dJMcacpTR17/02amjUFrpzLalhN6SGAWK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmRo5Z%2FdJMcacpTR17%2F02amjUFrpzLalhN6SGAWK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;412&quot; height=&quot;350&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;350&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;에디터&lt;/span&gt;인 경우에 위의 함수를 호출&lt;/b&gt;하도록 설정한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;Undo&lt;/span&gt; 또는 &lt;span style=&quot;color: #0593d3;&quot;&gt;Redo&lt;/span&gt;가 실행&lt;/b&gt;되면 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;UpdateNavMeshSurface &lt;/span&gt;함수를 호출하여&lt;span style=&quot;color: #0593d3;&quot;&gt; NavMesh Surface&lt;/span&gt;를 조정&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;666&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRTA0X/dJMcab5y5zf/qIoPczhvuCOU4aKK7dUJik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRTA0X/dJMcab5y5zf/qIoPczhvuCOU4aKK7dUJik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRTA0X/dJMcab5y5zf/qIoPczhvuCOU4aKK7dUJik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRTA0X%2FdJMcab5y5zf%2FqIoPczhvuCOU4aKK7dUJik%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;727&quot; height=&quot;666&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;666&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;SwitchTile &lt;/span&gt;함수의 로직을 일부 분리&lt;/b&gt;하여 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;b&gt;UpdateChildren 함수&lt;/b&gt;를 위와 같이 구성한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이전의 로직에서 &lt;b&gt;부모 오브젝트의&lt;span style=&quot;color: #0593d3;&quot;&gt; 물리 설정&lt;/span&gt;을 저장&lt;/b&gt;하고 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;자식 오브젝트&lt;/span&gt;에 적용&lt;/b&gt;하는 로직을 추가하였다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;최종적으로&lt;b&gt; 자식 오브젝트의 &lt;span style=&quot;color: #0593d3;&quot;&gt;트랜스폼 &lt;/span&gt;+ &lt;span style=&quot;color: #0593d3;&quot;&gt;Layer&lt;/span&gt;를 설정&lt;/b&gt;한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;905&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CJa3u/dJMb9901ejG/nJJMdNi48gGJx6OPfT3V8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CJa3u/dJMb9901ejG/nJJMdNi48gGJx6OPfT3V8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CJa3u/dJMb9901ejG/nJJMdNi48gGJx6OPfT3V8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCJa3u%2FdJMb9901ejG%2FnJJMdNi48gGJx6OPfT3V8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;561&quot; height=&quot;905&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;905&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SwitchTile 함수&lt;/b&gt;의 로직을 위와 같이 구성하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;Undo.RegisterCompleteObjectUndo&lt;/span&gt; 함수를 호출&lt;/b&gt;하여 &lt;b&gt;변경하기 &lt;span style=&quot;color: #0593d3;&quot;&gt;이전의 타일 오브젝트&lt;/span&gt;를 기록&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또, &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;Undo.RecordObject &lt;/span&gt;함수를 호출하여&lt;span style=&quot;color: #0593d3;&quot;&gt; 오브젝트의 변경 사항&lt;/span&gt;을 &lt;span style=&quot;color: #0593d3;&quot;&gt;Undo&lt;/span&gt;에 기록&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 &lt;b&gt;3개의 함수를 호출&lt;/b&gt;하여 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;타일 오브젝트&lt;/span&gt;를 수정한 후&lt;/b&gt;에 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;자식 오브젝트&lt;/span&gt; + &lt;span style=&quot;color: #0593d3;&quot;&gt;Layer &lt;/span&gt;+ &lt;span style=&quot;color: #0593d3;&quot;&gt;NavMesh Surface&lt;/span&gt;를 조정&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4) GridBuilder 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;32&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LoWDB/dJMcaip42Wx/pS2gKBR0H7hlme1OJgvXSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LoWDB/dJMcaip42Wx/pS2gKBR0H7hlme1OJgvXSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LoWDB/dJMcaip42Wx/pS2gKBR0H7hlme1OJgvXSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLoWDB%2FdJMcaip42Wx%2FpS2gKBR0H7hlme1OJgvXSK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;572&quot; height=&quot;32&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;32&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;GetNavMeshSurface 함수&lt;/b&gt;를 추가하여 &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;NavMesh Surface&lt;/span&gt; 컴포넌트를 반환&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;297&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckHveA/dJMb997J2Dy/zC9kz9IbkOKoDBKmVVF3Dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckHveA/dJMb997J2Dy/zC9kz9IbkOKoDBKmVVF3Dk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckHveA/dJMb997J2Dy/zC9kz9IbkOKoDBKmVVF3Dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckHveA%2FdJMb997J2Dy%2FzC9kz9IbkOKoDBKmVVF3Dk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;311&quot; height=&quot;297&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;297&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;UpdateNavMesh 함수&lt;/b&gt;를 호출하여 &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;NavMesh Surface&lt;/span&gt;를 다시 &lt;span style=&quot;color: #009a87;&quot;&gt;굽고&lt;/span&gt;&lt;/b&gt;,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ClearNavMesh 함수&lt;/b&gt;를 호출하여 &lt;b&gt;존재하는 &lt;span style=&quot;color: #009a87;&quot;&gt;NavMesh Surface&lt;/span&gt;를 &lt;span style=&quot;color: #009a87;&quot;&gt;제거&lt;/span&gt;&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;347&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cy2qFB/dJMcagTl1Fi/IPvfEN2qWW5cmhKa8klrU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cy2qFB/dJMcagTl1Fi/IPvfEN2qWW5cmhKa8klrU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cy2qFB/dJMcagTl1Fi/IPvfEN2qWW5cmhKa8klrU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcy2qFB%2FdJMcagTl1Fi%2FIPvfEN2qWW5cmhKa8klrU0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;412&quot; height=&quot;347&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;347&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;에디터&lt;/span&gt;인 경우에 위의 함수를 호출&lt;/b&gt;하도록 설정한다&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;Undo&amp;nbsp;&lt;/span&gt;또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;Redo&lt;/span&gt;가 실행&lt;/b&gt;되면&lt;span style=&quot;color: #009a87;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;UpdateNavMeshSurface&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;함수를 호출하여&lt;span style=&quot;color: #0593d3;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;NavMesh Surface&lt;/span&gt;&lt;/span&gt;를 조정&lt;/b&gt;한다&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;401&quot; data-origin-height=&quot;777&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGmySy/dJMcaaMlqJ7/ICTlUGrqJPYKx9B7KpH4eK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGmySy/dJMcaaMlqJ7/ICTlUGrqJPYKx9B7KpH4eK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGmySy/dJMcaaMlqJ7/ICTlUGrqJPYKx9B7KpH4eK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGmySy%2FdJMcaaMlqJ7%2FICTlUGrqJPYKx9B7KpH4eK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;401&quot; height=&quot;777&quot; data-origin-width=&quot;401&quot; data-origin-height=&quot;777&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;BuildGrid 함수&lt;/b&gt;에 위와 같이 로직을 추가한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타일 맵이 생성되면서 &lt;b&gt;만들어지는 &lt;span style=&quot;color: #009a87;&quot;&gt;다수의 타일 오브젝트&lt;/span&gt;를 &lt;span style=&quot;color: #009a87;&quot;&gt;Undo 그룹&lt;/span&gt;에 기록&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타일 맵이 생성된 후에 &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;UpdateNavMesh&lt;/span&gt; 함수를 호출&lt;/b&gt;하여 &lt;b&gt;NavMesh Surface를 &lt;span style=&quot;color: #009a87;&quot;&gt;생성&lt;/span&gt;&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기록된 Undo 그룹을 &lt;span style=&quot;color: #009a87;&quot;&gt;하나&lt;/span&gt;로 뭉쳐 &lt;span style=&quot;color: #009a87;&quot;&gt;Undo&lt;/span&gt; 또는 &lt;span style=&quot;color: #009a87;&quot;&gt;Redo&lt;/span&gt;할 수 있도록 설정&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;452&quot; data-origin-height=&quot;455&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l1IlO/dJMcacQUnOU/gM53D9cRWcmZVwbSe70dQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l1IlO/dJMcacQUnOU/gM53D9cRWcmZVwbSe70dQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l1IlO/dJMcacQUnOU/gM53D9cRWcmZVwbSe70dQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl1IlO%2FdJMcacQUnOU%2FgM53D9cRWcmZVwbSe70dQK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;452&quot; height=&quot;455&quot; data-origin-width=&quot;452&quot; data-origin-height=&quot;455&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ClearGrid 함수&lt;/b&gt;에 위와 같이 로직을 추가한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타일 맵이 제거되면서 &lt;b&gt;제거되는 &lt;span style=&quot;color: #009a87;&quot;&gt;다수의 타일 오브젝트&lt;/span&gt;를&lt;span style=&quot;color: #009a87;&quot;&gt; Undo 그룹&lt;/span&gt;에 기록&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타일 맵이 제거된 후에&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt; ClearNavMesh&lt;/span&gt; 함수를 호출하여 NavMesh Surface를 &lt;span style=&quot;color: #009a87;&quot;&gt;제거&lt;/span&gt;&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기록된 Undo 그룹을 &lt;span style=&quot;color: #009a87;&quot;&gt;하나&lt;/span&gt;로 뭉쳐 &lt;span style=&quot;color: #009a87;&quot;&gt;Undo&lt;/span&gt; 또는 &lt;span style=&quot;color: #009a87;&quot;&gt;Redo&lt;/span&gt;할 수 있도록 설정&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 애셋 작업&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) GridBuilder 오브젝트&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;550&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EAnx1/dJMcadCcQFM/OM3OIJW38GLEYSBzfWkmF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EAnx1/dJMcadCcQFM/OM3OIJW38GLEYSBzfWkmF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EAnx1/dJMcadCcQFM/OM3OIJW38GLEYSBzfWkmF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEAnx1%2FdJMcadCcQFM%2FOM3OIJW38GLEYSBzfWkmF1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;516&quot; height=&quot;550&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;550&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt; 타일 맵&lt;/span&gt;을 생성하는 오브젝트&lt;/b&gt;에 컴포넌트가 수식될 수 있도록 설정한다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;TileSetHolder&lt;/span&gt; 컴포넌트 : 교체하거나 생성할 &lt;span style=&quot;color: #409d00;&quot;&gt;타일의 종류&lt;/span&gt;를 저장&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;GridBuilder&lt;/span&gt; 컴포넌트 : 지정한 타일로 구성된 &lt;span style=&quot;color: #409d00;&quot;&gt;타일맵&lt;/span&gt;을 생성&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;NavMesh Surface&lt;/span&gt; 컴포넌트 : Road 레이어로 지정된&lt;span style=&quot;color: #409d00;&quot;&gt; 적의 이동 경로&lt;/span&gt;를 생성&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 최종 실행 결과&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;bandicam 2026-06-09 18-59-39-753.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;306&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z2AQQ/dJMcaip43D2/UC8HPnp8Mry2Ty4TAG2NW1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z2AQQ/dJMcaip43D2/UC8HPnp8Mry2Ty4TAG2NW1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z2AQQ/dJMcaip43D2/UC8HPnp8Mry2Ty4TAG2NW1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/z2AQQ/dJMcaip43D2/UC8HPnp8Mry2Ty4TAG2NW1/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;306&quot; data-filename=&quot;bandicam 2026-06-09 18-59-39-753.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;306&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>유니티 엔진 - 게임 프로젝트/타워 디펜스 게임</category>
      <category>Unity 타워 디펜스</category>
      <author>monstro</author>
      <guid isPermaLink="true">https://monstrosite.tistory.com/1294</guid>
      <comments>https://monstrosite.tistory.com/1294#entry1294comment</comments>
      <pubDate>Tue, 9 Jun 2026 19:03:22 +0900</pubDate>
    </item>
    <item>
      <title>레벨 생성 - 4) 타일맵 생성</title>
      <link>https://monstrosite.tistory.com/1293</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;레벨을 구성하는 &lt;span style=&quot;color: #ee2323;&quot;&gt;타일&lt;/span&gt;들로 이루어진 &lt;span style=&quot;color: #ee2323;&quot;&gt;타일맵&lt;/span&gt;을 자동으로 생성하는 시스템&lt;/b&gt;을 추가한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 스크립트&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) TileSlot 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;862&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mjztR/dJMcaiDCAWH/MjD5dOqkzqPRNEeAJZrdtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mjztR/dJMcaiDCAWH/MjD5dOqkzqPRNEeAJZrdtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mjztR/dJMcaiDCAWH/MjD5dOqkzqPRNEeAJZrdtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmjztR%2FdJMcaiDCAWH%2FMjD5dOqkzqPRNEeAJZrdtK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;450&quot; height=&quot;862&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;862&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SwitchTile 함수&lt;/b&gt;의 로직을 위와 같이 수정한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;Undo 그룹&lt;/span&gt;을 생성&lt;/b&gt;하여 &lt;b&gt;모든 변경사항에 대해 &lt;span style=&quot;color: #ef5369;&quot;&gt;Ctrl + z&lt;/span&gt;나 &lt;span style=&quot;color: #ef5369;&quot;&gt;Ctrl + y&lt;/span&gt;를 한번 눌러 &lt;span style=&quot;color: #ef5369;&quot;&gt;Undo&lt;/span&gt; 또는 &lt;span style=&quot;color: #ef5369;&quot;&gt;Redo&lt;/span&gt;를 하도록 설정&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또,&lt;b&gt; 변경하기 &lt;span style=&quot;color: #ef5369;&quot;&gt;이전의 타일 오브젝트의 이름&lt;/span&gt;도 Undo에서 저장&lt;/b&gt;하도록 설정한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;변경된 타일의 자식 오브젝트들을 생성&lt;/b&gt;하고 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;자식 오브젝트들의 위치&lt;/span&gt;를 Undo에서 저장&lt;/b&gt;하는 로직을 추가하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt; Undo.CollapseUndoOperations&lt;/span&gt; 함수를 호출&lt;/b&gt;하여 &lt;b&gt;Undo 그룹을 완성&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;571&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2sGcx/dJMcaicAWFv/k8xqklm8dad5vAPkV1jny0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2sGcx/dJMcaicAWFv/k8xqklm8dad5vAPkV1jny0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2sGcx/dJMcaicAWFv/k8xqklm8dad5vAPkV1jny0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2sGcx%2FdJMcaicAWFv%2Fk8xqklm8dad5vAPkV1jny0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;537&quot; height=&quot;571&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;571&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;UpdateCollider 함수&lt;/b&gt;를 위와 같이 수정하여&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;조건문에서&lt;span style=&quot;color: #ef5369;&quot;&gt; is&lt;/span&gt; 연산자를 사용&lt;/b&gt;하여 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;newCollider&lt;/span&gt; 매개변수가 &lt;span style=&quot;color: #ef5369;&quot;&gt;자식 클래스 타입&lt;/span&gt;이라면 즉시 &lt;span style=&quot;color: #ef5369;&quot;&gt;로컬&lt;/span&gt; &lt;span style=&quot;color: #ef5369;&quot;&gt;변수&lt;/span&gt;에 할당&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 구성하여&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt; GetComponent&lt;/span&gt; 함수를 호출하는 로직을 제거&lt;/b&gt;하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) GridBuilder 클래스&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;262&quot; data-origin-height=&quot;147&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VYibD/dJMcahEFfjP/pdxWTqB64vqi56U1O3Qdf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VYibD/dJMcahEFfjP/pdxWTqB64vqi56U1O3Qdf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VYibD/dJMcahEFfjP/pdxWTqB64vqi56U1O3Qdf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVYibD%2FdJMcahEFfjP%2FpdxWTqB64vqi56U1O3Qdf1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;262&quot; height=&quot;147&quot; data-origin-width=&quot;262&quot; data-origin-height=&quot;147&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;타일맵을 생성&lt;/span&gt;하는 클래스의 멤버변수&lt;/b&gt;를 위와 같이 구성한다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;mainPrefab&lt;/span&gt; 멤버변수 : 생성할 타일맵의 &lt;span style=&quot;color: #006dd7;&quot;&gt;타일&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;gridLength&lt;/span&gt; 멤버변수 : 타일맵의 &lt;span style=&quot;color: #006dd7;&quot;&gt;길이&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;gridWidth&lt;/span&gt; 멤버변수 : 타일맵의 &lt;span style=&quot;color: #006dd7;&quot;&gt;너비&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;createdTiles&lt;/span&gt; 멤버변수 : 생성한 타일맵을 &lt;span style=&quot;color: #006dd7;&quot;&gt;구성하는 타일들&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;677&quot; data-origin-height=&quot;266&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/79Rk5/dJMcahLtp01/TQAoYoEoznWSRfgWpggOH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/79Rk5/dJMcahLtp01/TQAoYoEoznWSRfgWpggOH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/79Rk5/dJMcahLtp01/TQAoYoEoznWSRfgWpggOH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F79Rk5%2FdJMcahLtp01%2FTQAoYoEoznWSRfgWpggOH0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;677&quot; height=&quot;266&quot; data-origin-width=&quot;677&quot; data-origin-height=&quot;266&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CreateTile 함수&lt;/b&gt;를 위와 같이 생성한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;mainPrefab&lt;/span&gt; 멤버변수&lt;/b&gt;를 바탕으로 &lt;b&gt;게임 오브젝트를 &lt;span style=&quot;color: #006dd7;&quot;&gt;2개의 인자로 지정한 위치&lt;/span&gt;에 생성&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후, &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;createTiles&lt;/span&gt; 멤버변수에 생성한 오브젝트를 저장&lt;/b&gt;하고 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Undo&lt;/span&gt;에 기록&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;351&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BdUt1/dJMcajoTpDp/jA2uDEmV9DED8gcq76rF7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BdUt1/dJMcajoTpDp/jA2uDEmV9DED8gcq76rF7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BdUt1/dJMcajoTpDp/jA2uDEmV9DED8gcq76rF7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBdUt1%2FdJMcajoTpDp%2FjA2uDEmV9DED8gcq76rF7K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;396&quot; height=&quot;351&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;351&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ClearGridInternal 함수&lt;/b&gt;를 위와 같이 구성하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;타일들이 저장된 &lt;span style=&quot;color: #006dd7;&quot;&gt;createdTiles&lt;/span&gt; 멤버변수를 순회&lt;/b&gt;하면서 &lt;b&gt;생성된 &lt;span style=&quot;color: #006dd7;&quot;&gt;타일 오브젝트&lt;/span&gt;를 제거&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Undo.DestoryObjectImmediate&lt;/span&gt; 함수를 호출&lt;/b&gt;하여 &lt;b&gt;제거된 타일 오브젝트를 기록&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;382&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDjiqi/dJMcabdmBcI/YKys51j5LjP9Ibs0JhkXPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDjiqi/dJMcabdmBcI/YKys51j5LjP9Ibs0JhkXPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDjiqi/dJMcabdmBcI/YKys51j5LjP9Ibs0JhkXPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDjiqi%2FdJMcabdmBcI%2FYKys51j5LjP9Ibs0JhkXPk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;412&quot; height=&quot;382&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;382&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ClearGrid 함수&lt;/b&gt;를 위와 같이 정의한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;ContextMenu&lt;/span&gt; 어트리뷰트를 사용&lt;/b&gt;하여 &lt;b&gt;컴포넌트를 &lt;span style=&quot;color: #006dd7;&quot;&gt;우클릭&lt;/span&gt;하여 함수를 호출&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt; Undo.IncrementCurrentGroup&lt;/span&gt; 함수를 호출&lt;/b&gt;하여 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Undo 그룹&lt;/span&gt;을 생성&lt;/b&gt;하고&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt; createdTiles&lt;/span&gt; 멤버변수를 기록&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;ClearGridInternal&lt;/span&gt; 함수를 호출 + &lt;span style=&quot;color: #006dd7;&quot;&gt;Clear&lt;/span&gt; 함수를 호출&lt;/b&gt;하여&lt;b&gt; 생성된 &lt;span style=&quot;color: #006dd7;&quot;&gt;타일 오브젝트들&lt;/span&gt;을 완전히 제거&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 &lt;b&gt;수정된 내용을 저장&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;346&quot; data-origin-height=&quot;635&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMye9f/dJMcadPL8SN/GFN6cF8tjnW34qpFiecc91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMye9f/dJMcadPL8SN/GFN6cF8tjnW34qpFiecc91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMye9f/dJMcadPL8SN/GFN6cF8tjnW34qpFiecc91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMye9f%2FdJMcadPL8SN%2FGFN6cF8tjnW34qpFiecc91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;346&quot; height=&quot;635&quot; data-origin-width=&quot;346&quot; data-origin-height=&quot;635&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;BuildGrid 함수&lt;/b&gt;를 위와 같이 정의한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Undo.IncrementCurrentGroup&lt;/span&gt; 함수를 호출&lt;/b&gt;하여&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt; createdTiles&lt;/span&gt; 멤버변수의 상태를 기록&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;gridLength&lt;/span&gt; 변수와 &lt;span style=&quot;color: #006dd7;&quot;&gt;gridWidth&lt;/span&gt; 변수의 값만큼 순회&lt;/b&gt;하면서 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;CreateTile&lt;/span&gt; 함수를 호출하여 &lt;span style=&quot;color: #006dd7;&quot;&gt;타일 오브젝트&lt;/span&gt;를 생성&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 &lt;b&gt;수정된 내용을 저장&lt;/b&gt;한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 최종 실행 결과&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;bandicam 2026-06-09 11-19-26-306.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;306&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfheN2/dJMcac4rCkN/0MeMaGnIOU30Qanztv1nAk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfheN2/dJMcac4rCkN/0MeMaGnIOU30Qanztv1nAk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfheN2/dJMcac4rCkN/0MeMaGnIOU30Qanztv1nAk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bfheN2/dJMcac4rCkN/0MeMaGnIOU30Qanztv1nAk/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;306&quot; data-filename=&quot;bandicam 2026-06-09 11-19-26-306.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;306&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>유니티 엔진 - 게임 프로젝트/타워 디펜스 게임</category>
      <category>Unity 타워 디펜스</category>
      <author>monstro</author>
      <guid isPermaLink="true">https://monstrosite.tistory.com/1293</guid>
      <comments>https://monstrosite.tistory.com/1293#entry1293comment</comments>
      <pubDate>Tue, 9 Jun 2026 11:21:08 +0900</pubDate>
    </item>
  </channel>
</rss>