<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>할 수 있다!</title>
    <link>https://shs217shs.tistory.com/</link>
    <description>개인 공부 및 정보를 공유하기 위한 블로그입니다.
틀린 정보나 더 좋은 정보는 댓글로 공유해주시면 감사하겠습니다 :)</description>
    <language>ko</language>
    <pubDate>Wed, 8 Apr 2026 11:50:54 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>현섭</managingEditor>
    <image>
      <title>할 수 있다!</title>
      <url>https://tistory1.daumcdn.net/tistory/8255889/attach/6d0472e0ede04cd2a15f34b0cdf9f350</url>
      <link>https://shs217shs.tistory.com</link>
    </image>
    <item>
      <title>[Unity] 유니티 포톤 PUN</title>
      <link>https://shs217shs.tistory.com/135</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;border-bottom: 2px solid #3c3c3c; padding: 0.6em; font-size: 24px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;⭐ 포톤 PUN&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;text-align: start;&quot;&gt;PUN(&lt;span style=&quot;text-align: start;&quot;&gt;Photon Unity Networking&lt;/span&gt;)&lt;/span&gt;은 멀티 플레이어 게임용 유니티 패키지입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;포톤 Fusion에 비해 상대적으로 오래전에 나온 버전이지만 직관적이고 유용한 기능을 다수 제공하기 때문에&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아직까지도 많이 사용되는 실시간 멀티 플레이어 게임용 유니티 패키지입니다.&lt;/span&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-radius: 0px 20px 20px 0px; padding: 0.5em 1em 0.5em 0.5em; background: #f2f2f2; border-left: 10px solid #616161; margin: 0.5em 0em; color: #000000; font-weight: bold;&quot;&gt;포톤 홈페이지&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;포톤을 본격적으로 사용하기 위해선 다음과 같은 준비과정이 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 포톤 로그인 및 서버 생성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 포톤 PUN2 에셋 패키지 임포트&lt;/span&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;포톤 서버 생성&lt;/b&gt;&lt;/span&gt;&lt;/h4&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;span style=&quot;color: #000000;&quot;&gt;1. 아래의 링크를 눌러 포톤 사이트로 이동하여 로그인 또는 회원가입을 진행합니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.photonengine.com/ko-kr&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.photonengine.com/ko-kr&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1244&quot; data-origin-height=&quot;672&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bquLZq/dJMb99Zoi71/JBGIpurXmTrr29ftDJl3kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bquLZq/dJMb99Zoi71/JBGIpurXmTrr29ftDJl3kK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bquLZq/dJMb99Zoi71/JBGIpurXmTrr29ftDJl3kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbquLZq%2FdJMb99Zoi71%2FJBGIpurXmTrr29ftDJl3kK%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;1244&quot; height=&quot;672&quot; data-origin-width=&quot;1244&quot; data-origin-height=&quot;672&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 관리 화면으로 이동 후 새 어플리케이션 만들기를 누릅니다.&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;1240&quot; data-origin-height=&quot;838&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l8yAp/dJMcabQqslf/CanaUPK1gIDukAP8juXiuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l8yAp/dJMcabQqslf/CanaUPK1gIDukAP8juXiuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l8yAp/dJMcabQqslf/CanaUPK1gIDukAP8juXiuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl8yAp%2FdJMcabQqslf%2FCanaUPK1gIDukAP8juXiuk%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;1240&quot; height=&quot;838&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;838&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 새 어플리케이션 생성에 필요한 항목을 작성합니다. 마지막으로 작성하기를 눌러줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; 어플리케이션 유형: 멀티플레이어 게임&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; Photon 종류: PUN&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; 애플리케이션 이름과 설명은 자유롭게 작성&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;760&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NpL7i/dJMcahQEsEv/Wd3A4QuRvkWVbwMiVeAvxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NpL7i/dJMcahQEsEv/Wd3A4QuRvkWVbwMiVeAvxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NpL7i/dJMcahQEsEv/Wd3A4QuRvkWVbwMiVeAvxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNpL7i%2FdJMcahQEsEv%2FWd3A4QuRvkWVbwMiVeAvxk%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;1016&quot; height=&quot;760&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;760&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. 생성된 서버의 아이디를 복사합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;997&quot; data-origin-height=&quot;747&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clAARz/dJMcai9N7nz/CZxixX6U7zursmxFqkLi7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clAARz/dJMcai9N7nz/CZxixX6U7zursmxFqkLi7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clAARz/dJMcai9N7nz/CZxixX6U7zursmxFqkLi7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclAARz%2FdJMcai9N7nz%2FCZxixX6U7zursmxFqkLi7K%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;997&quot; height=&quot;747&quot; data-origin-width=&quot;997&quot; data-origin-height=&quot;747&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;포톤 에셋&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 아래 링크를 눌러 에셋을 다운 후 원하는 유니티 프로젝트에 임포트합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://assetstore.unity.com/packages/tools/network/pun-2-free-119922&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://assetstore.unity.com/packages/tools/network/pun-2-free-119922&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1270&quot; data-origin-height=&quot;679&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLX2yA/dJMb9959ofS/EtKbzcLp9Kk0HOBikPIAYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLX2yA/dJMb9959ofS/EtKbzcLp9Kk0HOBikPIAYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLX2yA/dJMb9959ofS/EtKbzcLp9Kk0HOBikPIAYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLX2yA%2FdJMb9959ofS%2FEtKbzcLp9Kk0HOBikPIAYk%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;1270&quot; height=&quot;679&quot; data-origin-width=&quot;1270&quot; data-origin-height=&quot;679&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. PUN Setup 창이 뜨면 아까 복사해둔 App ID를 기입 후 Setup Project를 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1151&quot; data-origin-height=&quot;760&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbHm91/dJMb99SCInd/n90PpiTtUrUY7aQlZK94Gk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbHm91/dJMb99SCInd/n90PpiTtUrUY7aQlZK94Gk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbHm91/dJMb99SCInd/n90PpiTtUrUY7aQlZK94Gk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbHm91%2FdJMb99SCInd%2Fn90PpiTtUrUY7aQlZK94Gk%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;1151&quot; height=&quot;760&quot; data-origin-width=&quot;1151&quot; data-origin-height=&quot;760&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. App ID를 정상적으로 기입하면 인스펙터를 통해 서버 설정을 할 수 있게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;971&quot; data-origin-height=&quot;997&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccac3I/dJMcaf6mHhu/HKgRzRmrsg2sOi0PHNK4i1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccac3I/dJMcaf6mHhu/HKgRzRmrsg2sOi0PHNK4i1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccac3I/dJMcaf6mHhu/HKgRzRmrsg2sOi0PHNK4i1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fccac3I%2FdJMcaf6mHhu%2FHKgRzRmrsg2sOi0PHNK4i1%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;971&quot; height=&quot;997&quot; data-origin-width=&quot;971&quot; data-origin-height=&quot;997&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 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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-radius: 0px 20px 20px 0px; padding: 0.5em 1em 0.5em 0.5em; background: #f2f2f2; border-left: 10px solid #616161; margin: 0.5em 0em; color: #000000; font-weight: bold;&quot;&gt;로비, 방 만들기&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;포톤의 매치메이킹 시스템은 네트워크 서버에 입장 &amp;harr; 각각의 방 리스트 등을 볼 수 있는 로비에 입장 &amp;harr; 같이 게임을 진행할 다른 클라이언트들과 모일 방 입장과 같은 구조로 되어있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;193&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XGFE1/dJMcadAE6Iq/erkjK2SL3q0a0dCqWPgXN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XGFE1/dJMcadAE6Iq/erkjK2SL3q0a0dCqWPgXN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XGFE1/dJMcadAE6Iq/erkjK2SL3q0a0dCqWPgXN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXGFE1%2FdJMcadAE6Iq%2FerkjK2SL3q0a0dCqWPgXN1%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;674&quot; height=&quot;193&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;193&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 서버(Server): &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러 상용 게임들을 플레이 할 때 시작할 서버를 선택하는 것과 같이 플레이할 서버를 선택하는 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 서버 단위는 포톤 홈페이지에서 만들었던 서버(어플리케이션)입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인증을 처리하고 어떤 로비나 지역으로 갈 지를 정할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1767875302180&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;PhotonNetwork.ConnectUsingSettings();   // 해당 App ID가 있는 서버에 접속
PhotonNetwork.Disconnect();             // 서버 접속 해제&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;&amp;nbsp;&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 로비(Lobby):&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;생성된 방들의 목록을 관리하고 매칭 또는 방 입장을 할 수 있는 공간입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마스터 서버에서 로비로 들어올 수 있으며 플레이어는 방을 생성하거나 이미 생성된 방에 입장할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1767875532001&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;PhotonNetwork.JoinLobby();              // 로비 입장 요청
PhotonNetwork.LeaveLobby();             // 로비 퇴장 요청&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 방(Room):&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실제로 같이 게임을 플레이할 플레이어들이 모이는 공간입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;동일한 방에 입장한 플레이어들끼리만 RPC와 PhotonView를 수신할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1767876709765&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;PhotonNetwork.CreateRoom(&quot;RoomName&quot;);   // 방 생성 요청
PhotonNetwork.JoinRoom(&quot;RoomName&quot;);     // 방 입장 요청
PhotonNetwork.LeaveRoom();              // 방 퇴장 요청&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;&amp;nbsp;&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;span style=&quot;color: #000000;&quot;&gt;이 외의 유용한 코드들&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1767882155920&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;PhotonNetwork.AutomaticallySyncScene = true;		// true로 바꿔줘야 LoadLevel로 모든 클라이언트가 씬 이동을 함
PhotonNetwork.LoadLevel(&quot;SceneName&quot;);   		// 씬 전환 요청 (현재 방의 모든 클라이언트)

bool isConnected = PhotonNetwork.IsConnected;           // 접속 여부 확인
bool isInRoom = PhotonNetwork.InRoom;                   // 방 입장 여부 확인
bool isLobby = PhotonNetwork.InLobby;                   // 로비 입장 여부 확인
ClientState state = PhotonNetwork.NetworkClientState;   // 클라이언트 상태 확인
Player player = PhotonNetwork.LocalPlayer;              // 포톤 플레이어 정보 확인
Room players = PhotonNetwork.CurrentRoom;               // 현재 방 정보 확인


▼ 방 안의 인원들을 모두 씬 이동시키는 코드, 방장(마스터 클라이언트만 가능)
// 자신 플레이어가 방장이 아닌 경우 반환하여 아래의 코드가 실행되지 않도록 함
if (PhotonNetwork.LocalPlayer.IsMasterClient == false)
    return;
    
// 방장만이 실행할 수 있는 소스코드
PhotonNetwork.AutomaticallySyncScene = true;   // 모든 방구성원이 같은 씬으로 &amp;gt; 이동하도록 동기화함
PhotonNetwork.LoadLevel(&quot;GameScene&quot;);          // 네트워크를 통해 씬을 이동하도록 &amp;gt; 신청함&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;&amp;nbsp;&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;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-radius: 0px 20px 20px 0px; padding: 0.5em 1em 0.5em 0.5em; background: #f2f2f2; border-left: 10px solid #616161; margin: 0.5em 0em; color: #000000; font-weight: bold;&quot;&gt;Photon View (포톤 뷰)&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워크 상에서 동기화가 필요한 오브젝트에 Photon View(포톤 뷰) 컴포넌트를 추가함으로써 관리해줄 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Photon View(포톤 뷰)는 ViewID(고유 식별 아이디), 객체의 소유자, 네트워크 변화사항 등을 읽고 쓰기 위한 스크립트를 가지고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;포톤 뷰 컴포넌트를 포함하고 있는 게임오브젝트는 포톤 뷰를 참조하기 위한 변수를 가진 MonobehaviourPun클래스를 상속받아 참조할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한 Photon Animator View, Photon Transform View 컴포넌트 등을 추가하면 각각 애니메이터, 트랜스폼 정보 등이 동기화됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1767939268307&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;▼ MonoBehaviourPun 클래스 상속

public class PhotonController : MonoBehaviourPun    // 게임오브젝트 동기화를 위한 스크립트
{
  private void Awake()
  {
    PhotonView pv = photonView; // MonoBehaviourPun은 photonView를 참조하고 있음
    Debug.Log(pv.ToString());
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 22px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;생성과 삭제&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;멀티 플레이 게임에서는 게임오브젝트의 동기화를 위해 모든 클라이언트가 동일한 게임오브젝트를 생성할 필요가 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주의할 점은 생성할 프리팹의 경로는 Resources 폴더에 위치해야합니다.&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 게임 오브젝트 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1767939268307&quot; class=&quot;reasonml&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;PhotonNetwork.Instantiate(&quot;PrefabName&quot;, position, rotation);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 해당 오브젝트를 생성한 사람이 소유권자가 됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; - PhotonNetwork.InstantiateRoomObject();를 사용하면 방 소유의 오브젝트 생성 (ex. 보스 몬스터)&lt;/span&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 게임 오브젝트 파괴&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1767939268308&quot; class=&quot;reasonml&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt; PhotonNetwork.Destroy(photonView);&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;소유권&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;포톤 뷰를 가지고 있는 객체는 소유자가 존재합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;소유자는 해당 객체를 생성한 클라이언트를 뜻하며, 소유자가 아닌 클라이언트들의 네트워크 객체 조작은 무시하게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;소유권이 없는 네트워크 객체를 조작할 경우 로컬에서만 동작하고 다른 클라이언트들에게는 전달되지 않습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서 포톤 뷰의 소유권이 없을 경우 동작하지 않도록 방어 코드를 작성할 필요가 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1767942660324&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if (photonView.IsMine == false)
    return;

// 포톤 뷰의 소유권이 있는 클라이언트만 실행 가능한 코드&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;변수 동기화: IPunObservable 인터페이스&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IPunObservable 인터페이스를 상속받으면 반드시&amp;nbsp;OnPhotonSerializeView() 메서드를 구현해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 메서드는 포톤 설정에서 정해진 주기마다(기본 초당 20회) 자동으로 호출되며,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;데이터를 서버로 보내거나 반대로 서버에서 데이터를 받아올 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1767939369053&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class PhotonController : MonoBehaviourPun, IPunObservable
{
    [SerializeField] int value1;
    [SerializeField] float value2;
    [SerializeField] bool value3;

    public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {
        // 변수 데이터를 보내는 경우
        // stream.IsWriting &amp;rarr; 현재 클라이언트가 이 객체의 주인일 때 참
        if (stream.IsWriting)
        {
            stream.SendNext(value1);
            stream.SendNext(value2);
            stream.SendNext(value3);
        }
        // 변수 데이터를 받는 경우
        // stream.IsReading &amp;rarr; 현재 클라이언트가 이 객체의 주인이 아닐 때 참
        else if (stream.IsReading)
        {
            value1 = (int)stream.ReceiveNext();
            value2 = (float)stream.ReceiveNext();
            value3 = (bool)stream.ReceiveNext();
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 반드시 데이터를 보낸 순서와 받는 순서가 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;u&gt;동일&lt;/u&gt;&lt;/span&gt;해야합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 기본적으로 값 형식의 데이터를 전달할 수 있습니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; ○ 참조 형식의 경우 주소값을 가지고 각각의 클라이언트는 상이한 메모리 위치를 가지기 때문&lt;/span&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;참조 형식 동기화&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;포톤 뷰를 이용하면 참조형식 데이터 또한 전달할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;포톤 뷰를 통해 고유 ID를 받아온 뒤 해당 ID를 가진 오브젝트의 컴포넌트를 불러오면 되는 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1767939905160&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 포톤 뷰 아이디를 확인
// 포톤 뷰는 모든 클라이언트가 동일하므로 동일한 게임오브젝트를 참조 가능
int id = photonView.ViewID;

// 포톤 뷰 아이디를 기준으로 탐색
// 포톤 뷰 아이디는 미리 캐싱되어 있으므로 빠른 탐색이 가능
PhotonView target = PhotonView.Find(id);

// 해당 아이디로 찾은 객체의 컴포넌트 받아오기
Entity entity = target.getcomponent&amp;lt;Entity&amp;gt;();&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;&amp;nbsp;&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;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;함수 동기화: PunRPC (Remote Procedure Call, 원격 함수 호출)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;동일한 함수를 호출해야할 때 RPC를 사용할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래 코드 예시를 통해 확인해보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1767940270822&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// [호출하는 쪽]
// &quot;Attack&quot;이라는 이름의 함수를 모든 사람(All)에게 실행하라고 명령, 매개변수는 10
photonView.RPC(&quot;Attack&quot;, RpcTarget.All, 10);

// [실행되는 쪽]
[PunRPC]
void Attack(int damage)
{
    Debug.Log(damage + &quot;만큼 데미지를 입히는 이펙트와 소리를 재생합니다!&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● RPC를 사용할 메서드는 [PunRPC] 어트리뷰트를 붙여야됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● PhotonView.RPC()로 호출&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● RPCTarget을 통해 보낼 주체를 정할 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ RPCTarget.All: 나를 포함한 모든 클라이언트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ &lt;span style=&quot;text-align: start;&quot;&gt;RPCTarget.Others: 나를 제외한 모든 클라이언트&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ &lt;span style=&quot;text-align: start;&quot;&gt;RPCTarget.MasterClient: 현재 방의 방장(마스터 클라이언트)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ &lt;span style=&quot;text-align: start;&quot;&gt;RPCTarget.AllBuffered: 현재 있는 사람 + 나중에 이 방에 들어올 사람도 기록을 해둔 뒤 실행(바뀐 맵 상태 등)&lt;/span&gt;&lt;/span&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;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;타겟과 버퍼&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;RPCTarget의 타입에는 해당 메서드를 기록 해두거나, 호출 시점을 정할 수도 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;● Buffered:&lt;/b&gt; &lt;br /&gt;&amp;rarr; 서버에서 RPC들을 기억해두고 있다가 새로운 플레이어가 들어왔을 때 기억해둔 RPC들을 호출해줍니다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;● ViaServer:&lt;/b&gt; &lt;br /&gt;&amp;rarr; 일반적으로 RPC는 전송 클라이언트가 RPC를 실행할 때 직접 진행하게 됩니다.&lt;br /&gt;이 경우 RPC를 전송하는 클라이언트는 지연시간이 없지만, 다른 클라이언트들과의 공정성을 보장해주지 않습니다.&lt;br /&gt;ViaServer의 경우 클라이언트가 RPC를 실행하면 서버까지 보내고 함수를 실행한 클라이언트에게 돌아왔을 때 실행하게 됩니다.&lt;br /&gt;이를 통해 모든 클라이언트가 거의 동일한 타이밍에 함수를 동작할 수 있게 되지만 함수를 실행한 클라이언트는 약간의 지연시간을 가지게 됩니다.&lt;/span&gt;&lt;/blockquote&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;여러 가지 동기화 기법&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 지연 보상&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워크를 통한 데이터 전송은 물리적으로 지연 시간이 발생할 수 밖에 없는데 이를 줄이는 방법을 &quot;지연 보상&quot;이라고 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대표적인 지연 보상 기법으로는 아래와 같습니다.&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;1. 지연 시간 계산: RPC를 보낸 시간과 현재 시간의 차이를 구해 조정하는 방법&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1767943224689&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public void RequestGameStart()
{
  photonView.RPC(&quot;GameStart&quot;, RpcTarget.AllViaServer, PhotonNetwork.Time);
}

[PunRPC]
public void GameStart(PhotonMessageInfo info)
{
  // 서버에서 RPC를 보낸 시간과 현재 시간의 격차를 계산
  float lag = Mathf.Abs((float)(PhotonNetwork.Time - info.SentServerTime));

  // 시간의 격차만큼 감소된 시간만큼 카운트를 진행
  // ex. 지연 시간이 0.1초 발생한 경우 카운트 다운을 4.9초 진행
  StartCoroutine(GameTimer(5f- lag));
}

IEnumerator GameTimer(float timer)
{
  yield return new WaitForSeconds(timer);
  Debug.Log(&quot;게임 스타트!&quot;);
}&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;&amp;nbsp;&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;span style=&quot;color: #000000;&quot;&gt;2. 물리 객체를 위한 지연 보상: 지연시간이 발생한 만큼 기존의 속도를 이용해 추가적인 위치 이동을 해주는 방법&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1767943309351&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
    if (stream.IsWriting)
    {
        stream.SendNext(rigidbody.position);
        stream.SendNext(rigidbody.rotation);
        stream.SendNext(rigidbody.velocity);
    }
    else if (stream.IsReading)
    {
        rigidbody.position = (Vector3) stream.ReceiveNext();
        rigidbody.rotation = (Quaternion) stream.ReceiveNext();
        rigidbody.velocity = (Vector3) stream.ReceiveNext();

        float lag = Mathf.Abs((float) (PhotonNetwork.Time - info.timestamp));
        rigidbody.position += rigidbody.velocity * lag;
    }
}&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;&amp;nbsp;&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;span style=&quot;color: #000000;&quot;&gt;3. 물리 객체가 아닐 때 지연 보상: Transform 컴포넌트를 이용해서 이전 시점, 현재 시점 데이터의 차이를 이용해 계산하는 방법&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1767943616786&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private Vector3 networkPosition;
private float deltaPosition;

private Quaternion networkRotation;
private float deltaRotation;

private void Update()
{
    if (photonView.IsMine == false)
    {
        transform.position = Vector3.MoveTowards(transform.position, networkPosition, deltaPosition * Time.deltaTime * PhotonNetwork.SerializationRate);
        transform.rotation = Quaternion.RotateTowards(transform.rotation, networkRotation, deltaRotation * Time.deltaTime * PhotonNetwork.SerializationRate);
    }
}

public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
    if (stream.IsWriting)
    {
        stream.SendNext(transform.position);
        stream.SendNext(transform.rotation);
    }
    else if (stream.IsReading)
    {
        networkPosition = (Vector3)stream.ReceiveNext();
        networkRotation = (Quaternion)stream.ReceiveNext();

        deltaPosition = Vector3.Distance(transform.position, networkPosition);
        deltaRotation = Quaternion.Angle(transform.rotation, networkRotation);
    }
}&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;&amp;nbsp;&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;span style=&quot;color: #000000;&quot;&gt;● 마스터 클라이언트와 호스트 마이그레이션&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마이그레이션은 방장이 방에서 나가더라도 다른 클라이언트에게 호스트 권한을 승계하여 게임을 자연스럽고 끊김없이 유지하는 기법입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;포톤에서는 기본적으로 호스트 마이그레이션 과정이 적용되어 있으나 약간의 추가 과정이 필요합니다.&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;방장 승계가 되면 OnMasterClientSwitched() 콜백 함수를 자동적으로 호출합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1767944086103&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class PhotonController : MonoBehaviourPunCallbacks
{
    // 마스터 클라이언트 변경시 호출됨
    public override void OnMasterClientSwitched(Player newMasterClient)
    {
        if (PhotonNetwork.LocalPlayer != newMasterClient)
            return;

        // 변경된 마스터 클라이언트가 자신인 경우
        // 방장으로서 해야할 준비 작업 진행
    }
}

private void Update()
{
    // 방장이 아니라면 빠져나가기
    if (PhotonNetwork.IsMasterClient == false)
        return;

    // 방장만 수행해야하는 로직
}&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-radius: 0px 20px 20px 0px; padding: 0.5em 1em 0.5em 0.5em; background: #f2f2f2; border-left: 10px solid #616161; margin: 0.5em 0em; color: #000000; font-weight: bold;&quot;&gt;MonobehaviourPunCallbacks 콜백함수&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마스터 서버, 로비, 방 등 여러 네트워크 작업을 한 뒤에는 그에 맞는 콜백함수를 받을 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 콜백함수를 이용해 여러 반응에 대응하는 기능을 작성할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단 해당 콜백 함수들을 사용하기 위해선 MonoBehaviourPunCallbacks 클래스를 상속받아야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1767882346924&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class NetworkManager : MonoBehaviourPunCallbacks
{
  // 포톤 접속시 호출됨
  public override void OnConnected() { }
  // 마스터 서버 접속시 호출됨
  public override void OnConnectedToMaster() { }
  // 접속 해제시 호출됨
  public override void OnDisconnected(DisconnectCause cause) { }

  // 방 생성시 호출됨
  public override void OnCreatedRoom() { }
  // 방 입장시 호출됨
  public override void OnJoinedRoom() { }
  // 방 퇴장시 호출됨
  public override void OnLeftRoom() { }
  // 새로운 플레이어가 방 입장시 호출됨
  public override void OnPlayerEnteredRoom(Player newPlayer) { }
  // 다른 플레이어가 방 퇴장시 호출됨
  public override void OnPlayerLeftRoom(Player otherPlayer) { }
  // 방 생성 실패시 호출됨
  public override void OnCreateRoomFailed(short returnCode, string message) { }
  // 방 입장 실패시 호출됨
  public override void OnJoinRoomFailed(short returnCode, string message) { }

  // 로비 입장시 호출됨
  public override void OnJoinedLobby() { }
  // 로비 퇴장시 호출됨
  public override void OnLeftLobby() { }
  // 방 목록 변경시 호출됨
  public override void OnRoomListUpdate(List&amp;lt;RoomInfo&amp;gt; roomList) { }
}&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;&amp;nbsp;&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-radius: 0px 20px 20px 0px; padding: 0.5em 1em 0.5em 0.5em; background: #f2f2f2; border-left: 10px solid #616161; margin: 0.5em 0em; color: #000000; font-weight: bold;&quot;&gt;커스텀 프로퍼티&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;커스텀 프로퍼티는 네트워크 전송을 위해 직렬화 처리가 추가된 해시테이블 형태의 자료구조입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;키 값을 이용해 데이터를 저장하고 가져올 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;같은 방에 있으면 다른 클라이언트의 정보 또한 가져올 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1767889550712&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Room room = PhotonNetwork.CurrentRoom;  // 현재 참가한 룸을 확인

// 룸 커스텀 프로퍼티 설정
ExitGames.Client.Photon.Hashtable roomProperty = new ExitGames.Client.Photon.Hashtabl ();
roomProperty[&quot;Map&quot;] = &quot;Select Map&quot;;
room.SetCustomProperties(roomProperty);

// 룸 커스텀 프로퍼티 확인
string curMap = (string)room.CustomProperties[&quot;Map&quot;];

Player player = PhotonNetwork.LocalPlayer;  // 자신 플레이어를 확인

// 플레이어 커스텀 프로퍼티 설정
ExitGames.Client.Photon.Hashtable playerProperty = new ExitGames.Client.Photon Hashtable();
playerProperty[&quot;Ready&quot;] = true;
player.SetCustomProperties(playerProperty);

// 플레이어 커스텀 프로퍼티 확인
bool ready = (bool)player.CustomProperties[&quot;Ready&quot;];&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30%; text-align: center;&quot;&gt;방식&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;PhotonView 필요 여부&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;활용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IPunObservable&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;필요&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주기적으로 데이터를 갱신해야 할 때&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RPC&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;필요&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특정 상황에 메서드를 호출해야 할 때&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;커스텀 프로퍼티(Custom Properties)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;불필요&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자주 바뀌지 않지만 언제든 정보 확인이 필요할 데이터&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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 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;</description>
      <category>개발, IT/유니티</category>
      <category>pun</category>
      <category>Unity</category>
      <category>네트워크</category>
      <category>멀티 플레이</category>
      <category>유니티</category>
      <category>포톤</category>
      <author>현섭</author>
      <guid isPermaLink="true">https://shs217shs.tistory.com/135</guid>
      <comments>https://shs217shs.tistory.com/135#entry135comment</comments>
      <pubDate>Fri, 9 Jan 2026 16:59:40 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] 게임 네트워크</title>
      <link>https://shs217shs.tistory.com/134</link>
      <description>&lt;h2 style=&quot;border-bottom: 2px solid #3c3c3c; padding: 0.6em; font-size: 24px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;네트워크&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워크란 두 대 이상의 컴퓨터가 데이터를 주고받을 수 있도록 연결된 망을 의미합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;게임에서도 네트워크를 이용하여 멀티플레이를 구현할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;플레이어 A가 총을 쐈다는 이벤트가 발생하면 서버를 거쳐 플레이어 B의 컴퓨터에서도 총이 나가는 것이 보일겁니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한 어떤 서버 방식을 사용하고, 보간 작업을 거치는지 등에 따라 멀티플레이의 동기화 등이 결정됩니다.&lt;/span&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 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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워크 계층에는 OSI 7계층, TCP/IP 4계층이 있습니다.&lt;/span&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;&lt;span style=&quot;border-radius: 0px 20px 20px 0px; padding: 0.5em 1em 0.5em 0.5em; background: #f2f2f2; border-left: 10px solid #616161; margin: 0.5em 0em; color: #000000; font-weight: bold;&quot;&gt;OSI 7계층&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ISO(국제표준화기구)에서 정의한 네트워크 통신 표준 이론으로 네트워크 통신에 대한 과정을&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;7단계로 나누어 표준화한 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;306&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ogD51/dJMcagqD0Eb/52weg3tdX3W6xIvlET9Lqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ogD51/dJMcagqD0Eb/52weg3tdX3W6xIvlET9Lqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ogD51/dJMcagqD0Eb/52weg3tdX3W6xIvlET9Lqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FogD51%2FdJMcagqD0Eb%2F52weg3tdX3W6xIvlET9Lqk%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;276&quot; height=&quot;306&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;306&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 제 1계층: 물리 계층&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 네트워크 데이터가 전기적, 전자적 연결에 의해 전송되는 물리적인 계층&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 제 2계층: 데이터 링크 계층&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 인접한 장치 간의 물리적 전송을 관리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 네트워크 카드의 MAC 주소를 통해 목적지를 설정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 신뢰성 있는 전송을 위해 흐름제어, 오류제어, 회선제어 수행&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 제 3계층: 네트워크 계층&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 사용자간 전송을 위한 경로 설정을 담당&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 라우팅 알고리즘을 통해 데이터를 목적지까지 최적의 경로로 전달&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 목적지까지 전송을 위한 주소로 IP 주소를 사용&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 제 4계층: 전송 계층&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 사용자간 신뢰성 있는 데이터 전송을 담당&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ TCP/UDP 통신 연결을 수립/유지/중단&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 제 5계층: 세션 계층&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 통신 장치 간의 연결을 설정하고 유지합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 프로세스를 특정하기 위한 주소로 포트 넘버를 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 신뢰성 있는 데이터 전송을 위해 분할과 재조합, 연결제어, 흐름제어, 오류제어, 혼잡제어를 수행&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 제 6계층: 표현 계층&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&amp;nbsp; &amp;nbsp;○ 데이터 표현방식을 정함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 인코딩/디코딩, 압축/해제, 암호화/복호화 등의 역할 수행&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 제 7계층: 응용 계층&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 최종적인 데이터를 사용자가 실행하는 응용 프로그램을 통해 목적에 맞게 사용하는 계층&lt;/span&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-radius: 0px 20px 20px 0px; padding: 0.5em 1em 0.5em 0.5em; background: #f2f2f2; border-left: 10px solid #616161; margin: 0.5em 0em; color: #000000; font-weight: bold;&quot;&gt;TCP/IP 4계층&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;데이터 전송 과정을 4개의 계층으로 단순화한 모델입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TCP/IP 모델은 프로토콜을 정하는 것 자체보다 동작하는 프로토콜을 빠르게 구현하는 것을 중시합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1717&quot; data-origin-height=&quot;875&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JCgYw/dJMcaiosnGo/ZC6s3O6IITu7eKLs6Qzjy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JCgYw/dJMcaiosnGo/ZC6s3O6IITu7eKLs6Qzjy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JCgYw/dJMcaiosnGo/ZC6s3O6IITu7eKLs6Qzjy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJCgYw%2FdJMcaiosnGo%2FZC6s3O6IITu7eKLs6Qzjy1%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;1717&quot; height=&quot;875&quot; data-origin-width=&quot;1717&quot; data-origin-height=&quot;875&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 네트워크 접근(링크) 계층 - OSI 1, 2계층에 대응&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 물리적인 네트워크에서 데이터를 전송하기 위한 요소(하드웨어/소프트웨어)를 다룸&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 인터넷 계층 - OSI 3계층에 대응&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 상대 네트워크와 통신하기 위한 IP 주소를 사용해 데이터를 전송&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 라우터를 이용해 패킷의 경로를 설정하고 전송&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 전송 계층 - OSI 4계층에 대응&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/b&gt;○ TCP/UDP 방식을 사용해 데이터의 전송을 담당&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 응용 계층 - OSI 5, 6, 7계층에 대응&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ HTTP, FTP, SMTP 등 응용 프로그램에서 사용되는 프로토콜을 다룸&lt;/span&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;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TCP와 UDP&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● TCP:&lt;/b&gt; 안전 우선 방식입니다. 데이터 전송 전 상대와 연결하고 데이터를 조금씩 나눠 보내며 주기적으로 상대가 데이터를&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;받았는지 확인합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;게임에서는 데이터 유실이 없어야 하는 아이템 거래, 채팅, 로그인 시스템에 주로 사용합니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● UDP:&lt;/b&gt; 속도 우선 방식입니다. 별도의 과정 없이 한 번에 많은 양의 데이터를 보낼 수 있어 빠르지만, 상대방 컴퓨터에서&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정확한 데이터가 도착하지 않을 수 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;게임에서는 데이터 한 두개 보다 속도가 중요한 캐릭터 이동, 총기 발사, 스킬 이펙트 동기화에 주로 사용합니다.&lt;/span&gt;&lt;/blockquote&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 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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-radius: 0px 20px 20px 0px; padding: 0.5em 1em 0.5em 0.5em; background: #f2f2f2; border-left: 10px solid #616161; margin: 0.5em 0em; color: #000000; font-weight: bold;&quot;&gt;프로토콜&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워크를 구성하는 컴퓨터와 네트워크 장비들이 지켜야할 규칙입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프로토콜은 데이터 전송 상대방, 데이터의 형식, 데이터의 전송 순서와 절차, 데이터 전송방법 등을 규정합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 계층마다 필요로 하는 프로토콜 규칙이 다르며 여러 프로토콜을 혼합하여 사용합니다.&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;프로토콜이 성립되기 위해선 다음의 세가지 요소를 정의해야합니다.&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 구문:&lt;/b&gt; 데이터의 형식이나 구조를 정의&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 의미:&lt;/b&gt; 전송되는 각 비트의 의미를 해석&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 60%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;계층&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;주요 프로토콜&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;물리&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; RS-232, DSL, 10Base-T, Coaxial &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;데이터 링크&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Ethernet, Wi-Fi (802.11), PPP, MAC &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워크&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; IP (IPv4/IPv6), ICMP, ARP, RARP, BGP &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;전송&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; TCP, UDP, SCTP, QUIC &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;세션&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; NetBIOS, RPC, SSH, TLS &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;표현&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; SSL/TLS, JPEG, MPEG, ASCII, MIDI &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;응용&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; HTTP, HTTPS, FTP, SMTP, DNS, DHCP, SNMP &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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 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;h2 style=&quot;border-bottom: 2px solid #3c3c3c; padding: 0.6em; font-size: 24px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;⭐ 네트워크 아키텍쳐 구조&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아키텍쳐란 시스템의 전체적인 설계 구조를 의미합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;어떤 구성 요소들을 어디에 배치하고, 서로 어떻게 소통할지 등을 정하는 설계 방식입니다.&lt;/span&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 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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-radius: 0px 20px 20px 0px; padding: 0.5em 1em 0.5em 0.5em; background: #f2f2f2; border-left: 10px solid #616161; margin: 0.5em 0em; color: #000000; font-weight: bold;&quot;&gt;클라이언트 서버&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;한 대의 서버 컴퓨터에서 모든 게임 데이터를 관리합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;한 대의 컴퓨터에서 서버를 관리하기 때문에 데이터를 변경하는 등의 부정행위(치트)에 대해 비교적 쉽게 대처할 수 있고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다른 유저들은 서버에 접속만 하면 되기에 여러대의 기기에서도 동일한 게임 데이터를 사용할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서버가 많은 연산과 데이터의 기록을 담당하기에 유지비용이 높고, 서버 컴퓨터에 문제가 발생시 모든 유저들이 영향을&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;받는다는 단점이 있습니다.&lt;/span&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 style=&quot;font-size: 22px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Dedicated Server (전용 서버)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 구조:&lt;/b&gt; 네트워크 통신과 게임 로직만을 계산하기 위한 전용 서버를 사용하는 방식&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 장점:&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 보안성이 우수함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 네트워크나 게임 로직에 관련된 역할만 수행하기 때문에 성능에 유리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 안정적인 게임 환경&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 단점:&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 높은 서버 유지비&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 데이터가 한 지점에 몰려서 지연 발생&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 예시 게임:&lt;/b&gt; 배틀그라운드, 리그 오브 레전드 등&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&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 style=&quot;font-size: 22px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Listen Server&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 구조:&lt;/b&gt; 플레이어 중 한 명의 컴퓨터가 게임 플레이와 서버 역할을 동시에 수행하는 방식&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 장점:&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 별도의 서버가 필요하지 않음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 빠른 테스트 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 단점:&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 서버 호스트가 나가면 게임이 종료됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 서버 호스트는 지연 시간이 없지만 다른 유저들은 서버 호스트의 인터넷 환경의 영향을 받음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 예시 게임:&lt;/b&gt; 레프트 4 데드 2, 팰월드 등&lt;/span&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 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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-radius: 0px 20px 20px 0px; padding: 0.5em 1em 0.5em 0.5em; background: #f2f2f2; border-left: 10px solid #616161; margin: 0.5em 0em; color: #000000; font-weight: bold;&quot;&gt;P2P (Peer to Peer)&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 구조:&lt;/b&gt; 중앙 서버 없이, 게임에 참여한 모든 유저들의 컴퓨터끼리 직접 데이터를 주고받는 방식입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 장점:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 별도의 서버가 필요하지 않음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 서로 물리적 거리가 가까울 경우 지연시간이 매우 적음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 단점:&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 보안에 취약함 &amp;rarr; 중앙 서버가 없기 때문에 클라이언트 측 데이터를 변조하기 쉬움&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 방장의 네트워크 상태에 의존&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&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;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발, IT/유니티</category>
      <category>Unity</category>
      <category>네트워크</category>
      <category>서버</category>
      <category>유니티</category>
      <category>표준 모델</category>
      <author>현섭</author>
      <guid isPermaLink="true">https://shs217shs.tistory.com/134</guid>
      <comments>https://shs217shs.tistory.com/134#entry134comment</comments>
      <pubDate>Tue, 6 Jan 2026 09:32:45 +0900</pubDate>
    </item>
    <item>
      <title>[Unity 에셋] 에셋스토어 무료 에셋 받아가세요 (종료)</title>
      <link>https://shs217shs.tistory.com/133</link>
      <description>&lt;h2 style=&quot;border-bottom: 2px solid #3c3c3c; padding: 0.6em; font-size: 24px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;⭐ &lt;s&gt;1900&amp;nbsp;Bastos&amp;nbsp;Station&amp;nbsp;(UModelerX)&lt;/s&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;padding: 0.3em 0.5em 0.3em 0.5em; margin: 0.5em 0em; color: #000000; border-left: 3px solid #D2D2FF; font-weight: bold;&quot; 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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;●&amp;nbsp;&lt;b&gt;기간: ~2026.01.05까지&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 코드:&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 링크:&lt;/span&gt; &lt;a href=&quot;https://assetstore.unity.com/packages/3d/environments/1900-bastos-station-umodelerx-227123?clickref=1100lBNwZSgI&amp;amp;utm_source=partnerize&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=unity_affiliate&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://assetstore.unity.com/packages/3d/environments/1900-bastos-station-umodelerx-227123?clickref=1100lBNwZSgI&amp;amp;utm_source=partnerize&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=unity_affiliate&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1766738883213&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;1900 Bastos Station (UModelerX) | 3D 주변환경 | Unity Asset Store&quot; data-og-description=&quot;Elevate your workflow with the 1900 Bastos Station (UModelerX) asset from UModeler, Inc.. Find this &amp;amp; other 주변환경 options on the Unity Asset Store.&quot; data-og-host=&quot;assetstore.unity.com&quot; data-og-source-url=&quot;https://assetstore.unity.com/packages/3d/environments/1900-bastos-station-umodelerx-227123?clickref=1100lBNwZSgI&amp;amp;utm_source=partnerize&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=unity_affiliate&quot; data-og-url=&quot;https://assetstore.unity.com/packages/3d/environments/1900-bastos-station-umodelerx-227123?clickref=1100lBNwZSgI&amp;amp;utm_campaign=unity_affiliate&amp;amp;utm_medium=affiliate&amp;amp;utm_source=partnerize&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cNrt5T/hyZQriit9W/0Ro5QGKtDg1xAqcIzJ8ec0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/fZTlQ/hyZPRa1FAa/Fbco7Gk06uiIaZUAjCB3zK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://assetstore.unity.com/packages/3d/environments/1900-bastos-station-umodelerx-227123?clickref=1100lBNwZSgI&amp;amp;utm_source=partnerize&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=unity_affiliate&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://assetstore.unity.com/packages/3d/environments/1900-bastos-station-umodelerx-227123?clickref=1100lBNwZSgI&amp;amp;utm_source=partnerize&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=unity_affiliate&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cNrt5T/hyZQriit9W/0Ro5QGKtDg1xAqcIzJ8ec0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/fZTlQ/hyZPRa1FAa/Fbco7Gk06uiIaZUAjCB3zK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;1900 Bastos Station (UModelerX) | 3D 주변환경 | Unity Asset Store&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Elevate your workflow with the 1900 Bastos Station (UModelerX) asset from UModeler, Inc.. Find this &amp;amp; other 주변환경 options on the Unity Asset Store.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;assetstore.unity.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;h2 style=&quot;border-bottom: 2px solid #3c3c3c; padding: 0.6em; font-size: 24px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;⭐ &lt;s&gt;Theme&amp;nbsp;Park(UModeler&amp;nbsp;X)&lt;/s&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;padding: 0.3em 0.5em 0.3em 0.5em; margin: 0.5em 0em; color: #000000; border-left: 3px solid #D2D2FF; font-weight: bold;&quot; 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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;●&amp;nbsp;&lt;b&gt;기간: ~2026.01.05까지&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 코드:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 링크:&lt;/span&gt;&lt;span&gt; &lt;a href=&quot;https://assetstore.unity.com/packages/3d/environments/theme-park-umodeler-x-330120?clickref=1101lC4m5DWz&amp;amp;utm_source=partnerize&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=unity_affiliate&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://assetstore.unity.com/packages/3d/environments/theme-park-umodeler-x-330120?clickref=1101lC4m5DWz&amp;amp;utm_source=partnerize&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=unity_affiliate&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1766738964664&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Theme Park (UModeler X) | 3D 주변환경 | Unity Asset Store&quot; data-og-description=&quot;Elevate your workflow with the Theme Park (UModeler X) asset from UModeler, Inc.. Find this &amp;amp; other 주변환경 options on the Unity Asset Store.&quot; data-og-host=&quot;assetstore.unity.com&quot; data-og-source-url=&quot;https://assetstore.unity.com/packages/3d/environments/theme-park-umodeler-x-330120?clickref=1101lC4m5DWz&amp;amp;utm_source=partnerize&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=unity_affiliate&quot; data-og-url=&quot;https://assetstore.unity.com/packages/3d/environments/theme-park-umodeler-x-330120?clickref=1101lC4m5DWz&amp;amp;utm_campaign=unity_affiliate&amp;amp;utm_medium=affiliate&amp;amp;utm_source=partnerize&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/T1hX8/hyZQusyFI1/ttlypHegqck5C9aR6sEc3k/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/hBe0m/hyZPVefxxZ/3QSXiTLkDu7gyjrhdMkX6K/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://assetstore.unity.com/packages/3d/environments/theme-park-umodeler-x-330120?clickref=1101lC4m5DWz&amp;amp;utm_source=partnerize&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=unity_affiliate&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://assetstore.unity.com/packages/3d/environments/theme-park-umodeler-x-330120?clickref=1101lC4m5DWz&amp;amp;utm_source=partnerize&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=unity_affiliate&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/T1hX8/hyZQusyFI1/ttlypHegqck5C9aR6sEc3k/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/hBe0m/hyZPVefxxZ/3QSXiTLkDu7gyjrhdMkX6K/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Theme Park (UModeler X) | 3D 주변환경 | Unity Asset Store&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Elevate your workflow with the Theme Park (UModeler X) asset from UModeler, Inc.. Find this &amp;amp; other 주변환경 options on the Unity Asset Store.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;assetstore.unity.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;h2 style=&quot;border-bottom: 2px solid #3c3c3c; padding: 0.6em; font-size: 24px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;⭐ &lt;s&gt;Sunset&amp;nbsp;Train&amp;nbsp;(UModeler&amp;nbsp;X)&lt;/s&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;padding: 0.3em 0.5em 0.3em 0.5em; margin: 0.5em 0em; color: #000000; border-left: 3px solid #D2D2FF; font-weight: bold;&quot; 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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;●&amp;nbsp;&lt;b&gt;기간: ~2026.01.05까지&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 코드:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 링크:&lt;/span&gt;&lt;span&gt; &lt;a href=&quot;https://assetstore.unity.com/packages/3d/environments/sunset-train-umodeler-x-304862?clickref=1101lC4m5DMY&amp;amp;utm_source=partnerize&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=unity_affiliate&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://assetstore.unity.com/packages/3d/environments/sunset-train-umodeler-x-304862?clickref=1101lC4m5DMY&amp;amp;utm_source=partnerize&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=unity_affiliate&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1766738973228&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Sunset Train (UModeler X) | 3D 주변환경 | Unity Asset Store&quot; data-og-description=&quot;Elevate your workflow with the Sunset Train (UModeler X) asset from UModeler, Inc.. Find this &amp;amp; other 주변환경 options on the Unity Asset Store.&quot; data-og-host=&quot;assetstore.unity.com&quot; data-og-source-url=&quot;https://assetstore.unity.com/packages/3d/environments/sunset-train-umodeler-x-304862?clickref=1101lC4m5DMY&amp;amp;utm_source=partnerize&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=unity_affiliate&quot; data-og-url=&quot;https://assetstore.unity.com/packages/3d/environments/sunset-train-umodeler-x-304862?clickref=1101lC4m5DMY&amp;amp;utm_campaign=unity_affiliate&amp;amp;utm_medium=affiliate&amp;amp;utm_source=partnerize&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/GyeQT/hyZQw4Z69P/yTxbEXptW5L8KO2Fl5kMe0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bHJPgU/hyZQEIJi6B/PzpwGVskqkoiUwAK1smQ11/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/dcxAxC/hyZPZubWUv/7Gi4dKjsHmUnwZ7QlIaX31/img.jpg?width=1950&amp;amp;height=1300&amp;amp;face=0_0_1950_1300&quot;&gt;&lt;a href=&quot;https://assetstore.unity.com/packages/3d/environments/sunset-train-umodeler-x-304862?clickref=1101lC4m5DMY&amp;amp;utm_source=partnerize&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=unity_affiliate&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://assetstore.unity.com/packages/3d/environments/sunset-train-umodeler-x-304862?clickref=1101lC4m5DMY&amp;amp;utm_source=partnerize&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=unity_affiliate&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/GyeQT/hyZQw4Z69P/yTxbEXptW5L8KO2Fl5kMe0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bHJPgU/hyZQEIJi6B/PzpwGVskqkoiUwAK1smQ11/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/dcxAxC/hyZPZubWUv/7Gi4dKjsHmUnwZ7QlIaX31/img.jpg?width=1950&amp;amp;height=1300&amp;amp;face=0_0_1950_1300');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Sunset Train (UModeler X) | 3D 주변환경 | Unity Asset Store&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Elevate your workflow with the Sunset Train (UModeler X) asset from UModeler, Inc.. Find this &amp;amp; other 주변환경 options on the Unity Asset Store.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;assetstore.unity.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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: #000000;&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1. 에셋 구매하기를 눌러줍니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;517&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0v2RS/btsQGjWDPog/4uSrLwnlOVwkij9CByn73K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0v2RS/btsQGjWDPog/4uSrLwnlOVwkij9CByn73K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0v2RS/btsQGjWDPog/4uSrLwnlOVwkij9CByn73K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0v2RS%2FbtsQGjWDPog%2F4uSrLwnlOVwkij9CByn73K%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;360&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;517&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2. 쿠폰을 적용하는 칸에 코드를 입력한 후 '적용하기' 버튼을 누른 뒤 가격이 0달러가 되는 것을 확인하고 결제하시면 됩니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BchOa/btsQJIGPwB6/SpWvzBqKP8DITsh1TlNk2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BchOa/btsQJIGPwB6/SpWvzBqKP8DITsh1TlNk2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BchOa/btsQJIGPwB6/SpWvzBqKP8DITsh1TlNk2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBchOa%2FbtsQJIGPwB6%2FSpWvzBqKP8DITsh1TlNk2k%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;343&quot; height=&quot;412&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;532&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>개발, IT/정보 공유</category>
      <category>Asset</category>
      <category>Unity</category>
      <category>에셋</category>
      <category>유니티</category>
      <author>현섭</author>
      <guid isPermaLink="true">https://shs217shs.tistory.com/133</guid>
      <comments>https://shs217shs.tistory.com/133#entry133comment</comments>
      <pubDate>Fri, 26 Dec 2025 17:50:08 +0900</pubDate>
    </item>
    <item>
      <title>[Unity 에셋] 에셋스토어 무료 에셋 받아가세요 (종료)</title>
      <link>https://shs217shs.tistory.com/132</link>
      <description>&lt;h2 style=&quot;border-bottom: 2px solid #3c3c3c; padding: 0.6em; font-size: 24px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;⭐ &lt;s&gt;Explosive&amp;nbsp;Device&amp;nbsp;C4&amp;nbsp;&amp;amp;&amp;nbsp;Defuse&amp;nbsp;Kit&lt;/s&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;padding: 0.3em 0.5em 0.3em 0.5em; margin: 0.5em 0em; color: #000000; border-left: 3px solid #D2D2FF; font-weight: bold;&quot; 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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;●&amp;nbsp;&lt;b&gt;기간: ~2026.01.01까지&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 코드: QATMO&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 링크:&lt;/span&gt; &lt;a href=&quot;https://assetstore.unity.com/packages/3d/props/explosive-device-c4-defuse-kit-323953&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://assetstore.unity.com/packages/3d/props/explosive-device-c4-defuse-kit-323953&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1766713529779&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Explosive Device C4 &amp;amp; Defuse Kit | 3D 소품 | Unity Asset Store&quot; data-og-description=&quot;Elevate your workflow with the Explosive Device C4 &amp;amp; Defuse Kit asset from QAtmo. Find this &amp;amp; other 소품 options on the Unity Asset Store.&quot; data-og-host=&quot;assetstore.unity.com&quot; data-og-source-url=&quot;https://assetstore.unity.com/packages/3d/props/explosive-device-c4-defuse-kit-323953&quot; data-og-url=&quot;https://assetstore.unity.com/packages/3d/props/explosive-device-c4-defuse-kit-323953&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/e14JJ/hyZQAGeJfN/4h4BilB3x6DKUvZeDh3pM0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bQpEWL/hyZQu0jKTM/EdBTv8x1aqQVGpxxMN78E0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://assetstore.unity.com/packages/3d/props/explosive-device-c4-defuse-kit-323953&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://assetstore.unity.com/packages/3d/props/explosive-device-c4-defuse-kit-323953&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/e14JJ/hyZQAGeJfN/4h4BilB3x6DKUvZeDh3pM0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bQpEWL/hyZQu0jKTM/EdBTv8x1aqQVGpxxMN78E0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Explosive Device C4 &amp;amp; Defuse Kit | 3D 소품 | Unity Asset Store&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Elevate your workflow with the Explosive Device C4 &amp;amp; Defuse Kit asset from QAtmo. Find this &amp;amp; other 소품 options on the Unity Asset Store.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;assetstore.unity.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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: #000000;&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1. 에셋 구매하기를 눌러줍니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;517&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0v2RS/btsQGjWDPog/4uSrLwnlOVwkij9CByn73K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0v2RS/btsQGjWDPog/4uSrLwnlOVwkij9CByn73K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0v2RS/btsQGjWDPog/4uSrLwnlOVwkij9CByn73K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0v2RS%2FbtsQGjWDPog%2F4uSrLwnlOVwkij9CByn73K%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;360&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;517&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2. 쿠폰을 적용하는 칸에 코드를 입력한 후 '적용하기' 버튼을 누른 뒤 가격이 0달러가 되는 것을 확인하고 결제하시면 됩니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BchOa/btsQJIGPwB6/SpWvzBqKP8DITsh1TlNk2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BchOa/btsQJIGPwB6/SpWvzBqKP8DITsh1TlNk2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BchOa/btsQJIGPwB6/SpWvzBqKP8DITsh1TlNk2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBchOa%2FbtsQJIGPwB6%2FSpWvzBqKP8DITsh1TlNk2k%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;343&quot; height=&quot;412&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;532&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>개발, IT/정보 공유</category>
      <category>Asset</category>
      <category>Unity</category>
      <category>에셋</category>
      <category>유니티</category>
      <author>현섭</author>
      <guid isPermaLink="true">https://shs217shs.tistory.com/132</guid>
      <comments>https://shs217shs.tistory.com/132#entry132comment</comments>
      <pubDate>Fri, 26 Dec 2025 10:49:05 +0900</pubDate>
    </item>
    <item>
      <title>[Unity 에셋] 에셋스토어 무료 에셋 받아가세요 (종료)</title>
      <link>https://shs217shs.tistory.com/131</link>
      <description>&lt;h2 style=&quot;border-bottom: 2px solid #3c3c3c; padding: 0.6em; font-size: 24px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;⭐ HQ&amp;nbsp;Apocalyptic&amp;nbsp;Environment&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;padding: 0.3em 0.5em 0.3em 0.5em; margin: 0.5em 0em; color: #000000; border-left: 3px solid #D2D2FF; font-weight: bold;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아포칼립틱 배경 에셋입니다&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;●&amp;nbsp;&lt;b&gt;기간: ~2025.12.25까지&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 코드: NOTLONELY2025&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 링크:&lt;/span&gt; &lt;a href=&quot;https://assetstore.unity.com/packages/3d/environments/urban/hq-apocalyptic-environment-37462#reviews&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://assetstore.unity.com/packages/3d/environments/urban/hq-apocalyptic-environment-37462#reviews&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1766102243870&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;HQ Apocalyptic Environment | 3D 도시 | Unity Asset Store&quot; data-og-description=&quot;Elevate your workflow with the HQ Apocalyptic Environment asset from NOT_Lonely. Find this &amp;amp; other 도시 options on the Unity Asset Store.&quot; data-og-host=&quot;assetstore.unity.com&quot; data-og-source-url=&quot;https://assetstore.unity.com/packages/3d/environments/urban/hq-apocalyptic-environment-37462#reviews&quot; data-og-url=&quot;https://assetstore.unity.com/packages/3d/environments/urban/hq-apocalyptic-environment-37462&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ddU9I8/hyZPEaTiuM/1f7hJtwRroHLWlEauvn1nK/img.jpg?width=516&amp;amp;height=389&amp;amp;face=0_0_516_389,https://scrap.kakaocdn.net/dn/bgQSW4/hyZOFibk9g/ALiEi1Ofe0CdtISWL2Qgbk/img.jpg?width=516&amp;amp;height=389&amp;amp;face=0_0_516_389&quot;&gt;&lt;a href=&quot;https://assetstore.unity.com/packages/3d/environments/urban/hq-apocalyptic-environment-37462#reviews&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://assetstore.unity.com/packages/3d/environments/urban/hq-apocalyptic-environment-37462#reviews&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ddU9I8/hyZPEaTiuM/1f7hJtwRroHLWlEauvn1nK/img.jpg?width=516&amp;amp;height=389&amp;amp;face=0_0_516_389,https://scrap.kakaocdn.net/dn/bgQSW4/hyZOFibk9g/ALiEi1Ofe0CdtISWL2Qgbk/img.jpg?width=516&amp;amp;height=389&amp;amp;face=0_0_516_389');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;HQ Apocalyptic Environment | 3D 도시 | Unity Asset Store&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Elevate your workflow with the HQ Apocalyptic Environment asset from NOT_Lonely. Find this &amp;amp; other 도시 options on the Unity Asset Store.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;assetstore.unity.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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: #000000;&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1. 에셋 구매하기를 눌러줍니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;517&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0v2RS/btsQGjWDPog/4uSrLwnlOVwkij9CByn73K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0v2RS/btsQGjWDPog/4uSrLwnlOVwkij9CByn73K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0v2RS/btsQGjWDPog/4uSrLwnlOVwkij9CByn73K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0v2RS%2FbtsQGjWDPog%2F4uSrLwnlOVwkij9CByn73K%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;360&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;517&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2. 쿠폰을 적용하는 칸에 코드를 입력한 후 '적용하기' 버튼을 누른 뒤 가격이 0달러가 되는 것을 확인하고 결제하시면 됩니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BchOa/btsQJIGPwB6/SpWvzBqKP8DITsh1TlNk2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BchOa/btsQJIGPwB6/SpWvzBqKP8DITsh1TlNk2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BchOa/btsQJIGPwB6/SpWvzBqKP8DITsh1TlNk2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBchOa%2FbtsQJIGPwB6%2FSpWvzBqKP8DITsh1TlNk2k%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;343&quot; height=&quot;412&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;532&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>개발, IT/정보 공유</category>
      <category>Asset</category>
      <category>Unity</category>
      <category>에셋</category>
      <category>유니티</category>
      <author>현섭</author>
      <guid isPermaLink="true">https://shs217shs.tistory.com/131</guid>
      <comments>https://shs217shs.tistory.com/131#entry131comment</comments>
      <pubDate>Fri, 19 Dec 2025 08:58:03 +0900</pubDate>
    </item>
    <item>
      <title>[포트폴리오 / 협업 프로젝트] 가제: Digreed 1일차</title>
      <link>https://shs217shs.tistory.com/130</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 프로젝트는 기획자 분들과 협업하여 개발하는 프로젝트입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서 1일차에는 바로 개발에 들어가지 않고 서로 협업을 위한 프로세스 및 기본 그라운드 룰을 정하고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러 개발자의 코드 스타일 또는 협업 툴인 깃을 통일적으로 사용하기 위한 코드 컨벤션, 깃 컨벤션을 작성하였습니다.&lt;/span&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;border-bottom: 2px solid #3c3c3c; padding: 0.6em; font-size: 24px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;⭐ 협업 Rule&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;효율적이고 유연한 협업을 위해 정한 기본적인 룰 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 룰은 개발 과정에서 추가되거나 수정될 수 있습니다.&lt;/span&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-radius: 0px 20px 20px 0px; padding: 0.5em 1em 0.5em 0.5em; background: #f2f2f2; border-left: 10px solid #616161; margin: 0.5em 0em; color: #000000; font-weight: bold;&quot;&gt;Ground Rule&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;594&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciw7yO/dJMcacPatBA/eHwIrFRhCHLxtablEsIkJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciw7yO/dJMcacPatBA/eHwIrFRhCHLxtablEsIkJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciw7yO/dJMcacPatBA/eHwIrFRhCHLxtablEsIkJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fciw7yO%2FdJMcacPatBA%2FeHwIrFRhCHLxtablEsIkJ1%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;360&quot; height=&quot;594&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;594&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 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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-radius: 0px 20px 20px 0px; padding: 0.5em 1em 0.5em 0.5em; background: #f2f2f2; border-left: 10px solid #616161; margin: 0.5em 0em; color: #000000; font-weight: bold;&quot;&gt;Code Convention&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;696&quot; data-origin-height=&quot;773&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEXImx/dJMcafE8aGG/XMQaHP9bqax2zV67T7rPi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEXImx/dJMcafE8aGG/XMQaHP9bqax2zV67T7rPi0/img.png&quot; data-alt=&quot;명명 규칙&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEXImx/dJMcafE8aGG/XMQaHP9bqax2zV67T7rPi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEXImx%2FdJMcafE8aGG%2FXMQaHP9bqax2zV67T7rPi0%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;696&quot; height=&quot;773&quot; data-origin-width=&quot;696&quot; data-origin-height=&quot;773&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;288&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rR7DT/dJMcacVV2k7/m8ICO29ZPbyZBVKgyP0OT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rR7DT/dJMcacVV2k7/m8ICO29ZPbyZBVKgyP0OT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rR7DT/dJMcacVV2k7/m8ICO29ZPbyZBVKgyP0OT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrR7DT%2FdJMcacVV2k7%2Fm8ICO29ZPbyZBVKgyP0OT0%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;706&quot; height=&quot;288&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;288&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-radius: 0px 20px 20px 0px; padding: 0.5em 1em 0.5em 0.5em; background: #f2f2f2; border-left: 10px solid #616161; margin: 0.5em 0em; color: #000000; font-weight: bold;&quot;&gt;Git Convention&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;643&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgWmJW/dJMcacIpGpf/9clKH7Ygy4tRkr55KwnvfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgWmJW/dJMcacIpGpf/9clKH7Ygy4tRkr55KwnvfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgWmJW/dJMcacIpGpf/9clKH7Ygy4tRkr55KwnvfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgWmJW%2FdJMcacIpGpf%2F9clKH7Ygy4tRkr55KwnvfK%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;717&quot; height=&quot;643&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;643&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;716&quot; data-origin-height=&quot;623&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3DNW6/dJMcaaKAjqP/akJVQoVGylVGu7bKWTjC71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3DNW6/dJMcaaKAjqP/akJVQoVGylVGu7bKWTjC71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3DNW6/dJMcaaKAjqP/akJVQoVGylVGu7bKWTjC71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3DNW6%2FdJMcaaKAjqP%2FakJVQoVGylVGu7bKWTjC71%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;716&quot; height=&quot;623&quot; data-origin-width=&quot;716&quot; data-origin-height=&quot;623&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 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;</description>
      <category>포트폴리오</category>
      <category>portfolio</category>
      <category>Unity</category>
      <category>유니티</category>
      <category>포트폴리오</category>
      <author>현섭</author>
      <guid isPermaLink="true">https://shs217shs.tistory.com/130</guid>
      <comments>https://shs217shs.tistory.com/130#entry130comment</comments>
      <pubDate>Fri, 12 Dec 2025 09:01:53 +0900</pubDate>
    </item>
    <item>
      <title>[Unity 에셋] 에셋스토어 무료 에셋 받아가세요 (종료)</title>
      <link>https://shs217shs.tistory.com/129</link>
      <description>&lt;h2 style=&quot;border-bottom: 2px solid #3c3c3c; padding: 0.6em; font-size: 24px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;⭐ Swordsman&amp;nbsp;Girl&amp;nbsp;-&amp;nbsp;RPG&amp;nbsp;Dark&amp;nbsp;Fantasy&amp;nbsp;Modular&amp;nbsp;Female&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;padding: 0.3em 0.5em 0.3em 0.5em; margin: 0.5em 0em; color: #000000; border-left: 3px solid #D2D2FF; font-weight: bold;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RPG 타크 판타지 풍의 캐릭터 에셋입니다.&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;●&amp;nbsp;&lt;b&gt;기간: ~2025.12.18까지&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 코드: IDAFABER2025&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 링크:&lt;/span&gt; &lt;a href=&quot;https://assetstore.unity.com/packages/3d/characters/humanoids/humans/swordsman-girl-rpg-dark-fantasy-modular-female-178252&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://assetstore.unity.com/packages/3d/characters/humanoids/humans/swordsman-girl-rpg-dark-fantasy-modular-female-178252&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1765496396740&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Swordsman Girl - RPG Dark Fantasy Modular Female | 캐릭터 | Unity Asset Store&quot; data-og-description=&quot;Get the Swordsman Girl - RPG Dark Fantasy Modular Female package from Ida Faber and speed up your game development process. Find this &amp;amp; other 캐릭터 options on the Unity Asset Store.&quot; data-og-host=&quot;assetstore.unity.com&quot; data-og-source-url=&quot;https://assetstore.unity.com/packages/3d/characters/humanoids/humans/swordsman-girl-rpg-dark-fantasy-modular-female-178252&quot; data-og-url=&quot;https://assetstore.unity.com/packages/3d/characters/humanoids/humans/swordsman-girl-rpg-dark-fantasy-modular-female-178252&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/3kwCR/hyZPAMMRZ9/3i8JMO5jZE3A61g0kmBNkK/img.png?width=1200&amp;amp;height=630&amp;amp;face=487_88_560_168,https://scrap.kakaocdn.net/dn/cowsce/hyZPmikqCG/CiWXXQQFGum6IOHDh5IJgK/img.png?width=1200&amp;amp;height=630&amp;amp;face=487_88_560_168&quot;&gt;&lt;a href=&quot;https://assetstore.unity.com/packages/3d/characters/humanoids/humans/swordsman-girl-rpg-dark-fantasy-modular-female-178252&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://assetstore.unity.com/packages/3d/characters/humanoids/humans/swordsman-girl-rpg-dark-fantasy-modular-female-178252&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/3kwCR/hyZPAMMRZ9/3i8JMO5jZE3A61g0kmBNkK/img.png?width=1200&amp;amp;height=630&amp;amp;face=487_88_560_168,https://scrap.kakaocdn.net/dn/cowsce/hyZPmikqCG/CiWXXQQFGum6IOHDh5IJgK/img.png?width=1200&amp;amp;height=630&amp;amp;face=487_88_560_168');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Swordsman Girl - RPG Dark Fantasy Modular Female | 캐릭터 | Unity Asset Store&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Get the Swordsman Girl - RPG Dark Fantasy Modular Female package from Ida Faber and speed up your game development process. Find this &amp;amp; other 캐릭터 options on the Unity Asset Store.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;assetstore.unity.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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: #000000;&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1. 에셋 구매하기를 눌러줍니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;517&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0v2RS/btsQGjWDPog/4uSrLwnlOVwkij9CByn73K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0v2RS/btsQGjWDPog/4uSrLwnlOVwkij9CByn73K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0v2RS/btsQGjWDPog/4uSrLwnlOVwkij9CByn73K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0v2RS%2FbtsQGjWDPog%2F4uSrLwnlOVwkij9CByn73K%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;360&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;517&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2. 쿠폰을 적용하는 칸에 코드를 입력한 후 '적용하기' 버튼을 누른 뒤 가격이 0달러가 되는 것을 확인하고 결제하시면 됩니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BchOa/btsQJIGPwB6/SpWvzBqKP8DITsh1TlNk2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BchOa/btsQJIGPwB6/SpWvzBqKP8DITsh1TlNk2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BchOa/btsQJIGPwB6/SpWvzBqKP8DITsh1TlNk2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBchOa%2FbtsQJIGPwB6%2FSpWvzBqKP8DITsh1TlNk2k%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;343&quot; height=&quot;412&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;532&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>개발, IT/정보 공유</category>
      <category>Unity</category>
      <category>Unity Asset</category>
      <category>무료 에셋</category>
      <category>에셋</category>
      <category>유니티</category>
      <author>현섭</author>
      <guid isPermaLink="true">https://shs217shs.tistory.com/129</guid>
      <comments>https://shs217shs.tistory.com/129#entry129comment</comments>
      <pubDate>Fri, 12 Dec 2025 08:42:36 +0900</pubDate>
    </item>
    <item>
      <title>[Unity 에셋] 에셋스토어 무료 에셋 받아가세요 (종료)</title>
      <link>https://shs217shs.tistory.com/128</link>
      <description>&lt;h2 style=&quot;border-bottom: 2px solid #3c3c3c; padding: 0.6em; font-size: 24px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;⭐ &lt;s&gt;OldMan&amp;nbsp;Zombie&lt;/s&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;padding: 0.3em 0.5em 0.3em 0.5em; margin: 0.5em 0em; color: #000000; border-left: 3px solid #D2D2FF; font-weight: bold;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;좀비 캐릭터 에셋입니다.&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;●&amp;nbsp;&lt;b&gt;기간: ~2025.12.11까지&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 코드: STUDIONEWPUNCH&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 링크:&lt;/span&gt; &lt;a href=&quot;https://assetstore.unity.com/packages/3d/characters/humanoids/oldman-zombie-270864&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://assetstore.unity.com/packages/3d/characters/humanoids/oldman-zombie-270864&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1764865358073&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;OldMan Zombie | 3D 휴머노이드 | Unity Asset Store&quot; data-og-description=&quot;Elevate your workflow with the OldMan Zombie asset from Studio New Punch. Find this &amp;amp; other 휴머노이드 options on the Unity Asset Store.&quot; data-og-host=&quot;assetstore.unity.com&quot; data-og-source-url=&quot;https://assetstore.unity.com/packages/3d/characters/humanoids/oldman-zombie-270864&quot; data-og-url=&quot;https://assetstore.unity.com/packages/3d/characters/humanoids/oldman-zombie-270864&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bj7nqj/hyZODXICS8/XKLmBjpIG0KR6alEvXywh0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bvlqRR/hyZOUsoknn/6zaKRp0JOVwS1DLf0FAfOk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://assetstore.unity.com/packages/3d/characters/humanoids/oldman-zombie-270864&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://assetstore.unity.com/packages/3d/characters/humanoids/oldman-zombie-270864&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bj7nqj/hyZODXICS8/XKLmBjpIG0KR6alEvXywh0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bvlqRR/hyZOUsoknn/6zaKRp0JOVwS1DLf0FAfOk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;OldMan Zombie | 3D 휴머노이드 | Unity Asset Store&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Elevate your workflow with the OldMan Zombie asset from Studio New Punch. Find this &amp;amp; other 휴머노이드 options on the Unity Asset Store.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;assetstore.unity.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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: #000000;&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1. 에셋 구매하기를 눌러줍니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;517&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0v2RS/btsQGjWDPog/4uSrLwnlOVwkij9CByn73K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0v2RS/btsQGjWDPog/4uSrLwnlOVwkij9CByn73K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0v2RS/btsQGjWDPog/4uSrLwnlOVwkij9CByn73K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0v2RS%2FbtsQGjWDPog%2F4uSrLwnlOVwkij9CByn73K%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;360&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;517&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2. 쿠폰을 적용하는 칸에 코드를 입력한 후 '적용하기' 버튼을 누른 뒤 가격이 0달러가 되는 것을 확인하고 결제하시면 됩니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BchOa/btsQJIGPwB6/SpWvzBqKP8DITsh1TlNk2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BchOa/btsQJIGPwB6/SpWvzBqKP8DITsh1TlNk2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BchOa/btsQJIGPwB6/SpWvzBqKP8DITsh1TlNk2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBchOa%2FbtsQJIGPwB6%2FSpWvzBqKP8DITsh1TlNk2k%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;343&quot; height=&quot;412&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;532&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>개발, IT/정보 공유</category>
      <category>Asset</category>
      <category>Unity</category>
      <category>무료 에셋</category>
      <category>에셋</category>
      <category>에셋 스토어</category>
      <category>유니티</category>
      <author>현섭</author>
      <guid isPermaLink="true">https://shs217shs.tistory.com/128</guid>
      <comments>https://shs217shs.tistory.com/128#entry128comment</comments>
      <pubDate>Fri, 5 Dec 2025 01:23:20 +0900</pubDate>
    </item>
    <item>
      <title>[포트폴리오 / Unity 2D] Sprout Village</title>
      <link>https://shs217shs.tistory.com/127</link>
      <description>&lt;h2 style=&quot;border-bottom: 2px solid #3c3c3c; padding: 0.6em; font-size: 24px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;⭐ Sprout Village&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;font-size: 22px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;프로젝트 소개&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스타듀밸리, 코어키퍼와 같은 2D 탑뷰 시점의 농사 게임입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;씨앗을 심어 작물을 재배하고, 동물을 키워 동물에게서 나오는 생산품을 얻을 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;작물과 생산품을 팔아 돈을 벌고 더 비싼 작물을 키워보세요!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;인원:&lt;/b&gt; 1명&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;기간:&lt;/b&gt;&amp;nbsp;2025.11.21 ~ 2025.11.27&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;도구:&lt;/b&gt;&amp;nbsp;Unity 2D, C#, Git&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;영상:&lt;/b&gt;&lt;span&gt; &lt;a href=&quot;https://www.youtube.com/watch?v=16cJklxmST0&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=16cJklxmST0&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;PDF 포트폴리오 문서:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/0bpRM/dJMcadUNkXB/zwZ5XVEnektyCMKyBoNln0/Sprout%20Village_%EC%8B%A0%ED%98%84%EC%84%AD.pdf?attach=1&amp;amp;knm=tfile.pdf&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;Sprout Village_신현섭.pdf&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.78MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&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 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 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;</description>
      <category>포트폴리오</category>
      <category>portfolio</category>
      <category>Unity</category>
      <category>유니티</category>
      <category>포트폴리오</category>
      <author>현섭</author>
      <guid isPermaLink="true">https://shs217shs.tistory.com/127</guid>
      <comments>https://shs217shs.tistory.com/127#entry127comment</comments>
      <pubDate>Wed, 3 Dec 2025 00:45:16 +0900</pubDate>
    </item>
    <item>
      <title>[포트폴리오 / Unity 3D] Dungeon Robber</title>
      <link>https://shs217shs.tistory.com/126</link>
      <description>&lt;h2 style=&quot;border-bottom: 2px solid #3c3c3c; padding: 0.6em; font-size: 24px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;⭐ Dungeon Robber&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;font-size: 22px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;프로젝트 소개&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Escape From Duckov + 리썰 컴퍼니, R.E.P.O 느낌의 3D 게임으로&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;맵을 돌아다니며 아이템을 파밍하고 적을 피해 탈출하는 게임입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;파밍한 아이템을 팔아 돈을 벌어 스탯을 업그레이드하며 더 많은 돈을 버는 것이 목표입니다.&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;인원:&lt;/b&gt; 4명&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;기간:&lt;/b&gt; 2025.10.27 ~ 2025.11.01&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;도구:&lt;/b&gt; Unity 3D, C#, Git, Notion&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;영상:&lt;/b&gt; &lt;/span&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=SvnF2pNJUOM&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=SvnF2pNJUOM&lt;/a&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-radius: 0px 20px 20px 0px; padding: 0.5em 1em 0.5em 0.5em; background: #f2f2f2; border-left: 10px solid #616161; margin: 0.5em 0em; color: #000000; font-weight: bold;&quot;&gt;기획 전략&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● &lt;b&gt;Notion&lt;/b&gt;을 이용해 그라운드 룰, 에셋 링크, 컨벤션, 구상, 태스크 등을 관리했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1522&quot; data-origin-height=&quot;889&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d45OA4/dJMcabbB0xi/faS3NlHly2xnH0gZK25am0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d45OA4/dJMcabbB0xi/faS3NlHly2xnH0gZK25am0/img.png&quot; data-alt=&quot;Notion을 이용한 협업 스케쥴 및 룰 관리의 일부분&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d45OA4/dJMcabbB0xi/faS3NlHly2xnH0gZK25am0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd45OA4%2FdJMcabbB0xi%2FfaS3NlHly2xnH0gZK25am0%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;1522&quot; height=&quot;889&quot; data-origin-width=&quot;1522&quot; data-origin-height=&quot;889&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Notion을 이용한 협업 스케쥴 및 룰 관리의 일부분&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 깃 컨벤션을 정해 통일된 커밋 메세지 규칙 및 브랜치 전략을 선택하여 효율적이고 안정적인 깃 관리를 하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ○ &lt;b&gt;Git Flow&lt;/b&gt;&lt;b&gt; 전략&lt;/b&gt;을 택해 팀원마다 담당하는 브랜치를 만들어 관리 후 기능이 완성될 때 마다 머지를 하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;680&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UG7ev/dJMcabQdg21/P8cNwiBE5jSKN7nsM3ymWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UG7ev/dJMcabQdg21/P8cNwiBE5jSKN7nsM3ymWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UG7ev/dJMcabQdg21/P8cNwiBE5jSKN7nsM3ymWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUG7ev%2FdJMcabQdg21%2FP8cNwiBE5jSKN7nsM3ymWk%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;740&quot; height=&quot;680&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;680&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;730&quot; data-origin-height=&quot;651&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Leo71/dJMcaiogm2b/JpgWSw8Gpx3ozfTRfVCVg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Leo71/dJMcaiogm2b/JpgWSw8Gpx3ozfTRfVCVg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Leo71/dJMcaiogm2b/JpgWSw8Gpx3ozfTRfVCVg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLeo71%2FdJMcaiogm2b%2FJpgWSw8Gpx3ozfTRfVCVg0%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;730&quot; height=&quot;651&quot; data-origin-width=&quot;730&quot; data-origin-height=&quot;651&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bU21qQ/dJMcaiogm2A/7mFNMjJ0rev70EhrcgNhZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bU21qQ/dJMcaiogm2A/7mFNMjJ0rev70EhrcgNhZK/img.png&quot; data-alt=&quot;Notion에 정리된 깃 컨벤션 내용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bU21qQ/dJMcaiogm2A/7mFNMjJ0rev70EhrcgNhZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbU21qQ%2FdJMcaiogm2A%2F7mFNMjJ0rev70EhrcgNhZK%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;722&quot; height=&quot;640&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Notion에 정리된 깃 컨벤션 내용&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;&amp;nbsp;&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;span style=&quot;color: #000000;&quot;&gt;● 코드 컨벤션을 정해 클래스, 변수, 필드 등의 명명 규칙과 코드 스타일을 통일하여 가독성과 협업 효율을 증가 시켰습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp;파일 계층 구조를 리소스 파일 형식마다 위치를 분리하여 효율적인 관리를 하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;886&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSlToM/dJMcaiV3DWG/0QxvkPICIhbGzTizar3gGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSlToM/dJMcaiV3DWG/0QxvkPICIhbGzTizar3gGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSlToM/dJMcaiV3DWG/0QxvkPICIhbGzTizar3gGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSlToM%2FdJMcaiV3DWG%2F0QxvkPICIhbGzTizar3gGk%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;723&quot; height=&quot;886&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;886&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;617&quot; data-origin-height=&quot;805&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HVH19/dJMb995Wpvr/weXrwrknOkcbPwKFPMHPTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HVH19/dJMb995Wpvr/weXrwrknOkcbPwKFPMHPTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HVH19/dJMb995Wpvr/weXrwrknOkcbPwKFPMHPTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHVH19%2FdJMb995Wpvr%2FweXrwrknOkcbPwKFPMHPTK%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;617&quot; height=&quot;805&quot; data-origin-width=&quot;617&quot; data-origin-height=&quot;805&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 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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-radius: 0px 20px 20px 0px; padding: 0.5em 1em 0.5em 0.5em; background: #f2f2f2; border-left: 10px solid #616161; margin: 0.5em 0em; color: #000000; font-weight: bold;&quot;&gt;담당한 기능&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;font-size: 22px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 플레이어 컨트롤러&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2025-12-04 01-36-36.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NHJA4/dJMcacVS7Uk/6stTWdBzYF2WlDTPtpDEYK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NHJA4/dJMcacVS7Uk/6stTWdBzYF2WlDTPtpDEYK/img.gif&quot; data-alt=&quot;플레이어 움직임&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NHJA4/dJMcacVS7Uk/6stTWdBzYF2WlDTPtpDEYK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/NHJA4/dJMcacVS7Uk/6stTWdBzYF2WlDTPtpDEYK/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;338&quot; data-filename=&quot;2025-12-04 01-36-36.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;플레이어 움직임&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/batOf5/dJMcah3XQ6J/u7gwT9kGA0kQOlhg4xkH20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/batOf5/dJMcah3XQ6J/u7gwT9kGA0kQOlhg4xkH20/img.png&quot; data-alt=&quot;플레이어의 상태를 나타내는 비트 플래그&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/batOf5/dJMcah3XQ6J/u7gwT9kGA0kQOlhg4xkH20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbatOf5%2FdJMcah3XQ6J%2Fu7gwT9kGA0kQOlhg4xkH20%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;567&quot; height=&quot;240&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;240&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;span style=&quot;color: #000000;&quot;&gt;● 애니메이션 블렌딩을 통해 플레이어의 모션을 부드럽게 처리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 플레이어의 기능이 추후 확장되며 복잡해질 것을 염두해 partial 클래스를 이용해 기능 별로 스크립트 파일 분리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● Coroutine을 이용해 특정 시간 뒤에 수행해야 할 처리를 효율적으로 구현&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 델리게이트를 이용해 체력, 스태미나 등의 값이 변할 때 UI등의 변화에 유연하게 대처&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 비트 플래그를 이용해 일반 bool 변수를 사용할 때 보다 성능적인 면을 챙김&lt;/span&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 22px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 시야각&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2025-12-04 01-36-59.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Y3uxg/dJMcachhEpk/PxQJUf0jc8iIveBN11tr50/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Y3uxg/dJMcachhEpk/PxQJUf0jc8iIveBN11tr50/img.gif&quot; data-alt=&quot;시야각&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Y3uxg/dJMcachhEpk/PxQJUf0jc8iIveBN11tr50/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/Y3uxg/dJMcachhEpk/PxQJUf0jc8iIveBN11tr50/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;338&quot; data-filename=&quot;2025-12-04 01-36-59.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;338&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;span style=&quot;color: #000000;&quot;&gt;● 화면을 보여주는 메인 카메라 앞에 Panel을 하나 놓고 쉐이더를 통해 시야 범위만 보이도록 설정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 시야 범위 내에 있는 적의 렌더러는 켜줌&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 시야 범위 밖에 있거나 안에 있어도 장애물을 끼고 있는 적의 렌더러를 꺼줌&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 22px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 스탯 클래스&lt;/b&gt;&lt;/span&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;564&quot; data-origin-height=&quot;199&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nlDgK/dJMcaiV3GuI/ltVUYGQ3KaQM3DZ1XSiYUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nlDgK/dJMcaiV3GuI/ltVUYGQ3KaQM3DZ1XSiYUk/img.png&quot; data-alt=&quot;스탯 타입&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nlDgK/dJMcaiV3GuI/ltVUYGQ3KaQM3DZ1XSiYUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnlDgK%2FdJMcaiV3GuI%2FltVUYGQ3KaQM3DZ1XSiYUk%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;564&quot; height=&quot;199&quot; data-origin-width=&quot;564&quot; data-origin-height=&quot;199&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;스탯 타입&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;590&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sz6xf/dJMcaaqePjy/gL0uZtcm4kDbiSDEK0HdWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sz6xf/dJMcaaqePjy/gL0uZtcm4kDbiSDEK0HdWK/img.png&quot; data-alt=&quot;스탯 정보 클래스&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sz6xf/dJMcaaqePjy/gL0uZtcm4kDbiSDEK0HdWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsz6xf%2FdJMcaaqePjy%2FgL0uZtcm4kDbiSDEK0HdWK%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;590&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;590&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;스탯 정보 클래스&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;545&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/br86kO/dJMcafLQBuI/6KsG5qBi2YsTNpR5w2Ykv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/br86kO/dJMcafLQBuI/6KsG5qBi2YsTNpR5w2Ykv1/img.png&quot; data-alt=&quot;Entity들이 가질 BaseStat 클래스의 일부 코드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/br86kO/dJMcafLQBuI/6KsG5qBi2YsTNpR5w2Ykv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbr86kO%2FdJMcafLQBuI%2F6KsG5qBi2YsTNpR5w2Ykv1%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;646&quot; height=&quot;545&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;545&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Entity들이 가질 BaseStat 클래스의 일부 코드&lt;/figcaption&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;span style=&quot;color: #000000;&quot;&gt;● 플레이어와 적 클래스 모두 Entity 클래스를 상속받으며 게임 특성상 여러 종류의 스탯이 변하는 상황이&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp;많이 발생하기 때문에 모둔 Entity들이 갖는 BaseStat 클래스를 통해 스탯 관리&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 스탯은 EnumType과 Value의 한 쌍으로 이루어져 리스트 자료 구조에 저장됨&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 초기 스탯 수치인 BaseStats과 런타임중 동적으로 값이 변할 Stats 리스트를 통해 스탯 수치의 변동과 초기화를 수행&lt;/span&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;font-size: 22px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 버프 시스템&lt;/b&gt;&lt;/span&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;524&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6vRvK/dJMcac2CcDV/IUG0193WQdJu6t2RBt6EG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6vRvK/dJMcac2CcDV/IUG0193WQdJu6t2RBt6EG1/img.png&quot; data-alt=&quot;Entity들이 가질 BuffManager 클래스&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6vRvK/dJMcac2CcDV/IUG0193WQdJu6t2RBt6EG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6vRvK%2FdJMcac2CcDV%2FIUG0193WQdJu6t2RBt6EG1%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;638&quot; height=&quot;524&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;524&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Entity들이 가질 BuffManager 클래스&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;span style=&quot;color: #000000; text-align: start;&quot;&gt;● 어떤 버프인지를 관리하는 BaseBuff와 Entity 클래스의 필드에서 직접 버프를 관리해줄 BuffManager로 구성됨 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; ● 플레이어를 비롯한 Entity를 상속받는 객체들은 각자 가지고 있는 BuffManager의 ApplyBuff 메서드를 이용해 관리됨 &lt;/span&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bc61g8/dJMcaaDLzYH/L5MDkVbZTYGqSrXxKPigXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bc61g8/dJMcaaDLzYH/L5MDkVbZTYGqSrXxKPigXk/img.png&quot; data-alt=&quot;OnActivate 메서드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bc61g8/dJMcaaDLzYH/L5MDkVbZTYGqSrXxKPigXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbc61g8%2FdJMcaaDLzYH%2FL5MDkVbZTYGqSrXxKPigXk%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;624&quot; height=&quot;354&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;354&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;OnActivate 메서드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;632&quot; data-origin-height=&quot;503&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZMnnd/dJMcagjGug4/rbSlX1XuNRmuZgfZaRne6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZMnnd/dJMcagjGug4/rbSlX1XuNRmuZgfZaRne6K/img.png&quot; data-alt=&quot;OnTick 메서드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZMnnd/dJMcagjGug4/rbSlX1XuNRmuZgfZaRne6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZMnnd%2FdJMcagjGug4%2FrbSlX1XuNRmuZgfZaRne6K%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;632&quot; height=&quot;503&quot; data-origin-width=&quot;632&quot; data-origin-height=&quot;503&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;OnTick 메서드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;299&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0wVLQ/dJMcacBA0jV/HMfVtKH2fUAcMTnDyUZmOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0wVLQ/dJMcacBA0jV/HMfVtKH2fUAcMTnDyUZmOk/img.png&quot; data-alt=&quot;OnDeActivate 메서드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0wVLQ/dJMcacBA0jV/HMfVtKH2fUAcMTnDyUZmOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0wVLQ%2FdJMcacBA0jV%2FHMfVtKH2fUAcMTnDyUZmOk%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;635&quot; height=&quot;299&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;299&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;OnDeActivate 메서드&lt;/figcaption&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;span style=&quot;color: #000000;&quot;&gt;● 이동 속도를 낮추거나, 도트뎀을 가하는 등의 버프, 디버프를 효율적으로 관리하기 위해 따로 클래스를 빼서 구현&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● BaseBuff 클래스는 버프 효과가 발동했을 때 각 시점에서 발생할 메서드를 가지고 있음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; ○ OnActive():&lt;/b&gt; 버프가 처음 발동됐을 때 호출&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; ○ OnTick():&lt;/b&gt; 버프가 적용되는 동안 일정 Tick 시간마다 호출&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; ○ OnDeActivate():&lt;/b&gt; 버프가 끝날 때 호출&lt;/span&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;font-size: 22px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;● 매니저 및 확장 시스템&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;608&quot; data-origin-height=&quot;814&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HNshW/dJMcafyjtIi/GN1YBKCLo4slsBirMVPgz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HNshW/dJMcafyjtIi/GN1YBKCLo4slsBirMVPgz1/img.png&quot; data-alt=&quot;Singleton 제네릭 클래스&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HNshW/dJMcafyjtIi/GN1YBKCLo4slsBirMVPgz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHNshW%2FdJMcafyjtIi%2FGN1YBKCLo4slsBirMVPgz1%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;608&quot; height=&quot;814&quot; data-origin-width=&quot;608&quot; data-origin-height=&quot;814&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Singleton 제네릭 클래스&lt;/figcaption&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 전역적으로 하나의 객체만 존재해야하는 GameManager나 SoundManager등 다른 매니저 클래스를&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp;제네릭 Singleton을 상속받아 사용&lt;/span&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;255&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVSPhy/dJMcagqr77b/Uwv5Q3zMnT67IMyjnUbLL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVSPhy/dJMcagqr77b/Uwv5Q3zMnT67IMyjnUbLL0/img.png&quot; data-alt=&quot;Extension 확장 클래스&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVSPhy/dJMcagqr77b/Uwv5Q3zMnT67IMyjnUbLL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVSPhy%2FdJMcagqr77b%2FUwv5Q3zMnT67IMyjnUbLL0%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;648&quot; height=&quot;255&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;255&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Extension 확장 클래스&lt;/figcaption&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 쿼터뷰 시야 특성상 마우스 좌표를 월드 벡터로 반환하는 기능이 필요하며, 이를 간편하게 사용하기 위해 확장 메서드로 구현&lt;/span&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1018&quot; data-origin-height=&quot;521&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lkYtL/dJMcadNYHrD/PWdlDipFFIoXDbvuejQ40K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lkYtL/dJMcadNYHrD/PWdlDipFFIoXDbvuejQ40K/img.png&quot; data-alt=&quot;CoroutineManager 클래스&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lkYtL/dJMcadNYHrD/PWdlDipFFIoXDbvuejQ40K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlkYtL%2FdJMcadNYHrD%2FPWdlDipFFIoXDbvuejQ40K%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;1018&quot; height=&quot;521&quot; data-origin-width=&quot;1018&quot; data-origin-height=&quot;521&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CoroutineManager 클래스&lt;/figcaption&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;span style=&quot;color: #000000;&quot;&gt;● 코루틴의 WaitForSeconds 등의 캐싱을 위한 CoroutineManager 클래스를 구현&lt;/span&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-radius: 0px 20px 20px 0px; padding: 0.5em 1em 0.5em 0.5em; background: #f2f2f2; border-left: 10px solid #616161; margin: 0.5em 0em; color: #000000; font-weight: bold;&quot;&gt;보완해야 할 점&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 플레이어의 기능 구현에서 걷기, 달리기, 대쉬 등 여러 상태를 관리할 때 두 가지 이상의 상태가 동시에 들어올 수도 있어야해서&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상태패턴이 아닌 bool 변수를 이용한 조건 체크 방식을 사용했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;의도에 맞게 여러 상태가 중첩되어 기능이 동작하지만 상태의 개수가 많아질 수록 조건 체크를 위한 로직이 매우 복잡해지는&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문제가 발생했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;조건이나 상태가 복잡해질 경우 FSM이나 상태 패턴을 이용해 상태별로 로직을 분리하는 방식을 사용해야겠습니다.&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;● 시야각을 통한 적 렌더링 등의 기능은 이번 프로젝트에서 필수로 구현되어야 하는 기능이기에 쉐이더에 대한 지식이&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;부족한 상태로 제작하게 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;추후 쉐이더와 그래픽스에 대한 지식을 쌓아 더 나은 FOV 시스템을 구현해볼 계획입니다.&lt;/span&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 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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>포트폴리오</category>
      <category>2d</category>
      <category>Unity</category>
      <category>유니티</category>
      <category>포트폴리오</category>
      <author>현섭</author>
      <guid isPermaLink="true">https://shs217shs.tistory.com/126</guid>
      <comments>https://shs217shs.tistory.com/126#entry126comment</comments>
      <pubDate>Fri, 21 Nov 2025 18:00:21 +0900</pubDate>
    </item>
  </channel>
</rss>