<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>월세 500 호기심 천국</title>
    <link>https://kjunwoo23.tistory.com/</link>
    <description>호기심을 품은 자여 그 무게를 견뎌라</description>
    <language>ko</language>
    <pubDate>Mon, 13 Jul 2026 14:15:57 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>원펀치 쓰리 갓냥이</managingEditor>
    <image>
      <title>월세 500 호기심 천국</title>
      <url>https://tistory1.daumcdn.net/tistory/6773154/attach/2607d140e180422fb0c87a880286f170</url>
      <link>https://kjunwoo23.tistory.com</link>
    </image>
    <item>
      <title>11주차: 마무리 - 후기</title>
      <link>https://kjunwoo23.tistory.com/13</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/2&quot;&gt;0주차: 인트로 - 새롭고 신기한 것을 좋아하거나, 모르는 것을 알고 싶어 하는 마음&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/3&quot;&gt;1주차: Unity 엔진은 왜 개발 언어로 C#을 선택했을까?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/4&quot;&gt;2주차: 의외로&amp;nbsp;세상&amp;nbsp;잡다한&amp;nbsp;Transform에&amp;nbsp;대한&amp;nbsp;모든&amp;nbsp;것&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/5&quot;&gt;3주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (1/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/6&quot;&gt;4주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (2/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/7&quot;&gt;5주차: 헐크&amp;nbsp;아저씨도&amp;nbsp;깜짝&amp;nbsp;놀란&amp;nbsp;Unity&amp;nbsp;Render&amp;nbsp;Pipeline이&amp;nbsp;작동하는&amp;nbsp;과정&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/8&quot;&gt;6주차: 매 프레임 나보다 갓생 사는 Unity의 Life Cycle&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/9&quot;&gt;7주차: 남들보다 더 갓생 사는 Coroutine의 충격적인 정체&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/10&quot;&gt;8주차: 야물(YAML)딱진 그 녀석의 은밀한 속마음 - Unity Scene 파일 (.unity)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/11&quot;&gt;9주차: 내&amp;nbsp;과자&amp;nbsp;포장지&amp;nbsp;누가&amp;nbsp;버렸어?&amp;nbsp;-&amp;nbsp;meta&amp;nbsp;data&amp;nbsp;파일&amp;nbsp;(.meta)&amp;nbsp;파헤치기&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/12&quot;&gt;10주차: 철가방 채로 배달온 Unity 빌드 파일. 난 단무지 시킨 적 없는데, 왜 있지?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/13&quot;&gt;11주차: 마무리 - 후기&lt;/a&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;유니티에 관해 궁금한 것은 많았고,&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;굳이 그것들을 알아야 할 필요는 없었다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;Quaternion이나 Unity Render Pipeline에 대해서는 얕은 정도의 지식만 알고 있어도&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 지나치기에는 아쉬운 것들이 너무 많았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이에 티스토리 연재를 명분 삼아 이것저것 공부를 시작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;월세 500 호기심 천국&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블로그 명을 보고 작성자가 비싼 집에 살고 있다고 자랑을 하는 것일까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각할 수도 있겠지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블로그 한 줄 설명을 보면 이해가 더 쉬울 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;호기심을&amp;nbsp;품은&amp;nbsp;자여&amp;nbsp;그&amp;nbsp;무게를&amp;nbsp;견뎌라&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;마음 속 깊숙히 품어놓기만 했던 궁금한 것들을 파헤쳐나가며&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;지식의 천국에 도달하고 싶다면,&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그에 걸맞는 꾸준한 노동을 치루어야 한다는,&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유적인 의미의 월세 500이였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(애초에 이런 집에 살고 있을리도 없고...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 말에 맞게, 지난 10주는 꽤나 바빴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 어쩌다 한 편 글을 작성하는건 그렇게 큰 부담이 아닐지라도,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매주마다 다른 주제의 글을 꾸준히 작성하는건 상당한 부담으로 다가왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼에도 결국은 1주차부터 10주차까지, 어케저케 해냈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;몇 개의 주제는 학과 수업 때 배웠던 부분들이 조금씩 응용되어있는 것도 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;몇 개는 기존 자료를 쉽게 찾아볼 수 없어 구글을 싹 다 뒤져봐야하는 것도 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 모두 유니티에 관한 짜잘한 지식들임에는 변함이 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금 당장은 쓰이는 상황이 없더라도, 분명 언젠가는 내게 도움이 될 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 목표했던 것들을 채우고나니 참 뿌듯해지는 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;지금껏 월세 500은 성실히 납부해왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 이제 나는 지식의 천국에 도달 수 있을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글쎄...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그곳에서 월세만 꾸준히 낸다고 편하게 먹고 살 수는 없을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각종 세금, 식비, 수도세, 전기세도 필요할 테니.&lt;/p&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;i&gt;그러므로 이제는 다른 공부를 하러 가야 한다.&lt;/i&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&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;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;내 맘대로 쓰는 Unity 심층분석 析深層分,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&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-filename=&quot;1bea627e7caf47a4bdd.jpg&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OGU4g/btsIPZLBKl8/dFAKoPWBTgZ1owFZTtiiCK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OGU4g/btsIPZLBKl8/dFAKoPWBTgZ1owFZTtiiCK/img.jpg&quot; data-alt=&quot;잘가요 동지들... 취업한 미래에서, 씨유어게인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OGU4g/btsIPZLBKl8/dFAKoPWBTgZ1owFZTtiiCK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOGU4g%2FbtsIPZLBKl8%2FdFAKoPWBTgZ1owFZTtiiCK%2Fimg.jpg&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;413&quot; height=&quot;310&quot; data-filename=&quot;1bea627e7caf47a4bdd.jpg&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;450&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;</description>
      <category>내 맘대로 쓰는 Unity 심층분석 析深層分</category>
      <author>원펀치 쓰리 갓냥이</author>
      <guid isPermaLink="true">https://kjunwoo23.tistory.com/13</guid>
      <comments>https://kjunwoo23.tistory.com/13#entry13comment</comments>
      <pubDate>Thu, 7 Mar 2024 21:28:19 +0900</pubDate>
    </item>
    <item>
      <title>10주차: 철가방 채로 배달온 Unity 빌드 파일. 난 단무지 시킨 적 없는데, 왜 있지?</title>
      <link>https://kjunwoo23.tistory.com/12</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/2&quot;&gt;0주차: 인트로 - 새롭고 신기한 것을 좋아하거나, 모르는 것을 알고 싶어 하는 마음&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/3&quot;&gt;1주차: Unity 엔진은 왜 개발 언어로 C#을 선택했을까?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/4&quot;&gt;2주차: 의외로&amp;nbsp;세상&amp;nbsp;잡다한&amp;nbsp;Transform에&amp;nbsp;대한&amp;nbsp;모든&amp;nbsp;것&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/5&quot;&gt;3주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (1/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/6&quot;&gt;4주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (2/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/7&quot;&gt;5주차: 헐크&amp;nbsp;아저씨도&amp;nbsp;깜짝&amp;nbsp;놀란&amp;nbsp;Unity&amp;nbsp;Render&amp;nbsp;Pipeline이&amp;nbsp;작동하는&amp;nbsp;과정&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/8&quot;&gt;6주차: 매 프레임 나보다 갓생 사는 Unity의 Life Cycle&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/9&quot;&gt;7주차: 남들보다 더 갓생 사는 Coroutine의 충격적인 정체&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/10&quot;&gt;8주차: 야물(YAML)딱진 그 녀석의 은밀한 속마음 - Unity Scene 파일 (.unity)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/11&quot;&gt;9주차: 내&amp;nbsp;과자&amp;nbsp;포장지&amp;nbsp;누가&amp;nbsp;버렸어?&amp;nbsp;-&amp;nbsp;meta&amp;nbsp;data&amp;nbsp;파일&amp;nbsp;(.meta)&amp;nbsp;파헤치기&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/12&quot;&gt;10주차: 철가방 채로 배달온 Unity 빌드 파일. 난 단무지 시킨 적 없는데, 왜 있지?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/13&quot;&gt;11주차: 마무리 - 후기&lt;/a&gt;&lt;/blockquote&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;style3&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.exe 파일과 함께 &lt;b&gt;꼭 보이는 파일들&lt;/b&gt;이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(windows용 빌드 기준)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;324&quot; data-origin-height=&quot;113&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Cs7ud/btsIJHW8ZeH/SvgYNSeNrkDpKIXKX2Yvd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Cs7ud/btsIJHW8ZeH/SvgYNSeNrkDpKIXKX2Yvd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Cs7ud/btsIJHW8ZeH/SvgYNSeNrkDpKIXKX2Yvd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCs7ud%2FbtsIJHW8ZeH%2FSvgYNSeNrkDpKIXKX2Yvd1%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;324&quot; height=&quot;113&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;324&quot; data-origin-height=&quot;113&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2개의 영문 모를 폴더명과, 의문의 .exe, .dll 파일.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모바일 .apk 파일처럼 &lt;b&gt;실행에 필요한 .exe 파일 하나만 깔끔하게 나오면&lt;/b&gt; 참 좋을 텐데...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 저런 파일들이 &lt;b&gt;항상 같이 붙어나오는 걸까?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순서대로 하나하나 자세히 알아볼 필요가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0fgkk/btsILiCUA0Q/5pXgNSz6cEn4cQobbnHDvK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0fgkk/btsILiCUA0Q/5pXgNSz6cEn4cQobbnHDvK/img.jpg&quot; data-alt=&quot;어차피 꼭 딸려나오는거, 안에 뭐가 들었는지 알고 먹는게 더 맛있지 않겠는가?&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0fgkk/btsILiCUA0Q/5pXgNSz6cEn4cQobbnHDvK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0fgkk%2FbtsILiCUA0Q%2F5pXgNSz6cEn4cQobbnHDvK%2Fimg.jpg&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;473&quot; height=&quot;355&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;540&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;h2 data-ke-size=&quot;size26&quot;&gt;게임명_Data 폴더&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 다른 파일들에 비해 이름이 정직한 편이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대충 게임에 필요한 데이터들이 들어있겠지...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하는 생각으로 폴더를 열어보면?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;503&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ySglC/btsIKTpSKrw/s6EwLv7KQiupTaptcomin0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ySglC/btsIKTpSKrw/s6EwLv7KQiupTaptcomin0/img.png&quot; data-alt=&quot;뭐가 또 이렇게 많은걸까...&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ySglC/btsIKTpSKrw/s6EwLv7KQiupTaptcomin0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FySglC%2FbtsIKTpSKrw%2Fs6EwLv7KQiupTaptcomin0%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;417&quot; height=&quot;405&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;503&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;Managed, Plugins, Resources...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수많은 폴더와 파일들이 그 안에 숨어있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것도 또 차례대로 열어봐야겠는걸.&lt;/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;Managed 폴더&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ocwud/btsILFq0EL9/q5cq9L16R5gDkiBKez5NBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ocwud/btsILFq0EL9/q5cq9L16R5gDkiBKez5NBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ocwud/btsILFq0EL9/q5cq9L16R5gDkiBKez5NBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOcwud%2FbtsILFq0EL9%2Fq5cq9L16R5gDkiBKez5NBk%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;613&quot; height=&quot;322&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;228&quot; data-origin-height=&quot;100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baT6Kl/btsIKcJ6ym3/TTZZqo8axcmUZRqju7KPMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baT6Kl/btsIKcJ6ym3/TTZZqo8axcmUZRqju7KPMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baT6Kl/btsIKcJ6ym3/TTZZqo8axcmUZRqju7KPMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaT6Kl%2FbtsIKcJ6ym3%2FTTZZqo8axcmUZRqju7KPMK%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;228&quot; height=&quot;100&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;228&quot; data-origin-height=&quot;100&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Managed 폴더&lt;/b&gt; 안에는 &lt;b&gt;유니티 실행 코드를 컴파일한 여러 코드들&lt;/b&gt;이 &lt;b&gt;dll&lt;/b&gt;의 형태로 저장되어있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cinemachine, UnityEngine, UnityEngine.UI 등 우리가 스크립트 상에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;using문&lt;/b&gt;을 통해 불러와 사용하는 코드들도 있어서 반가웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Plugins 폴더&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nH9ke/btsILyyNgzv/rn9v2WhHJiSGdeHGEW93rK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nH9ke/btsILyyNgzv/rn9v2WhHJiSGdeHGEW93rK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nH9ke/btsILyyNgzv/rn9v2WhHJiSGdeHGEW93rK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnH9ke%2FbtsILyyNgzv%2Frn9v2WhHJiSGdeHGEW93rK%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;620&quot; height=&quot;100&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;100&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Plugins 폴더&lt;/b&gt; 내부에는 &lt;b&gt;몇 개의 폴더&lt;/b&gt;가 더 있었고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타고 타고 끝까지 들어가봐도 막 엄청난 것들이 있다거나 하지는 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;유니티 외부에서 제공되는 플러그인&lt;/b&gt;들이 담겨있는 폴더라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내 게임의 경우 &lt;b&gt;스팀 출시&lt;/b&gt;를 위해 &lt;b&gt;관련 플러그인&lt;/b&gt;을 사용했기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 폴더에 &lt;b&gt;steam_api64.dll&lt;/b&gt;이 포함되어 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Resources 폴더&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;229&quot; data-origin-height=&quot;100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2NLuU/btsIJcErt9z/Sbpk4XKUWpidQpGWbR2kkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2NLuU/btsIJcErt9z/Sbpk4XKUWpidQpGWbR2kkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2NLuU/btsIJcErt9z/Sbpk4XKUWpidQpGWbR2kkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2NLuU%2FbtsIJcErt9z%2FSbpk4XKUWpidQpGWbR2kkK%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;229&quot; height=&quot;100&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;229&quot; data-origin-height=&quot;100&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Resources 폴더&lt;/b&gt;에 있는 것들.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;유니티의 기본 기능들&lt;/b&gt;이 들어가있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Texture, Material, Font, Mesh, MonoBehaviour등 필수적인 요소의 경우 &lt;b&gt;unity default resources&lt;/b&gt;에,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Shader와 같은 선택적인 요소의 경우 &lt;b&gt;unity_builtin_extra&lt;/b&gt;에 따로 담겨있다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;기타 파일들&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;app.info&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;.info&lt;/b&gt;라는 생소한 확장자의 파일이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 메모장으로 열어보면 &lt;b&gt;게임의 이름&lt;/b&gt;, &lt;b&gt;제작사명&lt;/b&gt;이 들어있는 것을 알 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_edited_blob&quot; data-origin-width=&quot;302&quot; data-origin-height=&quot;110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UunZt/btsIK5cz8JF/VYlBlqAmKIha2m1GHxp5hK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UunZt/btsIK5cz8JF/VYlBlqAmKIha2m1GHxp5hK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UunZt/btsIK5cz8JF/VYlBlqAmKIha2m1GHxp5hK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUunZt%2FbtsIK5cz8JF%2FVYlBlqAmKIha2m1GHxp5hK%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;302&quot; height=&quot;110&quot; data-filename=&quot;edited_edited_blob&quot; data-origin-width=&quot;302&quot; data-origin-height=&quot;110&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;globalgamemanagers&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서로 비슷한 이름으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;globalgamemanagers,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;globalgamemanagers.assets,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;globalgamemanagers.assets.resS&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;세 종류&lt;/b&gt;가 있으며, &lt;b&gt;각각의 역할 역시 다르다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; globalgamemanagers&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 유니티 프로젝트 내&amp;nbsp;&lt;b&gt;대부분의 설정들&lt;/b&gt;이 다 담겨있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- PlayerSettings, GraphicsSettings, BuildSettings, Physics2DSettings 등.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; globalgamemanagers.assets&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 위의 것과 이름이 비슷해 헷갈릴 수 있지만, &lt;b&gt;역할이 엄연히 다르다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;Shader&lt;/b&gt;와 &lt;b&gt;MonoScript&lt;/b&gt;(스크립트의 이름, 클래스명, 네임스페이스 등)에 대한 정보를 담고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;globalgamemanagers.assets.resS&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- globalgamemanagers.assets에서 상대적으로 &lt;b&gt;용량&lt;/b&gt;이 큰&lt;br /&gt;&amp;nbsp; &lt;b&gt;이미지&lt;/b&gt;, &lt;b&gt;음성&lt;/b&gt;, &lt;b&gt;동영상&lt;/b&gt; 등을 &lt;b&gt;외부에서 불러올 때&lt;/b&gt; 사용된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;level0, level1, level2, ... , levelN&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트마다 존재하는 &lt;b&gt;level 파일의 개수&lt;/b&gt;가 다르며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 파일별로 &lt;b&gt;자신의&amp;nbsp;번호&lt;/b&gt;에 대응되는 &lt;b&gt;씬의 정보&lt;/b&gt;를 담는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;level0&lt;/b&gt;의 경우 &lt;b&gt;Scene[0]&lt;/b&gt;, &lt;b&gt;level1&lt;/b&gt;의 경우 &lt;b&gt;Scene[1]&lt;/b&gt;과 같은 식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당연히 level 파일은 &lt;b&gt;씬의 개수만큼 존재&lt;/b&gt;한다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;resources.assets, resources.assets.resS&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 씬에 묶여있는 리소스들이 아닌,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게임의 &lt;b&gt;런타임 시점에서 자유롭게 로딩&lt;/b&gt;되는 리소스들을 담고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유니티 에디터 상에서&amp;nbsp;&lt;b&gt;Resources 폴더&lt;/b&gt; 안에 넣어두는 에셋들을 생각하면 될 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때문에 런타임 로딩 특성상 &lt;b&gt;게임 내에서 사용되지 않는 파일들&lt;/b&gt;도 포함되어 있을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;.resS&lt;/b&gt;의 경우 아까와 마찬가지로 상대적으로 &lt;b&gt;용량&lt;/b&gt;이 큰 &lt;b&gt;이미지&lt;/b&gt;, &lt;b&gt;음성&lt;/b&gt;, &lt;b&gt;동영상&lt;/b&gt; 등을 불러올 때 사용된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;sharedassetsN.assets, sharedassetsN.assets.resS&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게임 내 &lt;b&gt;실질적인 에셋들이 전부 담겨있는 핵심 파일&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;levelN에 등장하는 에셋들&lt;/b&gt;이 각 번호에 맞는 &lt;b&gt;sharedassetsN.assets에 저장&lt;/b&gt;된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때문에 _Data 폴더 내의 파일들 중 &lt;b&gt;용량이 가장 크며&lt;/b&gt;,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 상대적으로 용량이 큰 이미지, 음성, 동영상 등이 담아내는 &lt;b&gt;.resS&lt;/b&gt;의 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작성자가 빌드한 게임 기준 1GB가 넘게 나왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평소 즐겨 하던 게임의 클라이언트를 뜯어보고 싶은 유저라면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로써 양이 제일 많은 &lt;b&gt;게임명_Data 폴더&lt;/b&gt;를 전부 뜯어보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 &lt;b&gt;MonoBleedingEdge 폴더&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;MonoBleedingEdge&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;245&quot; data-origin-height=&quot;100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JsxIp/btsILrGuNxE/oiOmJ4ECEiKPs1kYBrIJf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JsxIp/btsILrGuNxE/oiOmJ4ECEiKPs1kYBrIJf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JsxIp/btsILrGuNxE/oiOmJ4ECEiKPs1kYBrIJf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJsxIp%2FbtsILrGuNxE%2FoiOmJ4ECEiKPs1kYBrIJf0%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;245&quot; height=&quot;100&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;245&quot; data-origin-height=&quot;100&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;음... 열어봐도 사실 별게 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 들어가보아도 &lt;b&gt;.dll 파일&lt;/b&gt;만 몇 개 있을 뿐이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(프로그램을 실행시키기 위한 C#, MonoDevelop 라이브러리)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하위 경로인 &lt;b&gt;etc&lt;/b&gt;로 들어갈 경우 유니티가 사용하는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;mono 가상머신&lt;/b&gt; 관련 파일들이 담겨있는 &lt;b&gt;mono 폴더&lt;/b&gt;를 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;UnityCrashHandler64.exe&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게임 실행 파일과 같은 확장자인 &lt;b&gt;.exe 파일&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유니티 게임을 한 번이라도 직접 실행해본 사람들은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호기심에라도 몇 번 눌러봤지만, &lt;b&gt;실행은 잘 되지 않았을&lt;/b&gt;, 그런 파일이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그도 당연할 것이, 이 파일은 &lt;b&gt;애초에 직접 창을 열어서 실행시키는 그런 파일이 아니다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 파일은&lt;b&gt; Unity 내부&lt;/b&gt;에서 &lt;b&gt;충돌&lt;/b&gt;이 나거나 &lt;b&gt;문제&lt;/b&gt;가 생겼을 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;개발자&lt;/b&gt;가 문제를 &lt;b&gt;식별&lt;/b&gt;하고&lt;b&gt; 수정&lt;/b&gt;하기 위해 사용하는,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;크래시 핸들러 실행 파일&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의외지만, 이 파일을 삭제하더라도 &lt;b&gt;게임의 실행에 전혀 영향을 끼치지 않는다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오히려 어떤 경우에는 플레이 중인 게임에서 &lt;b&gt;버그가 발생&lt;/b&gt;했는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 &lt;b&gt;크래시 핸들러 파일을 삭제하고 문제가 사라졌다&lt;/b&gt;는 사람도 있는 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어찌됐든 이를 통해 알 수 있는 것은,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;게임 유저 입장&lt;/b&gt;에서는 &lt;b&gt;크게 중요한 파일이 아니라는 것&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;UnityPlayer.dll&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 &lt;b&gt;.dll 파일&lt;/b&gt;은 앞에서도 많이 나오긴 했지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 와서라도 더 정확한 의미를 알아보자면 &lt;b&gt;Dynamic Link Library&lt;/b&gt;라는 뜻이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;여러 프로그램에서 동시에 사용할 수 있는 코드와 데이터&lt;/b&gt;를 포함하는 파일의 유형이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모두가 흔히 쓰는, 말 그대로 &lt;b&gt;두루두루 자주 쓰이는 코드들&lt;/b&gt;을 &lt;b&gt;.dll 형식으로 배포&lt;/b&gt;하면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는&lt;b&gt; 해당 .dll을 불러온 뒤 함수를 호출&lt;/b&gt;하여 그 기능들을 &lt;b&gt;편하게 사용&lt;/b&gt;할 수 있는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 Unity C# Script를 작성할 때 &lt;b&gt;UnityEngine&lt;/b&gt;, &lt;b&gt;UnityEngine.UI&lt;/b&gt; 등을 &lt;b&gt;using문&lt;/b&gt;을 통해 가져오는 것도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;유용한 함수와 클래스들이&lt;/span&gt; &lt;b&gt;UnityEngine.dll&lt;/b&gt;, &lt;b&gt;UnityEngine.UI.dll&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;b&gt;UnityPlayer.dll&lt;/b&gt;의 경우 유니티에 있어서 &lt;b&gt;가장 핵심&lt;/b&gt;이라고 볼 수 있겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유니티 공식 문서에는 이 파일이 &lt;b&gt;유니티의 native 엔진 코드를 모두 포함&lt;/b&gt;한다고 설명한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때문에 &lt;b&gt;해당 파일이 없으면 게임 자체가 실행이 되지 않고&lt;/b&gt;,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글에 조금만 검색해봐도 이 파일이 없어 게임이 실행되지 않는다며&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제를 해결해달라는 글이 꽤 많이 올라와있음을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유니티의 빌드 파일 구조를 조금만 알고 있는 사람이라면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무데서나 굴러다니는 &lt;b&gt;UnityPlayer.dll 파일 하나를 복사&lt;/b&gt;해다가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제되는 게임 실행 파일 옆에 붙여넣어&lt;/b&gt; 문제를 바로 해결했을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;h2 data-ke-size=&quot;size26&quot;&gt;마무리&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;324&quot; data-origin-height=&quot;113&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Cs7ud/btsIJHW8ZeH/SvgYNSeNrkDpKIXKX2Yvd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Cs7ud/btsIJHW8ZeH/SvgYNSeNrkDpKIXKX2Yvd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Cs7ud/btsIJHW8ZeH/SvgYNSeNrkDpKIXKX2Yvd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCs7ud%2FbtsIJHW8ZeH%2FSvgYNSeNrkDpKIXKX2Yvd1%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;367&quot; height=&quot;128&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;324&quot; data-origin-height=&quot;113&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 해서 철가방 채 배달온 &lt;b&gt;Unity 게임 빌드 파일 5형제&lt;/b&gt;를 모두 뜯어보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;게임 실행&lt;/b&gt;에 있어서 &lt;b&gt;정말 필수적인 젓가락 같은 녀석들&lt;/b&gt;도 있었고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;있으나 마나한 양파 춘장 같은 녀석&lt;/b&gt;도 있었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;352&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFArci/btsII13YhNw/ZEKKdirAFxWDtDKrLAVNg1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFArci/btsII13YhNw/ZEKKdirAFxWDtDKrLAVNg1/img.gif&quot; data-alt=&quot;생양파가 있든말든 결국 유저한테는 실행만 잘 되면 장땡인걸&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFArci/btsII13YhNw/ZEKKdirAFxWDtDKrLAVNg1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bFArci/btsII13YhNw/ZEKKdirAFxWDtDKrLAVNg1/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;376&quot; height=&quot;212&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;352&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;생양파가 있든말든 결국 유저한테는 실행만 잘 되면 장땡인걸&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 &lt;b&gt;짜장면을 요리하는 사람&lt;/b&gt;이나, &lt;b&gt;짜장면을 먹는 사람&lt;/b&gt;이나,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 같이 나오는 단무지의 색이 항상 노란색인지,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 군만두는 꼭 주름 잡힌 초승달 모양이어야 하는지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;꼭 알아야 할 필요는 없다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 다른 중국집에서도 &lt;b&gt;다 기성품으로 주고&lt;/b&gt;,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리도 그렇게 먹는게 &lt;b&gt;보통 맛있기 때문&lt;/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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;알고 먹는 것&lt;/b&gt;과 &lt;b&gt;모르고 먹는 것&lt;/b&gt;에는 차이가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹여나 식당만의 차별화된 단무지가 필요하다는 생각이 들 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 배워두었던 레시피를 응용해 &lt;b&gt;직접 담가서 대접&lt;/b&gt;할 수도 있는거고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;군만두도 &lt;b&gt;직접 만들어&lt;/b&gt; 이윤을 더 노려볼 수도 있는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그게 또 색다른 맛으로 대박이 날 수도 있는거고.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;짜장면을 요리하는 사람이나, 그것을 먹는 사람이나,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;오직 알고 있는 자&lt;/b&gt;만이 이것들을 누릴 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;303&quot; data-origin-height=&quot;166&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H1ek5/btsIKIWnYmn/ubxYSRnda3gYxUyK0gqyFK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H1ek5/btsIKIWnYmn/ubxYSRnda3gYxUyK0gqyFK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H1ek5/btsIKIWnYmn/ubxYSRnda3gYxUyK0gqyFK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH1ek5%2FbtsIKIWnYmn%2FubxYSRnda3gYxUyK0gqyFK%2Fimg.jpg&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;425&quot; height=&quot;233&quot; data-origin-width=&quot;303&quot; data-origin-height=&quot;166&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금껏 &lt;b&gt;약 10주 가량의 기간&lt;/b&gt; 동안 열심히 유니티를 파헤쳐 온 것이,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어쩌면 그 &lt;b&gt;단무지와 군만두를 알아가는 과정&lt;/b&gt;일 수도 있겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게 드디어, 이 기나긴 여정에도 &lt;b&gt;마침표를 찍을 때&lt;/b&gt;가 온 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기 기획해두었던&lt;span&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;/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;352&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7NsVB/btsIIX1wNih/GWImKkrByjQgkrhRYSKJQ1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7NsVB/btsIIX1wNih/GWImKkrByjQgkrhRYSKJQ1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7NsVB/btsIIX1wNih/GWImKkrByjQgkrhRYSKJQ1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/7NsVB/btsIIX1wNih/GWImKkrByjQgkrhRYSKJQ1/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;402&quot; height=&quot;227&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;352&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내일은 짜장면 시켜먹어야지.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼, 이번 주도 끝!&lt;/p&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;style3&quot; /&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;a href=&quot;https://kjunwoo23.tistory.com/2&quot;&gt;0주차: 인트로 - 새롭고 신기한 것을 좋아하거나, 모르는 것을 알고 싶어 하는 마음&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/3&quot;&gt;1주차: Unity 엔진은 왜 개발 언어로 C#을 선택했을까?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/4&quot;&gt;2주차: 의외로&amp;nbsp;세상&amp;nbsp;잡다한&amp;nbsp;Transform에&amp;nbsp;대한&amp;nbsp;모든&amp;nbsp;것&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/5&quot;&gt;3주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (1/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/6&quot;&gt;4주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (2/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/7&quot;&gt;5주차: 헐크&amp;nbsp;아저씨도&amp;nbsp;깜짝&amp;nbsp;놀란&amp;nbsp;Unity&amp;nbsp;Render&amp;nbsp;Pipeline이&amp;nbsp;작동하는&amp;nbsp;과정&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/8&quot;&gt;6주차: 매 프레임 나보다 갓생 사는 Unity의 Life Cycle&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/9&quot;&gt;7주차: 남들보다 더 갓생 사는 Coroutine의 충격적인 정체&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/10&quot;&gt;8주차: 야물(YAML)딱진 그 녀석의 은밀한 속마음 - Unity Scene 파일 (.unity)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/11&quot;&gt;9주차: 내&amp;nbsp;과자&amp;nbsp;포장지&amp;nbsp;누가&amp;nbsp;버렸어?&amp;nbsp;-&amp;nbsp;meta&amp;nbsp;data&amp;nbsp;파일&amp;nbsp;(.meta)&amp;nbsp;파헤치기&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/12&quot;&gt;10주차: 철가방 채로 배달온 Unity 빌드 파일. 난 단무지 시킨 적 없는데, 왜 있지?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/13&quot;&gt;11주차: 마무리 - 후기&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>내 맘대로 쓰는 Unity 심층분석 析深層分</category>
      <author>원펀치 쓰리 갓냥이</author>
      <guid isPermaLink="true">https://kjunwoo23.tistory.com/12</guid>
      <comments>https://kjunwoo23.tistory.com/12#entry12comment</comments>
      <pubDate>Fri, 1 Mar 2024 01:30:12 +0900</pubDate>
    </item>
    <item>
      <title>9주차: 내 과자 포장지 누가 버렸어? - meta data 파일 (.meta) 파헤치기</title>
      <link>https://kjunwoo23.tistory.com/11</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/2&quot;&gt;0주차: 인트로 - 새롭고 신기한 것을 좋아하거나, 모르는 것을 알고 싶어 하는 마음&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/3&quot;&gt;1주차: Unity 엔진은 왜 개발 언어로 C#을 선택했을까?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/4&quot;&gt;2주차: 의외로&amp;nbsp;세상&amp;nbsp;잡다한&amp;nbsp;Transform에&amp;nbsp;대한&amp;nbsp;모든&amp;nbsp;것&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/5&quot;&gt;3주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (1/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/6&quot;&gt;4주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (2/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/7&quot;&gt;5주차: 헐크&amp;nbsp;아저씨도&amp;nbsp;깜짝&amp;nbsp;놀란&amp;nbsp;Unity&amp;nbsp;Render&amp;nbsp;Pipeline이&amp;nbsp;작동하는&amp;nbsp;과정&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/8&quot;&gt;6주차: 매 프레임 나보다 갓생 사는 Unity의 Life Cycle&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/9&quot;&gt;7주차: 남들보다 더 갓생 사는 Coroutine의 충격적인 정체&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/10&quot;&gt;8주차: 야물(YAML)딱진 그 녀석의 은밀한 속마음 - Unity Scene 파일 (.unity)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/11&quot;&gt;9주차: 내&amp;nbsp;과자&amp;nbsp;포장지&amp;nbsp;누가&amp;nbsp;버렸어?&amp;nbsp;-&amp;nbsp;meta&amp;nbsp;data&amp;nbsp;파일&amp;nbsp;(.meta)&amp;nbsp;파헤치기&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/12&quot;&gt;10주차: 철가방 채로 배달온 Unity 빌드 파일. 난 단무지 시킨 적 없는데, 왜 있지?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/13&quot;&gt;11주차: 마무리 - 후기&lt;/a&gt;&lt;/blockquote&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;style3&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;/b&gt;를 통해 열어보면 원본 파일들과 함께,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;열리지 않는 &lt;b&gt;.meta 확장자&lt;/b&gt;의 파일들이 한 짝씩 세트로 있는 것을 알 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;489&quot; data-origin-height=&quot;335&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DHmtQ/btsIDmzr7B6/uORjyKsG1OyI3syPa11jy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DHmtQ/btsIDmzr7B6/uORjyKsG1OyI3syPa11jy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DHmtQ/btsIDmzr7B6/uORjyKsG1OyI3syPa11jy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDHmtQ%2FbtsIDmzr7B6%2FuORjyKsG1OyI3syPa11jy0%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;489&quot; height=&quot;335&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;489&quot; data-origin-height=&quot;335&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모두 &lt;b&gt;원본 파일의 이름을 그대로&lt;/b&gt; 담고 있고 맨 마지막에만 &lt;b&gt;확장자로 .meta&lt;/b&gt;를 붙였을 뿐이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;용량은 &lt;b&gt;평균 3KB&lt;/b&gt;로 솜털만큼이나 가볍다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;288&quot; data-origin-height=&quot;164&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/V6q0q/btsIEMwVfTE/h1X2rEw0IaWEEnpg7NCpo1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/V6q0q/btsIEMwVfTE/h1X2rEw0IaWEEnpg7NCpo1/img.jpg&quot; data-alt=&quot;쉐도우 파트너인가?&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/V6q0q/btsIEMwVfTE/h1X2rEw0IaWEEnpg7NCpo1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FV6q0q%2FbtsIEMwVfTE%2Fh1X2rEw0IaWEEnpg7NCpo1%2Fimg.jpg&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;437&quot; height=&quot;249&quot; data-origin-width=&quot;288&quot; data-origin-height=&quot;164&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;쉐도우 파트너인가?&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;&lt;br /&gt;이 에셋의 그림자 같은 녀석들의 정체는 뭐고,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&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;h2 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;.meta 파일 열어보기&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;본격적으로 궁금증을 해결하기 전에,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;먼저 찍어먹어보는 방법이 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;383&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d5lLGp/btsID2GZAoM/ontxIKIKhmquC2ye5ydZM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d5lLGp/btsID2GZAoM/ontxIKIKhmquC2ye5ydZM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d5lLGp/btsID2GZAoM/ontxIKIKhmquC2ye5ydZM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd5lLGp%2FbtsID2GZAoM%2FontxIKIKhmquC2ye5ydZM1%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;383&quot; height=&quot;270&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;383&quot; data-origin-height=&quot;270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 &lt;b&gt;파일 탐색기&lt;/b&gt;로 열어보려 하면, &lt;b&gt;열리지 않는다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(정확히는 확장자에 맞는 응용프로그램을 수동으로 선택해야 한다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여는 방법을 따로 구글링해서 찾아볼 수도 있겠지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선은 언제나 그렇듯 &lt;b&gt;깃허브&lt;/b&gt;를 들어간다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;835&quot; data-origin-height=&quot;572&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v11gg/btsICu5RYRI/W2EX6mYCML7iFH7IAnsSk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v11gg/btsICu5RYRI/W2EX6mYCML7iFH7IAnsSk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v11gg/btsICu5RYRI/W2EX6mYCML7iFH7IAnsSk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv11gg%2FbtsICu5RYRI%2FW2EX6mYCML7iFH7IAnsSk0%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;609&quot; height=&quot;417&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;835&quot; data-origin-height=&quot;572&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;깃허브는 대부분의 파일들을 그에 맞는 형식으로 열어주는 다재다능한 친구이기에,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;녀석을 믿고 2-2.jpg.meta를 조심스럽게 열어주면...?&lt;/p&gt;
&lt;pre id=&quot;code_1721237235151&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fileFormatVersion: 2
guid: 8069e5455909aaa4d9733841896b1318
TextureImporter:
  internalIDToNameTable: []
  externalObjects: {}
  serializedVersion: 12
  mipmaps:
    mipMapMode: 0
    enableMipMap: 0
    sRGBTexture: 1
    linearTexture: 0
    fadeOut: 0
    borderMipMap: 0
    mipMapsPreserveCoverage: 0
    alphaTestReferenceValue: 0.5
    mipMapFadeDistanceStart: 1
    mipMapFadeDistanceEnd: 3
  bumpmap:
    convertToNormalMap: 0
    externalNormalMap: 0
    heightScale: 0.25
    normalMapFilter: 0
  isReadable: 0
  streamingMipmaps: 0
  streamingMipmapsPriority: 0
  vTOnly: 0
  ignoreMasterTextureLimit: 0
  grayScaleToAlpha: 0
  generateCubemap: 6
  cubemapConvolution: 0
  seamlessCubemap: 0
  textureFormat: 1
  maxTextureSize: 2048
  textureSettings:
    serializedVersion: 2
    filterMode: 1
    aniso: 1
    mipBias: 0
    wrapU: 1
    wrapV: 1
    wrapW: 1
//
//
//
//후략&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어... 홀리...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 뭘까.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각보다 더 대단한 녀석이 나와버렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(위 복사본에서는 뒷부분을 생략했지만 실제로는 123줄짜리 텍스트 파일이었다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서는 &lt;b&gt;고작&lt;/b&gt; 3KB라고 하긴 했지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텍스트 파일 기준 3KB면 &lt;b&gt;충분히 많은 양&lt;/b&gt;이라는 것을 잊고 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텍스트 내용이 생각보다 자세하기도 했고, 양도 적지 않은 만큼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무언가 확실한 역할을 맡고 있다는 것 쯤은 이제 알겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;h2 data-ke-size=&quot;size26&quot;&gt;.meta 파일의 역할&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.meta 파일을 열자마자 바로 두 번째 줄에서 익숙한 내용을 볼 수 있었다.&lt;/p&gt;
&lt;pre id=&quot;code_1721238496550&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fileFormatVersion: 2
guid: 8069e5455909aaa4d9733841896b1318
.
.
.&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;바로 저번 주 .unity 씬 파일을 열면서 발견한 &lt;b&gt;guid&lt;/b&gt;이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;163&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZeUkq/btsICDBFYdI/ZPH8q2sXvTV1LzKNnfwRS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZeUkq/btsICDBFYdI/ZPH8q2sXvTV1LzKNnfwRS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZeUkq/btsICDBFYdI/ZPH8q2sXvTV1LzKNnfwRS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZeUkq%2FbtsICDBFYdI%2FZPH8q2sXvTV1LzKNnfwRS0%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;582&quot; height=&quot;142&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;163&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호... 그게 이 녀석이란 말이지?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유니티 내의 &lt;b&gt;모든 에셋들&lt;/b&gt;은 전부 &lt;b&gt;각각의 .meta 파일&lt;/b&gt;을 가지고 있었고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그것들마다 저마다의 &lt;b&gt;고유한 ID 번호&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;저번 주에 열어보았던 .unity 파일 속 guid를 예시로 들면,&lt;/p&gt;
&lt;pre id=&quot;code_1721238953363&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;--- !u!4 &amp;amp;12438314 stripped
Transform:
  m_CorrespondingSourceObject: {fileID: 4808409092926342, guid: 70704ddec6bf2c543b7008ab52a9006d,
    type: 3}
  m_PrefabInstance: {fileID: 12438313}
  m_PrefabAsset: {fileID: 0}&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;어떤 오브젝트의 Transform을 설명하면서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 Transform을 담고 있는 &lt;b&gt;오브젝트의 ID&lt;/b&gt;인 &lt;b&gt;fileID&lt;/b&gt;,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이에 대응되는 아이템인 &lt;b&gt;guid&lt;/b&gt; 번호를 기재한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 자연스레 70704ddec6bf2c543b7008ab52a9006d의 guid를 담고 있는 .meta 파일에 대응되는 에셋을 사용하겠다는 의미가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 2-2.jpg.meta의 guid, 그 이후의 내용들도 한 번 살펴보자.&lt;/p&gt;
&lt;pre id=&quot;code_1721239542912&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;TextureImporter:
  internalIDToNameTable: []
  externalObjects: {}
  serializedVersion: 12
  mipmaps:
    mipMapMode: 0
    enableMipMap: 0
    sRGBTexture: 1
    linearTexture: 0
    fadeOut: 0
    borderMipMap: 0
    mipMapsPreserveCoverage: 0
    alphaTestReferenceValue: 0.5
    mipMapFadeDistanceStart: 1
    mipMapFadeDistanceEnd: 3
  bumpmap:
    convertToNormalMap: 0
    externalNormalMap: 0
    heightScale: 0.25
    normalMapFilter: 0&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;TextureImporter... 밉맵... 범프맵...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무언가 익숙한 용어들이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그것은 바로!!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;414&quot; data-origin-height=&quot;573&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beQ4Hz/btsICheHdHx/ifka2fM7AHChUz5rwmc1B1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beQ4Hz/btsICheHdHx/ifka2fM7AHChUz5rwmc1B1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beQ4Hz/btsICheHdHx/ifka2fM7AHChUz5rwmc1B1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeQ4Hz%2FbtsICheHdHx%2Fifka2fM7AHChUz5rwmc1B1%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;337&quot; height=&quot;466&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;414&quot; data-origin-height=&quot;573&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유니티 &lt;b&gt;인스펙터 창&lt;/b&gt;에서 에셋을 열람할 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옵션으로 볼 수 있었던 내용들이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mipmap의 경우 sRGBTexture, fadeout, bordermipmap, mipmapPreserveCoverage 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이름까지도 일치하는 옵션들을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 .meta 파일은 &lt;b&gt;에셋 각각의 세부 옵션들&lt;/b&gt;까지도 기록하고 있는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 유니티 상에서 이미지 파일의 해상도를 절반으로 낮춘다고 해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;원본 이미지&lt;/b&gt;의 해상도가 &lt;b&gt;실제로 조정되지는 않는다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원본은 기존 품질의 해상도를 유지하고, 유니티에서 적용될때만 더 낮은 해상도가 적용될 뿐이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때문에 이러한 옵션 정보를 .jpg &lt;b&gt;원본이 아닌 다른 곳&lt;/b&gt; 어디엔가 저장할 것이라고 &lt;b&gt;예상 정도는&lt;/b&gt; 할 수 있었겠지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 &lt;b&gt;간단한 방법&lt;/b&gt;으로 저장이 되어있을 것이라고는 생각하지 못했다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.meta 파일 덕분에, 우리는 &lt;b&gt;A 이미지의 파일명이 A-1로 바뀌어도&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;씬 전체에 참조되어있는 A 이미지는 &lt;b&gt;그대로 유지&lt;/b&gt;된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어차피 유니티는 파일명이 아닌 &lt;b&gt;각 에셋의 고유한 ID&lt;/b&gt;인 &lt;b&gt;guid&lt;/b&gt;를 통해 에셋을 참조하기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(단, &lt;b&gt;유니티 프로젝트 창에서&lt;/b&gt; 파일명을 변경해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유니티 외부에서 변경할 경우, (ex 파일 탐색기)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A 이미지가 사라지고 A-1 이미지가 들어온 것으로 인식하므로 &lt;b&gt;아예 새로운&lt;/b&gt; .meta 파일이 생성된다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반대로, 기존 A 이미지에 &lt;b&gt;파일명만 같고 내용은 완전히 다른&lt;/b&gt; 새로운 A 이미지가 덮어 씌워져도,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A 이미지가 가지고 있던 옵션은 &lt;b&gt;그대로 유지&lt;/b&gt;된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해상도, pixel per unit, pivot 등 전부 말이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;.meta의 의미&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통상적으로 메타(meta)는 자기 자신을 재귀적으로 가리킬 때 사용되는 말이다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;a href=&quot;https://namu.wiki/w/%EC%9D%B8%EC%8B%9D%EB%A1%A0&quot; data-v-48e37fd0=&quot;&quot;&gt;인식론&lt;/a&gt;에서는 단어 의미가 확장되어 &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Meta&quot; data-v-48e37fd0=&quot;&quot;&gt;~에 대해서(about)&lt;/a&gt;&quot;라는 뜻으로 사용하는데, 어떤 매체의 장르나 학문 분야 따위가 &lt;b&gt;그 범주 스스로에 대해 이야기&lt;/b&gt;하는 경우(자기지시, 재귀)를 지칭하는 접두어로 쓰인다. 이를테면 &lt;b&gt;영화에 대해 이야기하는 영화&lt;/b&gt;, &lt;b&gt;소설에 관해 이야기하는 소설&lt;/b&gt;, &lt;b&gt;윤리학에 관해 이야기하는 윤리학&lt;/b&gt; 등을 말할 때 &lt;b&gt;메타-영화&lt;/b&gt;, &lt;b&gt;메타-소설&lt;/b&gt;, &lt;b&gt;메타-윤리학&lt;/b&gt; 등으로 쓰는 식이다.&amp;nbsp;&lt;a href=&quot;https://namu.wiki/w/%EB%A9%94%ED%83%80%ED%94%BD%EC%85%98&quot; data-v-48e37fd0=&quot;&quot;&gt;메타픽션&lt;/a&gt;과&amp;nbsp;&lt;a href=&quot;https://namu.wiki/w/%EB%A9%94%ED%83%80%EB%8D%B0%EC%9D%B4%ED%84%B0&quot; data-v-48e37fd0=&quot;&quot;&gt;메타데이터&lt;/a&gt;&amp;nbsp;참고. 또한 매체뿐만 아니라 교육학에서도 사용된다. 자신의 학습법에 대해 생각하는 것을&amp;nbsp;&lt;a href=&quot;https://namu.wiki/w/%EB%A9%94%ED%83%80%EC%9D%B8%EC%A7%80&quot; data-v-48e37fd0=&quot;&quot;&gt;메타인지&lt;/a&gt;(초인지/metacognition)라 한다.&lt;br /&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;때문에 보통 메타 데이터라 하면 &lt;b&gt;데이터에 대한 데이터&lt;/b&gt;를 말한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이미지&lt;/b&gt;라는 &lt;b&gt;데이터&lt;/b&gt;가 있고, 그 &lt;b&gt;이미지를 설명하는 데이터&lt;/b&gt;가 &lt;b&gt;메타 데이터&lt;/b&gt;가 되는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별 것 아닌 것 같아보이지만, 이는 데이터를 &lt;b&gt;구조화&lt;/b&gt;하는 데에 큰 도움을 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 누군가에게 유니티 프로젝트 파일을 넘겨줄 때 &lt;b&gt;.meta 파일을 제외하고&lt;/b&gt; 넘겨준다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;넘겨받은 사람이 프로젝트를 열었을 때 &lt;b&gt;그 안은 난장판이 되어있을 것&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;넘겨받은 유니티를 처음 실행할 때 &lt;b&gt;모든 .meta 파일들이 새롭게 일괄 생성&lt;/b&gt;될 것이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다시 guid가 랜덤하게 재배치&lt;/b&gt; 될 것이기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에셋의 옵션은 &lt;b&gt;초기화&lt;/b&gt;될 것이고, &lt;b&gt;오브젝트 참조는 전부 꼬일 것&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때문에 유니티 파일을 공유할 때는 꼭 반드시 &lt;b&gt;.meta 파일을 함께&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 효율적으로 관리하기 위한 &lt;b&gt;데이터에 대한 데이터&lt;/b&gt; 역시 중요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: center;&quot;&gt; 분명 우리가 맛있게 먹고 즐기는 것은 &lt;b&gt;과자의 포장지&lt;/b&gt;가 아닌 &lt;b&gt;과자의 내용물&lt;/b&gt;이지만,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;&lt;b&gt;과자의 이름&lt;/b&gt;, &lt;b&gt;회사&lt;/b&gt;, &lt;b&gt;원산지&lt;/b&gt;, &lt;b&gt;유통기한, 알레르기 유의사항&lt;/b&gt;&amp;nbsp;등의 정보를 계속 활용하기 위해서는 &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;&lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;포장지를 다 뜯어둔 채 그릇에 쌓아둔 과자 더미를 가리키며&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;외국인 친구에게 맛동산 한 조각만 갖다달라고 하면,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;어떤 과자가 맛동산인지 알아내고 바로 갖다줄 수 있는 친구가 얼마나 있을까?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;과자가 유통기한이 지났는지 안지났는지는 어떻게 구분할 수 있을까?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: center;&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;&lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;&lt;b&gt;에셋이라는 과자&lt;/b&gt;를 &lt;b&gt;개별 포장&lt;/b&gt;하고 있는 &lt;b&gt;과자 박스&lt;/b&gt;. 이것이 유니티의&amp;nbsp;&lt;b&gt;.meta 파일&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;640&quot; data-origin-height=&quot;409&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ewgCYc/btsID6vU3Vu/m1odW7QWr59bk9MMQL32y1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ewgCYc/btsID6vU3Vu/m1odW7QWr59bk9MMQL32y1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ewgCYc/btsID6vU3Vu/m1odW7QWr59bk9MMQL32y1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FewgCYc%2FbtsID6vU3Vu%2Fm1odW7QWr59bk9MMQL32y1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;566&quot; height=&quot;362&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;409&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사진을 보며 문득 든 생각은...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;후레쉬베리가 먹고 싶어졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;촉촉한 초코칩은 엄청 달기 때문에,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이왕이면 후레쉬베리를 먼저 먹고 그 다음에 촉촉한 초코칩을 먹는 편이 좋을 것 같다.&lt;/p&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;.meta 파일&lt;/b&gt;과 &lt;b&gt;후레쉬베리&lt;/b&gt;,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 내용은 꽤 보람찼던 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&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;a href=&quot;https://kjunwoo23.tistory.com/2&quot;&gt;0주차: 인트로 - 새롭고 신기한 것을 좋아하거나, 모르는 것을 알고 싶어 하는 마음&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/3&quot;&gt;1주차: Unity 엔진은 왜 개발 언어로 C#을 선택했을까?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/4&quot;&gt;2주차: 의외로&amp;nbsp;세상&amp;nbsp;잡다한&amp;nbsp;Transform에&amp;nbsp;대한&amp;nbsp;모든&amp;nbsp;것&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/5&quot;&gt;3주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (1/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/6&quot;&gt;4주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (2/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/7&quot;&gt;5주차: 헐크&amp;nbsp;아저씨도&amp;nbsp;깜짝&amp;nbsp;놀란&amp;nbsp;Unity&amp;nbsp;Render&amp;nbsp;Pipeline이&amp;nbsp;작동하는&amp;nbsp;과정&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/8&quot;&gt;6주차: 매 프레임 나보다 갓생 사는 Unity의 Life Cycle&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/9&quot;&gt;7주차: 남들보다 더 갓생 사는 Coroutine의 충격적인 정체&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/10&quot;&gt;8주차: 야물(YAML)딱진 그 녀석의 은밀한 속마음 - Unity Scene 파일 (.unity)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/11&quot;&gt;9주차: 내&amp;nbsp;과자&amp;nbsp;포장지&amp;nbsp;누가&amp;nbsp;버렸어?&amp;nbsp;-&amp;nbsp;meta&amp;nbsp;data&amp;nbsp;파일&amp;nbsp;(.meta)&amp;nbsp;파헤치기&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/12&quot;&gt;10주차: 철가방 채로 배달온 Unity 빌드 파일. 난 단무지 시킨 적 없는데, 왜 있지?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/13&quot;&gt;11주차: 마무리 - 후기&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>내 맘대로 쓰는 Unity 심층분석 析深層分</category>
      <author>원펀치 쓰리 갓냥이</author>
      <guid isPermaLink="true">https://kjunwoo23.tistory.com/11</guid>
      <comments>https://kjunwoo23.tistory.com/11#entry11comment</comments>
      <pubDate>Sat, 24 Feb 2024 01:50:43 +0900</pubDate>
    </item>
    <item>
      <title>8주차: 야물(YAML)딱진 그 녀석의 은밀한 속마음 - Unity Scene 파일 (.unity)</title>
      <link>https://kjunwoo23.tistory.com/10</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/2&quot;&gt;0주차: 인트로 - 새롭고 신기한 것을 좋아하거나, 모르는 것을 알고 싶어 하는 마음&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/3&quot;&gt;1주차: Unity 엔진은 왜 개발 언어로 C#을 선택했을까?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/4&quot;&gt;2주차: 의외로&amp;nbsp;세상&amp;nbsp;잡다한&amp;nbsp;Transform에&amp;nbsp;대한&amp;nbsp;모든&amp;nbsp;것&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/5&quot;&gt;3주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (1/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/6&quot;&gt;4주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (2/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/7&quot;&gt;5주차: 헐크&amp;nbsp;아저씨도&amp;nbsp;깜짝&amp;nbsp;놀란&amp;nbsp;Unity&amp;nbsp;Render&amp;nbsp;Pipeline이&amp;nbsp;작동하는&amp;nbsp;과정&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/8&quot;&gt;6주차: 매 프레임 나보다 갓생 사는 Unity의 Life Cycle&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/9&quot;&gt;7주차: 남들보다 더 갓생 사는 Coroutine의 충격적인 정체&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/10&quot;&gt;8주차: 야물(YAML)딱진 그 녀석의 은밀한 속마음 - Unity Scene 파일 (.unity)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/11&quot;&gt;9주차: 내&amp;nbsp;과자&amp;nbsp;포장지&amp;nbsp;누가&amp;nbsp;버렸어?&amp;nbsp;-&amp;nbsp;meta&amp;nbsp;data&amp;nbsp;파일&amp;nbsp;(.meta)&amp;nbsp;파헤치기&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/12&quot;&gt;10주차: 철가방 채로 배달온 Unity 빌드 파일. 난 단무지 시킨 적 없는데, 왜 있지?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/13&quot;&gt;11주차: 마무리 - 후기&lt;/a&gt;&lt;/blockquote&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;style3&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;/b&gt;를 뜯어보았었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오일러각과 쿼터니온, 유니티 생명 주기, 코루틴 등등...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제는 유니티의 씬 자체가 저장되는 방식,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;.unity 파일&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제부터는 정말 말 그대로 심층분석, 말을 좀 다르게 해보자면 &lt;b&gt;아무도 관심이 없었을 만한 주제&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연재 시리즈가 후반으로 향해가면서 점점 &lt;b&gt;취지에 맞는 것들&lt;/b&gt;이 등장하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;.unity란?&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;131&quot; data-origin-height=&quot;25&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNqTdH/btsItk2pwkB/FAOIlVVIKNd2f7jkkXlu41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNqTdH/btsItk2pwkB/FAOIlVVIKNd2f7jkkXlu41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNqTdH/btsItk2pwkB/FAOIlVVIKNd2f7jkkXlu41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNqTdH%2FbtsItk2pwkB%2FFAOIlVVIKNd2f7jkkXlu41%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;204&quot; height=&quot;39&quot; data-origin-width=&quot;131&quot; data-origin-height=&quot;25&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유니티의 &lt;b&gt;씬(Scene)&lt;/b&gt;이 통째로 저장돼있는 파일을 나타내는 확장자명이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bviC8i/btsIsIQkK0y/2qTGq6zgSHWVLaJGkg4Xg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bviC8i/btsIsIQkK0y/2qTGq6zgSHWVLaJGkg4Xg1/img.png&quot; data-alt=&quot;이 씬이 전부 다 저장된다고?&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bviC8i/btsIsIQkK0y/2qTGq6zgSHWVLaJGkg4Xg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbviC8i%2FbtsIsIQkK0y%2F2qTGq6zgSHWVLaJGkg4Xg1%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;627&quot; height=&quot;353&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이 씬이 전부 다 저장된다고?&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 씬 내에 게임의 정보가 전부 다 들어있는 만큼, 용량 역시도 무지막지할까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게임 자체가 여러 개의 씬이 모여 하나의 빌드로 구성되는 방식인데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;빌드가 500MB&lt;/b&gt;고 &lt;b&gt;씬이 5개&lt;/b&gt;면 &lt;b&gt;개당 평균 100MB&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;b&gt;NO&lt;/b&gt;다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빌드가 GB 단위의 큼직한 규모의 게임이더라도,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;정말로 필요한 정보만&lt;/b&gt; 주소와 ID 형식으로 &lt;b&gt;최소화하여 저장&lt;/b&gt;하기 때문에,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;씬 파일은 보통 몇십MB 언저리를 넘지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떻게 이런 용량 절약이 가능한걸까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 답은 .unity 파일이 쓰여지는 방식에 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Scene 파일 내 데이터의 직렬화, YAML&lt;/h2&gt;
&lt;pre id=&quot;code_1720513337042&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &amp;amp;1
OcclusionCullingSettings:
  m_ObjectHideFlags: 0
  serializedVersion: 2
  m_OcclusionBakeSettings:
    smallestOccluder: 5
    smallestHole: 0.25
    backfaceThreshold: 100
  m_SceneGUID: 00000000000000000000000000000000
  m_OcclusionCullingData: {fileID: 0}
--- !u!104 &amp;amp;2
RenderSettings:
  m_ObjectHideFlags: 0
  serializedVersion: 9
  m_Fog: 0
  m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
  m_FogMode: 3
  m_FogDensity: 0.01
  m_LinearFogStart: 0
  m_LinearFogEnd: 300
  m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
  m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
  m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
  m_AmbientIntensity: 1
  m_AmbientMode: 0
  m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
  m_SkyboxMaterial: {fileID: 2100000, guid: 9a819b815e161b64e8c78164c1902994, type: 2}
  m_HaloStrength: 0.5
  m_FlareStrength: 1
  m_FlareFadeSpeed: 3
  m_HaloTexture: {fileID: 0}
  m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
  m_DefaultReflectionMode: 0
  m_DefaultReflectionResolution: 128
  m_ReflectionBounces: 1
  m_ReflectionIntensity: 1
  m_CustomReflection: {fileID: 0}
  m_Sun: {fileID: 0}
  m_UseRadianceAmbientProbe: 0&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;.unity 파일을 파일 탐색기를 통해 열람할 경우 자동으로 Unity Editor로 이동되지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GitHub를 통해 열람할 경우 위 형식의&lt;b&gt; YAML&lt;/b&gt; 코드로 이루어져있음을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;YAML&lt;/b&gt;은 특정 데이터를 &lt;b&gt;기록하고 전달&lt;/b&gt;하는 데에 목적을 둔 언어이며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;json처럼 사람이 읽을 수 있을 정도로 &lt;b&gt;직관적인 형태&lt;/b&gt;로 &lt;b&gt;씬 전체를 직렬화&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 위의 코드를 한줄한줄 뜯어보자.&lt;/p&gt;
&lt;pre id=&quot;code_1720514328588&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;%YAML 1.1
%TAG !u! tag:unity3d.com,2011:&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;모든 .unity YAML 파일에 있어야 하는 코드이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드의 맨 앞줄에 이 두 줄을 기재함으로써 &lt;b&gt;우리가 사용할 YAML이 1.1 버전이고&lt;/b&gt;,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통의 YAML과 다소 차이가 있는 &lt;b&gt;Unity 맞춤형 YAML을 사용할 것임을 명시&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1720515008029&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;--- !u!1 &amp;amp;1947408731
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 1947408733}
  - component: {fileID: 1947408732}
  m_Layer: 0
  m_Name: CubeController
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;---&lt;/b&gt; 은 파일 내의 오브젝트를 하나 소개하겠다는 뜻이며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후는 공백 한 칸 이후 &lt;b&gt;!u!&lt;/b&gt; + &lt;b&gt;숫자A&lt;/b&gt; + &lt;b&gt;&amp;amp;&lt;/b&gt; + &lt;b&gt;숫자B&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;b&gt;숫자A&lt;/b&gt;는 해당 오브젝트의 &lt;b&gt;클래스&lt;/b&gt;를 나타내며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음의 사전에 정해진 구분을 따른다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 55.3457%; height: 260px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20.5782%; height: 20px; text-align: center;&quot;&gt;ID&lt;/td&gt;
&lt;td style=&quot;width: 27.8965%; height: 20px; text-align: center;&quot;&gt;클래스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 20.5782%; height: 16px; text-align: center;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 27.8965%; height: 16px; text-align: center;&quot;&gt;오브젝트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 20.5782%; height: 16px; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 27.8965%; height: 16px; text-align: center;&quot;&gt;GameObject&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 20.5782%; height: 16px; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 27.8965%; height: 16px; text-align: center;&quot;&gt;Component&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 20.5782%; height: 16px; text-align: center;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 27.8965%; height: 16px; text-align: center;&quot;&gt;LevelGameManager&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 20.5782%; height: 16px; text-align: center;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 27.8965%; height: 16px; text-align: center;&quot;&gt;Transform&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 20.5782%; height: 16px; text-align: center;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 27.8965%; height: 16px; text-align: center;&quot;&gt;TimeManager&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 20.5782%; height: 16px; text-align: center;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 27.8965%; height: 16px; text-align: center;&quot;&gt;GlobalGameManager&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 20.5782%; height: 16px; text-align: center;&quot;&gt;8&lt;/td&gt;
&lt;td style=&quot;width: 27.8965%; height: 16px; text-align: center;&quot;&gt;Behaviour&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 20.5782%; height: 16px; text-align: center;&quot;&gt;9&lt;/td&gt;
&lt;td style=&quot;width: 27.8965%; height: 16px; text-align: center;&quot;&gt;GameManager&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 20.5782%; height: 16px; text-align: center;&quot;&gt;.....&lt;/td&gt;
&lt;td style=&quot;width: 27.8965%; height: 16px; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1b2229; text-align: left;&quot;&gt;.....&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 20.5782%; height: 16px; text-align: center;&quot;&gt;2058629511&lt;/td&gt;
&lt;td style=&quot;width: 27.8965%; height: 16px; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1b2229; text-align: left;&quot;&gt;VisualEffectResource&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 20.5782%; height: 16px; text-align: center;&quot;&gt;2059678085&lt;/td&gt;
&lt;td style=&quot;width: 27.8965%; height: 16px; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1b2229; text-align: left;&quot;&gt;VisualEffectObject&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 20.5782%; height: 16px; text-align: center;&quot;&gt;2083052967&lt;/td&gt;
&lt;td style=&quot;width: 27.8965%; height: 16px; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1b2229; text-align: left;&quot;&gt;VisualEffect&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 20.5782%; height: 16px; text-align: center;&quot;&gt;2083778819&lt;/td&gt;
&lt;td style=&quot;width: 27.8965%; height: 16px; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1b2229; text-align: left;&quot;&gt;LocalizationAsset&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 20.5782%; height: 16px; text-align: center;&quot;&gt;2089858483&lt;/td&gt;
&lt;td style=&quot;width: 27.8965%; height: 16px; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1b2229; text-align: left;&quot;&gt;ScriptedImporter&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;이어서 &lt;b&gt;&amp;amp;&lt;/b&gt; 뒤에 오는 &lt;b&gt;숫자B&lt;/b&gt;의 경우 각 파일 내의 고유한 ID인 &lt;b&gt;fileID&lt;/b&gt;가 할당된다.&lt;/p&gt;
&lt;pre id=&quot;code_1720516163657&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;--- !u!1 &amp;amp;1947408731&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;즉 위의 경우 소개하려는 오브젝트는 GameObject이며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 파일의 &lt;b&gt;fileID&lt;/b&gt;는 1947408731인 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1720516288591&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 1947408733}
  - component: {fileID: 1947408732}
  m_Layer: 0
  m_Name: CubeController
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1&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;그 이후로는 해당 GameObject의 &lt;b&gt;프로퍼티&lt;/b&gt;들이 나열되어있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;m_ObjectHideFlags처럼 &lt;b&gt;UnityC#&lt;/b&gt;의 GameObject 스크립트 내에 &lt;b&gt;실제로 존재하는 프로퍼티&lt;/b&gt;들도 있었고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스크립트 상에서는 &lt;b&gt;존재하지 않는 것&lt;/b&gt;도 있었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;413&quot; data-origin-height=&quot;140&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czsXmz/btsItF6wB1H/F25Q1cY9XC0CBsnuD96Fw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czsXmz/btsItF6wB1H/F25Q1cY9XC0CBsnuD96Fw0/img.png&quot; data-alt=&quot;GameObject의 부모 클래스인 Object 내에 존재하는 hideFlags, name&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czsXmz/btsItF6wB1H/F25Q1cY9XC0CBsnuD96Fw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczsXmz%2FbtsItF6wB1H%2FF25Q1cY9XC0CBsnuD96Fw0%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;463&quot; height=&quot;157&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;413&quot; data-origin-height=&quot;140&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;GameObject의 부모 클래스인 Object 내에 존재하는 hideFlags, name&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;323&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vTe9P/btsIs0ww38y/lRyyBCspluaWUBuHQMcOp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vTe9P/btsIs0ww38y/lRyyBCspluaWUBuHQMcOp1/img.png&quot; data-alt=&quot;GameObject 클래스 내에 존재하는 layer, tag, active 등&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vTe9P/btsIs0ww38y/lRyyBCspluaWUBuHQMcOp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvTe9P%2FbtsIs0ww38y%2FlRyyBCspluaWUBuHQMcOp1%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;517&quot; height=&quot;298&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;323&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;GameObject 클래스 내에 존재하는 layer, tag, active 등&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1720516934312&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  m_Component:
  - component: {fileID: 1947408733}
  - component: {fileID: 1947408732}&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;또한 해당 GameObject는 &lt;b&gt;1947408733&lt;/b&gt;과 &lt;b&gt;1947408732&lt;/b&gt; 두 개를 Component로 가진다는 코드가 같이 적혀있었는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 &lt;b&gt;fileID&lt;/b&gt;를 토대로 이들을 추적해보면...&lt;/p&gt;
&lt;pre id=&quot;code_1720517080774&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;--- !u!114 &amp;amp;1947408732
MonoBehaviour:
  m_ObjectHideFlags: 0
  .....&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1720517096894&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;--- !u!4 &amp;amp;1947408733
Transform:
  m_ObjectHideFlags: 0
  .....&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;GameObject가 가지고 있는 &lt;b&gt;MonoBehaviour&lt;/b&gt; 클래스와 &lt;b&gt;Transform&lt;/b&gt; 클래스를 말한 것이었음을 알 수 있었고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 클래스 모두 각자의 데이터 역시도 포함하고 있었다.&lt;/p&gt;
&lt;pre id=&quot;code_1720517244163&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;--- !u!4 &amp;amp;1947408733
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1947408731}
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0, y: 0.5, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_ConstrainProportionsScale: 0
  m_Children: []
  m_Father: {fileID: 0}
  m_RootOrder: 7
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 &lt;b&gt;1947408732&lt;/b&gt;의 &lt;b&gt;fileID&lt;/b&gt;를 가진 &lt;b&gt;Transform&lt;/b&gt;의 경우 위의 표에서 정리되어있던 대로 4라는 &lt;b&gt;클래스 ID&lt;/b&gt;를 가졌으며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;localRotation, localPosition, localScale 등 우리에게 &lt;b&gt;이미 익숙한 변수들&lt;/b&gt;도 보였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 xyzw의 실제 벡터 정보들도 모두 포함되어있었다.&lt;/p&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;worldRotatiln, worldPosition 등이 없는 이유&lt;/b&gt;는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부모의 Transform 정보와 자신의 local한 정보를 통해서 &lt;b&gt;역으로 충분히 계산해서 나타낼 수 있&lt;/b&gt;기도 하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애초에 에디터의 인스펙터 창만 봐도 &lt;b&gt;local한 좌표를 기준으로 관리&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;추가로 m_GameObject의 경우 해당 Transform을 담고 있는 GameObject의 &lt;b&gt;fileID&lt;/b&gt;인 &lt;b&gt;1947408731&lt;/b&gt;가 입력되어 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1720517983464&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;--- !u!4 &amp;amp;12438314 stripped
Transform:
  m_CorrespondingSourceObject: {fileID: 4808409092926342, guid: 70704ddec6bf2c543b7008ab52a9006d,
    type: 3}
  m_PrefabInstance: {fileID: 12438313}
  m_PrefabAsset: {fileID: 0}&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;YAML 파일을 이곳저곳 훑다보면 &lt;b&gt;guid&lt;/b&gt;라는 녀석도 가끔 보였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;guid&lt;/b&gt;는 &lt;b&gt;fileID&lt;/b&gt;와는 달리 &lt;b&gt;에셋이 Unity Editor에 처음 잡히자마자 할당&lt;/b&gt;되는 &lt;b&gt;고유의 번호&lt;/b&gt;라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 유니티 에셋 폴더에 리소스를 드래그 앤 드롭하면 &lt;b&gt;약간의 로딩&lt;/b&gt;과 함께 &lt;b&gt;.meta 파일이 생성&lt;/b&gt;되는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 과정에서 자동으로 할당되는 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어쩌면... 다음 주에 다루게 될 .&lt;b&gt;meta 파일&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실제로 열어본 .unity 후기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;막상 열어보니 &lt;b&gt;구성 자체는 간단&lt;/b&gt;했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;씬 내의 모든 오브젝트가 &lt;b&gt;--- !u!*classID* &amp;amp;*fileID*&lt;/b&gt; 식으로 소개되고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 안의 &lt;b&gt;프로퍼티값들이 세세히 나열&lt;/b&gt;되는 방식이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제는, 이 '모든 오브젝트'의 양이 &lt;b&gt;방대했다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;말 그대로 &lt;b&gt;씬 내의 모든 것들&lt;/b&gt;이 기재되어있어야 했기에,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잠깐 1~2주 짤막하게 개발 중인 토이 프로젝트였음에도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인 씬의 YAML 코드는 &lt;b&gt;11,000자&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;본격적인 프로젝트의 .unity 파일은 얼마나 내용이 길련지...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아... 따로 압축은 안하는 건가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하긴 어차피 용량도 별로 안 큰 텍스트 파일이니 압축해봤자일 것 같기도 하고.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오히려 &lt;b&gt;YAML의 사용 목적&lt;/b&gt;에 맞게 &lt;b&gt;가독성&lt;/b&gt;을 더 살리고자 &lt;b&gt;압축을 하지 않았을 수도 있다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;씬 내에 100MB짜리 비디오 파일이 포함된다고 해서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.unity 파일에도 100MB짜리 영상을 넣어 저장하는 것보다는 &lt;b&gt;이미 훨씬 효율적&lt;/b&gt;이지 않은가.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;224&quot; data-origin-height=&quot;224&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWW7qZ/btsIuaE32IY/9UPz0kI8Ps0NRGJ6eWq8mk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWW7qZ/btsIuaE32IY/9UPz0kI8Ps0NRGJ6eWq8mk/img.jpg&quot; data-alt=&quot;호오...&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWW7qZ/btsIuaE32IY/9UPz0kI8Ps0NRGJ6eWq8mk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWW7qZ%2FbtsIuaE32IY%2F9UPz0kI8Ps0NRGJ6eWq8mk%2Fimg.jpg&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;306&quot; height=&quot;306&quot; data-origin-width=&quot;224&quot; data-origin-height=&quot;224&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;호오...&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;씬의 저장은... 이런 식으로 이루어지는구나.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;/p&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;style3&quot; /&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;a href=&quot;https://kjunwoo23.tistory.com/2&quot;&gt;0주차: 인트로 - 새롭고 신기한 것을 좋아하거나, 모르는 것을 알고 싶어 하는 마음&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/3&quot;&gt;1주차: Unity 엔진은 왜 개발 언어로 C#을 선택했을까?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/4&quot;&gt;2주차: 의외로&amp;nbsp;세상&amp;nbsp;잡다한&amp;nbsp;Transform에&amp;nbsp;대한&amp;nbsp;모든&amp;nbsp;것&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/5&quot;&gt;3주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (1/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/6&quot;&gt;4주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (2/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/7&quot;&gt;5주차: 헐크&amp;nbsp;아저씨도&amp;nbsp;깜짝&amp;nbsp;놀란&amp;nbsp;Unity&amp;nbsp;Render&amp;nbsp;Pipeline이&amp;nbsp;작동하는&amp;nbsp;과정&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/8&quot;&gt;6주차: 매 프레임 나보다 갓생 사는 Unity의 Life Cycle&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/9&quot;&gt;7주차: 남들보다 더 갓생 사는 Coroutine의 충격적인 정체&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/10&quot;&gt;8주차: 야물(YAML)딱진 그 녀석의 은밀한 속마음 - Unity Scene 파일 (.unity)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/11&quot;&gt;9주차: 내&amp;nbsp;과자&amp;nbsp;포장지&amp;nbsp;누가&amp;nbsp;버렸어?&amp;nbsp;-&amp;nbsp;meta&amp;nbsp;data&amp;nbsp;파일&amp;nbsp;(.meta)&amp;nbsp;파헤치기&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/12&quot;&gt;10주차: 철가방 채로 배달온 Unity 빌드 파일. 난 단무지 시킨 적 없는데, 왜 있지?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/13&quot;&gt;11주차: 마무리 - 후기&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>내 맘대로 쓰는 Unity 심층분석 析深層分</category>
      <author>원펀치 쓰리 갓냥이</author>
      <guid isPermaLink="true">https://kjunwoo23.tistory.com/10</guid>
      <comments>https://kjunwoo23.tistory.com/10#entry10comment</comments>
      <pubDate>Wed, 14 Feb 2024 05:06:38 +0900</pubDate>
    </item>
    <item>
      <title>7주차: 남들보다 더 갓생 사는 Coroutine의 충격적인 정체</title>
      <link>https://kjunwoo23.tistory.com/9</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/2&quot;&gt;0주차: 인트로 - 새롭고 신기한 것을 좋아하거나, 모르는 것을 알고 싶어 하는 마음&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/3&quot;&gt;1주차: Unity 엔진은 왜 개발 언어로 C#을 선택했을까?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/4&quot;&gt;2주차: 의외로&amp;nbsp;세상&amp;nbsp;잡다한&amp;nbsp;Transform에&amp;nbsp;대한&amp;nbsp;모든&amp;nbsp;것&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/5&quot;&gt;3주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (1/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/6&quot;&gt;4주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (2/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/7&quot;&gt;5주차: 헐크&amp;nbsp;아저씨도&amp;nbsp;깜짝&amp;nbsp;놀란&amp;nbsp;Unity&amp;nbsp;Render&amp;nbsp;Pipeline이&amp;nbsp;작동하는&amp;nbsp;과정&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/8&quot;&gt;6주차: 매 프레임 나보다 갓생 사는 Unity의 Life Cycle&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/9&quot;&gt;7주차: 남들보다 더 갓생 사는 Coroutine의 충격적인 정체&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/10&quot;&gt;8주차: 야물(YAML)딱진 그 녀석의 은밀한 속마음 - Unity Scene 파일 (.unity)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/11&quot;&gt;9주차: 내&amp;nbsp;과자&amp;nbsp;포장지&amp;nbsp;누가&amp;nbsp;버렸어?&amp;nbsp;-&amp;nbsp;meta&amp;nbsp;data&amp;nbsp;파일&amp;nbsp;(.meta)&amp;nbsp;파헤치기&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/12&quot;&gt;10주차: 철가방 채로 배달온 Unity 빌드 파일. 난 단무지 시킨 적 없는데, 왜 있지?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/13&quot;&gt;11주차: 마무리 - 후기&lt;/a&gt;&lt;/blockquote&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;style3&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;/b&gt;이 거의 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;티스토리에 글을 쓸 수 있도록 크롬창을 띄우고, 백그라운드에서 유튜브로 노래를 틀어주고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카톡이 오면 사용자가 바로 볼 수 있도록 바로 알림을 띄워준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 어디 안쪽에서는 백신 프로그램의 자동 검사도 돌아가고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;짧은 시간&lt;/b&gt; 안에 &lt;b&gt;많은 일&lt;/b&gt;이 주어지고 그것들을 &lt;b&gt;동시에 수행&lt;/b&gt;해내야 하는 것은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비단 컴퓨터 운영체제만이 아닐 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 개발하는 &lt;b&gt;게임&lt;/b&gt;, &lt;b&gt;응용 프로그램&lt;/b&gt;들 역시 이것들을 해내야 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 어떻게?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 유니티에게 &lt;b&gt;'A랑 B 코드를 동시에 실행해줘!'&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령한다고 해서 말처럼 그게 바로 되는 건 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선, 떠올릴 수 있는 가장 간단한 방법은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 6주차에서 다뤘던 유니티의 Life Cycle 중 &lt;b&gt;Update()&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;MonoBehaviour를 포함한 모든 클래스에는 &lt;b&gt;Update()&lt;/b&gt;가 기본적으로 주어지고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 함수는 &lt;b&gt;코드가 작성된 순서대로&lt;/b&gt;, &lt;b&gt;직렬적&lt;/b&gt;으로 실행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 Update() 안의 모든 코드들은, &lt;b&gt;모두 한 프레임 안에서 동시에 실행될 것을 보장&lt;/b&gt;받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &lt;b&gt;동시에 실행하고 싶은 모든 내용들을 하나의 Update()안에&lt;/b&gt; 넣으면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;573&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb0Lso/btsIjxum3eM/jA0zNncSutSoFCA8R99Ec0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb0Lso/btsIjxum3eM/jA0zNncSutSoFCA8R99Ec0/img.jpg&quot; data-alt=&quot;한 프레임 안에서 일어나고 있는 수많은 일들&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb0Lso/btsIjxum3eM/jA0zNncSutSoFCA8R99Ec0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb0Lso%2FbtsIjxum3eM%2FjA0zNncSutSoFCA8R99Ec0%2Fimg.jpg&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;455&quot; height=&quot;352&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;573&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;한 프레임 안에서 일어나고 있는 수많은 일들&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 이걸로 해결된걸까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 상황을 보자.&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;people은 &lt;b&gt;일정 시간&lt;/b&gt;(3초)마다 &lt;b&gt;Eat()&lt;/b&gt; 함수를 통해 밥을 먹어야 한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;쿨타임 변수&lt;/b&gt;와 &lt;b&gt;Time.deltaTime&lt;/b&gt;을 활용해 people에게 꾸준히 밥을 먹일 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;코드 상에는 문제가 없다.&lt;/p&gt;
&lt;pre id=&quot;code_1719822946835&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    float eatMaxCoolTime = 3;
    float eatCurCoolTime = 0;

    void Update()
    {
        if (eatCurCoolTime &amp;lt; 0)
        {
            people.Eat();
            eatCurCoolTime = eatMaxCoolTime;
        }
        eatCurCoolTime -= Time.deltaTime;
    }&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;br /&gt;그리고 사람이 &lt;b&gt;다섯 명&lt;/b&gt;으로 늘었다. 다행히 우리에게는 &lt;b&gt;반복문&lt;/b&gt;이 있기 때문에, 이 정도는 아직 할만하다.&lt;/p&gt;
&lt;pre id=&quot;code_1719823180494&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    float eatMaxCoolTime = 3;
    float[] eatCurCoolTimes = new float[5];

    void Update()
    {
        for (int i = 0; i &amp;lt; people.Length; i++)
        {
            if (eatCurCoolTimes[i] &amp;lt; 0)
            {
                people[i].Eat();
                eatCurCoolTimes[i] = eatMaxCoolTime;
            }
            eatCurCoolTime[i] -= Time.deltaTime;
        }
    }&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;사람이 밥만 먹고 살지는 않는다. 먹고, 마시고, 놀고, 공부하고, 자는 과정을 추가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;의 사용에도 &lt;b&gt;한계&lt;/b&gt;가 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1719823481345&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    float eatMaxCoolTime = 3;
    float[] eatCurCoolTimes = new float[5];
    float drinkMaxCoolTime = 2;
    float[] drinkCurCoolTimes = new float[5];
    float playMaxCoolTime = 5;
    float[] playCurCoolTimes = new float[5];
    float studyMaxCoolTime = 1;
    float[] studyCurCoolTimes = new float[5];
    float sleepMaxCoolTime = 10;
    float[] sleepCurCoolTimes = new float[5];

    void Update()
    {
        for (int i = 0; i &amp;lt; people.Length; i++)
        {
            if (eatCurCoolTimes[i] &amp;lt; 0)
            {
                people[i].Eat();
                eatCurCoolTimes[i] = eatMaxCoolTime;
            }
            if (drinkCurCoolTimes[i] &amp;lt; 0)
            {
                people[i].Drink();
                drinkCurCoolTimes[i] = drinkMaxCoolTime;
            }
            if (playCurCoolTimes[i] &amp;lt; 0)
            {
                people[i].Play();
                playCurCoolTimes[i] = playMaxCoolTime;
            }
            if (studyCurCoolTimes[i] &amp;lt; 0)
            {
                people[i].Study();
                studyCurCoolTimes[i] = studyMaxCoolTime;
            }
            if (sleepCurCoolTimes[i] &amp;lt; 0)
            {
                people[i].Sleep();
                sleepCurCoolTimes[i] = sleepMaxCoolTime;
            }
        }
        eatCurCoolTime[i] -= Time.deltaTime;
        drinkCurCoolTimes[i] -= Time.deltaTime;
        playCurCoolTimes[i] -= Time.deltaTime;
        studyCurCoolTimes[i] -= Time.deltaTime;
        sleepCurCoolTimes[i] -= Time.deltaTime;
    }&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;게다가 사람은 밥을 &lt;b&gt;한 프레임이 지나가는 시간&lt;/b&gt; 안에 절대 다 먹을 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;밥 한 술 떠야하고, 메추리알 장조림 하나 집어야 하고, 목 메이니까 가슴 콩콩 두드려야 하고...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연근 조림 한 번 쓱 보고, 다시 메추리알로 시선 돌리고...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;밥 한 공기&lt;/b&gt; 다 먹는데에 최소 &lt;b&gt;5초&lt;/b&gt;는 걸린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 하루 일과가 밥 먹는거 하나만 있는 것도 아니고...&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;friends2&quot; data-emoticon-name=&quot;008&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends2/large/008.png&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends2/large/008.png&quot; width=&quot;150&quot; /&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;밥 먹는 데에 걸리는 시간(&lt;b&gt;실제 함수 실행 시간&lt;/b&gt;)이랑&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것까지 다 고려해보면...&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;friends2&quot; data-emoticon-name=&quot;076&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends2/large/076.png&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends2/large/076.png&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;045&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/045.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/045.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1719823874927&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    Debug.Log(&quot;박명수: 안해 이쒸&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;315719c7d204da9b152f8068bdf8d609.gif&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nibNg/btsIjf8jFn3/yDybdaE2AO84DrAkFmQr00/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nibNg/btsIjf8jFn3/yDybdaE2AO84DrAkFmQr00/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nibNg/btsIjf8jFn3/yDybdaE2AO84DrAkFmQr00/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/nibNg/btsIjf8jFn3/yDybdaE2AO84DrAkFmQr00/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;500&quot; height=&quot;300&quot; data-filename=&quot;315719c7d204da9b152f8068bdf8d609.gif&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;300&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;한 Update() 안에 담겨야 하는 &lt;b&gt;내용이 많아질수록&lt;/b&gt;,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 그 &lt;b&gt;작업들 간의 연관성이 줄어들수록&lt;/b&gt;,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드가 &lt;b&gt;눈에 띄게 복잡&lt;/b&gt;해지고 &lt;b&gt;가독성 역시 떨어짐&lt;/b&gt;을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 &lt;b&gt;클래스의 개수&lt;/b&gt;를 늘리고, &lt;b&gt;여러 개의 Update()&lt;/b&gt;로 나눠 작성하면 일이 해결될까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;가독성&lt;/b&gt;은 개선되겠지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unity는 Update() 뿐만 아니라 &lt;b&gt;모든 코드를 하나의 단일 스레드&lt;/b&gt;로만 실행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러기에 발생하는 문제가 하나 더 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1719824377698&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    for (int i = 0; i &amp;lt; people.Length; i++)
    {
        if (eatCurCoolTimes[i] &amp;lt; 0)
        {
            people[i].Eat();
            eatCurCoolTimes[i] = eatMaxCoolTime;
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사람 한 명이 &lt;b&gt;밥을 먹게 되기까지 쿨타임이 10초&lt;/b&gt;, (= eatMaxCoolTime이 10초)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방금 전 상황처럼 &lt;b&gt;밥 한 그릇을 다 먹는 데에 소요되는 시간이 5초&lt;/b&gt;라고 해보자. (= Eat()의 실행시간)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반복문을 돌며 &lt;b&gt;people[0]&lt;/b&gt;과 &lt;b&gt;people[1]&lt;/b&gt;이 &lt;b&gt;쿨타임 10초를 다 채웠고 둘 모두 식사할 준비가 되어있음에도&lt;/b&gt;,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;people[0]&lt;/b&gt;이 &lt;b&gt;5초 동안 밥을 다 먹기 전까지는&lt;/b&gt; (즉, people[0]의 Eat() 작업이 끝나기 전까지는)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;people[1]&lt;/b&gt;은 &lt;b&gt;밥을 먹을 수 없다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유니티는 &lt;b&gt;모든 소스 코드를 하나의 스레드로 실행&lt;/b&gt;하기 때문에 &lt;br /&gt;people[0]의 Eat() 함수로 들어가 &lt;b&gt;return을 만나기 전까지는 그 다음 코드를 실행할 수 없고&lt;/b&gt;,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유니티는 &lt;b&gt;5초간 Eat() 외의 다른 작업은 하나도 수행하지 못하며&lt;/b&gt;,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Update() 역시 5초간 종료될 수 없기에&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그동안 &lt;b&gt;프레임 자체가 정지&lt;/b&gt;될 것이다. (= &lt;b&gt;극심한 오버헤드&lt;/b&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나름 반복문과 쿨타임, Time.deltaTime을 통해 이들의 일정을 &lt;b&gt;병렬적으로 해결&lt;/b&gt;했다고 생각했지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;전혀 아니었던 것이다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;여러 개의 클래스&lt;/b&gt;를 통해 &lt;b&gt;여러 개의 Update()&lt;/b&gt;를 만든다 해도 마찬가지이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;클래스 A&lt;/b&gt;의 Update()를 &lt;b&gt;모두 수행하기 전까지&lt;/b&gt; &lt;b&gt;클래스 B&lt;/b&gt;의 Update()는 &lt;b&gt;실행되지 않는다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때문에 우리는, &lt;b&gt;코루틴&lt;/b&gt;을 사용해야 한다.&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코루틴이란?&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; 코루틴은 &lt;b&gt;서브 루틴&lt;/b&gt;을 &lt;b&gt;일시 정지&lt;/b&gt;하고 &lt;b&gt;재개&lt;/b&gt;할 수 있는 구성 요소를 말한다.&lt;br /&gt;쉽게 말해 &lt;b&gt;필요에 따라 일시 정지&lt;/b&gt;할 수 있는 함수를 말한다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;- &quot;나무위키&quot;&lt;/i&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;1238&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2osn4/btsIjbEYPlI/YJMRMkeGR3HZUXKlkcp5o0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2osn4/btsIjbEYPlI/YJMRMkeGR3HZUXKlkcp5o0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2osn4/btsIjbEYPlI/YJMRMkeGR3HZUXKlkcp5o0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2osn4%2FbtsIjbEYPlI%2FYJMRMkeGR3HZUXKlkcp5o0%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;1238&quot; height=&quot;664&quot; data-origin-width=&quot;1238&quot; data-origin-height=&quot;664&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기존의 함수&lt;/b&gt;는 일단 한 번 호출하면&lt;b&gt; return을 만나거나 코드가 끝나지 않는 한 종료될 수 없었다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리의 경우는 보통 함수 실행시간 자체가 길지 않기 때문에 크게 걱정할 일이 없지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;로딩, 입출력, 인터넷 연결&lt;/b&gt;과 같이 작업에 긴 시간이 소요되는 코드들이 일반 함수에 들어있을 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;유니티 생명 주기&lt;/b&gt;를 &lt;b&gt;딜레이&lt;/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;b&gt;코루틴&lt;/b&gt;은 &lt;b&gt;작업의 중단&lt;/b&gt;이 자유롭다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행하던 작업을 &lt;b&gt;잠시 멈추고&lt;/b&gt;, &lt;b&gt;자신을 호출했던 코드&lt;/b&gt;로 돌아가 &lt;b&gt;그 뒤를 마저 수행&lt;/b&gt;할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;단일 스레드&lt;/b&gt;만을 사용하는 유니티 특성상&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드 실행의 &lt;b&gt;물리적인 병렬성&lt;/b&gt;을 구현할 수는 없지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;코루틴&lt;/b&gt;을 통해 &lt;b&gt;논리적인 병행성&lt;/b&gt;을 확보할 수 있는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;281&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9WQTu/btsIihFPJH3/1XnKYsK4czseHzRToRiLXK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9WQTu/btsIihFPJH3/1XnKYsK4czseHzRToRiLXK/img.jpg&quot; data-alt=&quot;밥 한 술 뜨고 굴비 한 번 보고, 다시 밥 한 술 뜨고 굴비 한 번 보는 통칭 &amp;amp;lt;밥캔굴캔&amp;amp;gt;이 가능해진다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9WQTu/btsIihFPJH3/1XnKYsK4czseHzRToRiLXK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9WQTu%2FbtsIihFPJH3%2F1XnKYsK4czseHzRToRiLXK%2Fimg.jpg&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;333&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;281&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;밥 한 술 뜨고 굴비 한 번 보고, 다시 밥 한 술 뜨고 굴비 한 번 보는 통칭 &amp;lt;밥캔굴캔&amp;gt;이 가능해진다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 꽤나 큰 이점이 되는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 언급한 입출력, 인터넷 연결 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;외부적인 요인&lt;/b&gt;으로 &lt;b&gt;시간 지연이 예상&lt;/b&gt;되는 작업은 &lt;b&gt;요청&lt;/b&gt;만 해둔 채&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;코루틴을 중지&lt;/b&gt;하고 원래 수행 중이던 코드로 돌아가면 &lt;b&gt;많은 시간을 절약&lt;/b&gt;할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제에서 배웠던 &lt;b&gt;스케쥴링&lt;/b&gt;의 중요성이 생각나기도 하고...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 사람 다섯 명의 일과를 코루틴을 사용해 나타내면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 더욱 깔끔하게 표현할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1719828915836&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    Coroutine[] eatingCor = new Coroutine[5];
    Coroutine[] drinkingCor = new Coroutine[5];
    Coroutine[] playingCor = new Coroutine[5];
    Coroutine[] studyingCor = new Coroutine[5];
    Coroutine[] sleepingCor = new Coroutine[5];

    void Update()
    {
        for (int i = 0; i &amp;lt; people.Length; i++)
        {
            if (eatingCor[i] == null)
                eatingCor[i] = StartCoroutine(Eat(i, 5, 3));

            if (drinkingCor[i] == null)
                drinkingCor[i] = StartCoroutine(Drink(i, 2, 2));

            if (playingCor[i] == null)
                playingCor[i] = StartCoroutine(Play(i, 5, 7));

            if (studyingCor[i] == null)
                studyingCor[i] = StartCoroutine(Study(i, 1, 1));

            if (sleepingCor[i] == null)
                sleepingCor[i] = StartCoroutine(Sleep(i, 10, 10));
        }
    }

    IEnumerator Eat(int peopleIdx, float spendTime, float coolTime)
    {
        yield return new WaitForSeconds(spendTime);
        yield return StartCoroutine(WaitForCooltime(coolTime));
        eatingCor[peopleIdx] = null;
    }

    IEnumerator Drink(int peopleIdx, float spendTime, float coolTime) { ... }

    IEnumerator Play(int peopleIdx, float spendTime, float coolTime) { ... }

    IEnumerator Study(int peopleIdx, float spendTime, float coolTime) { ... }

    IEnumerator Sleep(int peopleIdx, float spendTime, float coolTime) { ... }

    IEnumerator WaitForCooltime(float coolTime)
    {
        yield return new WaitForSeconds(coolTime);
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코루틴의 핵심, yield&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 저번 주차 &lt;b&gt;Life Cycle&lt;/b&gt;에서도 살짝 얼굴을 비췄던 녀석이다. &lt;br /&gt;도로 위 표지판에도 간간히 보이는 &lt;b&gt;yield&lt;/b&gt;는, 코루틴에서도 비슷한 의미로 사용된다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;854&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZU3eY/btsIklGP7Tr/lLIccpME1g6KHatCkKxcA1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZU3eY/btsIklGP7Tr/lLIccpME1g6KHatCkKxcA1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZU3eY/btsIklGP7Tr/lLIccpME1g6KHatCkKxcA1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZU3eY%2FbtsIklGP7Tr%2FlLIccpME1g6KHatCkKxcA1%2Fimg.jpg&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;243&quot; height=&quot;854&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;854&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 &lt;b&gt;yield + return + @&lt;/b&gt; 세트로 묶여 사용되며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 문구에 도달하면 스레드는 &lt;b&gt;코루틴 실행을 중지&lt;/b&gt;하여 다른 작업으로 관심을 돌린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코루틴이 다른 곳에 잠깐 동안 &lt;b&gt;작업을 양보&lt;/b&gt;하는 개념인 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@값에 따라 코루틴이 호출자에게 양보하는 양상이 달라지며.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Update()&lt;/b&gt;와 싱크를 맞추고 싶을 경우 &lt;b&gt;yield return + null&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;b&gt;FixedUpdate()&lt;/b&gt;와 싱크를 맞추고 싶을 경우 &lt;b&gt;null&lt;/b&gt; 대신 &lt;b&gt;WaitForFixedUpdate()&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;b&gt;WaitForSeconds(float)&lt;/b&gt; or &lt;b&gt;WaitForSecondsRealtime(float)&lt;/b&gt;을 통해 &lt;b&gt;일정 시간 만큼 코루틴을 중단&lt;/b&gt;시킬 수 있다. (WaitForSecondsRealtime은 timescale의 영향을 받지 않음)&lt;/p&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;WaitWhile&lt;/b&gt;과 &lt;b&gt;WaitUntil&lt;/b&gt;등으로 &lt;b&gt;조건부 대기&lt;/b&gt;를 걸 수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;심지어 &lt;b&gt;yield return StartCoroutine(코루틴명())&lt;/b&gt;을 통해 &lt;b&gt;새로운 코루틴을 호출&lt;/b&gt;하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호출한 코루틴의 &lt;b&gt;작업이 종료되기 전&lt;/b&gt;까지 &lt;b&gt;지금의 코루틴을 중지&lt;/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;이에 더해 yield + return + @가 아닌 &lt;b&gt;yield break&lt;/b&gt;로 코루틴을 &lt;b&gt;즉시 종료&lt;/b&gt;할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코루틴의 실행과 중지&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코루틴은 일반 함수와는 실행 방식이 조금 다르다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구현 부분에서도 차이가 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1719833231110&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    void Start()
    {
        ThisIsFunc();
        Coroutine cor = StartCoroutine(ThisIsCor());
    }

    void ThisIsFunc()
    {
        Debug.Log(&quot;This is Function&quot;);
        return;
    }

    IEnumerator ThisIsCor()
    {
        Debug.Log(&quot;This is Coroutine&quot;);
        yield break;
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;함수&lt;/b&gt;를 구현할 때는 &lt;b&gt;함수 이름&lt;/b&gt; 앞에 &lt;b&gt;return값의 자료형&lt;/b&gt;이 들어간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면 &lt;b&gt;코루틴 이름&lt;/b&gt; 앞에는 자료형 대신 열거자 인터페이스라는 의미의 &lt;b&gt;IEnumerator&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;b&gt;함수&lt;/b&gt;는 반드시 자료형에 맞는 &lt;b&gt;return&lt;/b&gt;을 내놓아야 하지만(void 함수 제외),&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;코루틴&lt;/b&gt;은 기존의 return을 요구하지 않는 대신 &lt;b&gt;yield return + @&lt;/b&gt;, 혹은 &lt;b&gt;yield break&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;b&gt;함수&lt;/b&gt;는 &lt;b&gt;함수명&lt;/b&gt;과 &lt;b&gt;인자&lt;/b&gt;를 적어 호출하는 반면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;코루틴&lt;/b&gt;은 &lt;b&gt;StartCoroutine&lt;/b&gt; 안에 &lt;b&gt;코루틴명&lt;/b&gt;과 &lt;b&gt;인자&lt;/b&gt;를 적고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필요에 따라 &lt;b&gt;Coroutine 변수&lt;/b&gt;에 &lt;b&gt;실행 중인 코루틴&lt;/b&gt;을 담아 둔 다음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;StopCoroutine&lt;/b&gt;을 통해&amp;nbsp;해당&amp;nbsp;코루틴을 &lt;b&gt;중단&lt;/b&gt;시킬 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;천천히 함께 가는 코루틴&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1980&quot; data-origin-height=&quot;803&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Nzt0E/btsIk0CeHgk/AyMv1CLcwkdcMx4Xcd2aH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Nzt0E/btsIk0CeHgk/AyMv1CLcwkdcMx4Xcd2aH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nzt0E/btsIk0CeHgk/AyMv1CLcwkdcMx4Xcd2aH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNzt0E%2FbtsIk0CeHgk%2FAyMv1CLcwkdcMx4Xcd2aH0%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;557&quot; height=&quot;226&quot; data-origin-width=&quot;1980&quot; data-origin-height=&quot;803&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코루틴은 &lt;b&gt;모든 작업을 한 프레임에 모두 끝내버리는&lt;/b&gt; 일반 함수와는 다르다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;시간차&lt;/b&gt;를 두고 &lt;b&gt;천천히 진행하는 특성&lt;/b&gt; 덕분에 코드의 실행을 &lt;b&gt;의도적으로 지연시키고&lt;/b&gt;,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;오버헤드의 우려&lt;/b&gt;가 있는 작업을 &lt;b&gt;여러 번에 나누어&lt;/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;b&gt;혼자만 앞서 나가지 않는다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코루틴이 몇 개가 호출되든, Update()나 FixedUpdate(), 혹은 다른 코루틴들과 함께 발맞춰&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그들과 &lt;b&gt;병행&lt;/b&gt;하며 작업을 수행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식의 &lt;b&gt;지연&lt;/b&gt;과 &lt;b&gt;병행 작업&lt;/b&gt;이 필요한 상황이 아니라면&amp;nbsp;&lt;b&gt;보통의 함수&lt;/b&gt;를 이용하는 편이 더 간단하고 편할 수 있겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 코루틴을 &lt;b&gt;온전히 이해&lt;/b&gt;하고 &lt;b&gt;목적에 맞게&lt;/b&gt;, &lt;b&gt;적재적소&lt;/b&gt;에 활용할 수 있다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 &lt;b&gt;잠재력은 무궁무진&lt;/b&gt;해질 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마치 리그 오브 레전드, 할로우나이트, 얼불춤, 오목, 영상 편집,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스타크래프트, 모의고사 풀이와 &lt;b&gt;유니티 코딩&lt;/b&gt;을&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앉은 자리에서 컴퓨터 한 대로 모두 해내는,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;Faker&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/span&gt;처럼.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignLeft&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=cC2LEYjpSY0&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/hAMCB/hyWvPNj2Fd/Rfe4UTXYNXNRPcHXNZZm1k/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;페이커의 미친 멀티태스킹 능력&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/cC2LEYjpSY0&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;00:51 초 보면 진짜 유니티임...ㅋㅋ&lt;/figcaption&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;그럼 이번 주도 끝!!!&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;style3&quot; /&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;a href=&quot;https://kjunwoo23.tistory.com/2&quot;&gt;0주차: 인트로 - 새롭고 신기한 것을 좋아하거나, 모르는 것을 알고 싶어 하는 마음&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/3&quot;&gt;1주차: Unity 엔진은 왜 개발 언어로 C#을 선택했을까?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/4&quot;&gt;2주차: 의외로&amp;nbsp;세상&amp;nbsp;잡다한&amp;nbsp;Transform에&amp;nbsp;대한&amp;nbsp;모든&amp;nbsp;것&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/5&quot;&gt;3주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (1/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/6&quot;&gt;4주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (2/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/7&quot;&gt;5주차: 헐크&amp;nbsp;아저씨도&amp;nbsp;깜짝&amp;nbsp;놀란&amp;nbsp;Unity&amp;nbsp;Render&amp;nbsp;Pipeline이&amp;nbsp;작동하는&amp;nbsp;과정&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/8&quot;&gt;6주차: 매 프레임 나보다 갓생 사는 Unity의 Life Cycle&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/9&quot;&gt;7주차: 남들보다 더 갓생 사는 Coroutine의 충격적인 정체&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/10&quot;&gt;8주차: 야물(YAML)딱진 그 녀석의 은밀한 속마음 - Unity Scene 파일 (.unity)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/11&quot;&gt;9주차: 내&amp;nbsp;과자&amp;nbsp;포장지&amp;nbsp;누가&amp;nbsp;버렸어?&amp;nbsp;-&amp;nbsp;meta&amp;nbsp;data&amp;nbsp;파일&amp;nbsp;(.meta)&amp;nbsp;파헤치기&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/12&quot;&gt;10주차: 철가방 채로 배달온 Unity 빌드 파일. 난 단무지 시킨 적 없는데, 왜 있지?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/13&quot;&gt;11주차: 마무리 - 후기&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>내 맘대로 쓰는 Unity 심층분석 析深層分</category>
      <author>원펀치 쓰리 갓냥이</author>
      <guid isPermaLink="true">https://kjunwoo23.tistory.com/9</guid>
      <comments>https://kjunwoo23.tistory.com/9#entry9comment</comments>
      <pubDate>Thu, 8 Feb 2024 13:42:47 +0900</pubDate>
    </item>
    <item>
      <title>6주차: 매 프레임 나보다 갓생 사는 Unity의 Life Cycle</title>
      <link>https://kjunwoo23.tistory.com/8</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/2&quot;&gt;0주차: 인트로 - 새롭고 신기한 것을 좋아하거나, 모르는 것을 알고 싶어 하는 마음&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/3&quot;&gt;1주차: Unity 엔진은 왜 개발 언어로 C#을 선택했을까?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/4&quot;&gt;2주차: 의외로&amp;nbsp;세상&amp;nbsp;잡다한&amp;nbsp;Transform에&amp;nbsp;대한&amp;nbsp;모든&amp;nbsp;것&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/5&quot;&gt;3주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (1/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/6&quot;&gt;4주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (2/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/7&quot;&gt;5주차: 헐크&amp;nbsp;아저씨도&amp;nbsp;깜짝&amp;nbsp;놀란&amp;nbsp;Unity&amp;nbsp;Render&amp;nbsp;Pipeline이&amp;nbsp;작동하는&amp;nbsp;과정&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/8&quot;&gt;6주차: 매 프레임 나보다 갓생 사는 Unity의 Life Cycle&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/9&quot;&gt;7주차: 남들보다 더 갓생 사는 Coroutine의 충격적인 정체&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/10&quot;&gt;8주차: 야물(YAML)딱진 그 녀석의 은밀한 속마음 - Unity Scene 파일 (.unity)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/11&quot;&gt;9주차: 내&amp;nbsp;과자&amp;nbsp;포장지&amp;nbsp;누가&amp;nbsp;버렸어?&amp;nbsp;-&amp;nbsp;meta&amp;nbsp;data&amp;nbsp;파일&amp;nbsp;(.meta)&amp;nbsp;파헤치기&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/12&quot;&gt;10주차: 철가방 채로 배달온 Unity 빌드 파일. 난 단무지 시킨 적 없는데, 왜 있지?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/13&quot;&gt;11주차: 마무리 - 후기&lt;/a&gt;&lt;/blockquote&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;style3&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;Unity에서 개발자가 작성하는 대부분의 C# 스크립트는 MonoBehaviour 클래스를 상속받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MonoBehaviour 클래스는 에디터 상에서 스크립트가 게임 오브젝트와 잘 연동될 수 있도록 프레임워크를 제공해주며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 스크립트가 공통된 생명 주기(Life Cycle)를 따라&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일정에 맞게 딱딱 실행될 수 있도록 관리해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baMSAh/btsEho8RDjL/kZKQKEpLwqQDydeyeNEWoK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baMSAh/btsEho8RDjL/kZKQKEpLwqQDydeyeNEWoK/img.jpg&quot; data-alt=&quot;이제 FixedUpdate로 이동할 시간입니다 공주님&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baMSAh/btsEho8RDjL/kZKQKEpLwqQDydeyeNEWoK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaMSAh%2FbtsEho8RDjL%2FkZKQKEpLwqQDydeyeNEWoK%2Fimg.jpg&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;336&quot; height=&quot;422&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;402&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이제 FixedUpdate로 이동할 시간입니다 공주님&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;위 그림에서 C# 스크립트를 공주로, MonoBehaviour를 시종으로 비유를 든 것은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C# 스크립트가 딱히 기품 있거나 고귀해서가 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하루 일정이 &lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;s&gt;ㅈㄴ&lt;/s&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;/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;2397&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmSd2u/btsEhmcgSEl/AwrFwMipa2vfiNoL1lKCU0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmSd2u/btsEhmcgSEl/AwrFwMipa2vfiNoL1lKCU0/img.jpg&quot; data-alt=&quot;Unity 공식 문서에서 하달 받은 오늘 한 프레임의 일정입니다 공주님&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmSd2u/btsEhmcgSEl/AwrFwMipa2vfiNoL1lKCU0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmSd2u%2FbtsEhmcgSEl%2FAwrFwMipa2vfiNoL1lKCU0%2Fimg.jpg&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;871&quot; height=&quot;1814&quot; data-origin-width=&quot;1151&quot; data-origin-height=&quot;2397&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Unity 공식 문서에서 하달 받은 오늘 한 프레임의 일정입니다 공주님&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 순서도의 대부분이 무려 '한 프레임' 이내에 일어나는 것들이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unity의 Life Cycle을 하나하나 파헤치며&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공주님과 함께하는 오늘의 일상 VLOG,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;겟 레디 윗 미(Get Ready With Me)를 시작해보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4PPAU/btsEdSXmqDg/ZDyDliJW6E1pYRkomuRe81/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4PPAU/btsEdSXmqDg/ZDyDliJW6E1pYRkomuRe81/img.jpg&quot; data-alt=&quot;ㅁ...뭣&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4PPAU/btsEdSXmqDg/ZDyDliJW6E1pYRkomuRe81/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4PPAU%2FbtsEdSXmqDg%2FZDyDliJW6E1pYRkomuRe81%2Fimg.jpg&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;283&quot; height=&quot;174&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;462&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;h3 data-ke-size=&quot;size23&quot;&gt;1. Initialization&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;420&quot; data-origin-height=&quot;378&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MEOUI/btsEhp00I54/xzt3ytknwHKo4rrxVBOmaK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MEOUI/btsEhp00I54/xzt3ytknwHKo4rrxVBOmaK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MEOUI/btsEhp00I54/xzt3ytknwHKo4rrxVBOmaK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMEOUI%2FbtsEhp00I54%2Fxzt3ytknwHKo4rrxVBOmaK%2Fimg.jpg&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;177&quot; height=&quot;159&quot; data-origin-width=&quot;420&quot; data-origin-height=&quot;378&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하루의 시작이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;씬에서 오브젝트가 처음 생성될 때 한 번씩 호출되는 함수들이다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Awake&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Initialization 단계에서 맨 처음으로 호출된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뒤이어 나올 Start와 비슷하지만 Start보다도 먼저 호출된다는 특징을 가지고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때문에 Start보다도 선행으로 실행돼야 할 코드들이 있을 경우&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Find 라던가)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주로 Awake 문에서 실행한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Awake에서 FInd를 사용하면 좋은 이유&lt;br /&gt;1. Awake 함수 자체가 씬 내 모든 오브젝트의 초기화가 완료되고 호출됨&lt;br /&gt;&amp;nbsp; &amp;nbsp; = NullReference 우려 없음&lt;br /&gt;2. 순서상 이후 단계(Start)에서 사용될 다른 컴포넌트들을 가져오기 좋음&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;OnEnable&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;씬에서 활성화돼있는 스크립트의 경우, Awake 이후 OnEnable을 호출한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 1회만 호출되는건 아니고, 스크립트가 활성화될 때마다 호출되기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그에 맞춰 새로이 활성화된 스크립트의 초기화 등 유동적인 용도로 활용할 수 있다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;Reset&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;에디터 모드에서만 호출되는 함수이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;인스펙터 창에서 해당 스크립트를 Reset 했을 때 호출된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;에디터 플레이 모드에서 스크립트를 조절하다가 초기값으로 복구하고 싶을 때 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Start&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 Update가 호출되기 직전, 스크립트가 활성화돼있을 경우 호출된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Update와 함께 Unity에서 C# Script를 생성하면 기본적으로 기재되어 있는 함수이며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그만큼 Unity 초심자부터 고인물들까지 범용적으로 폭 넓게 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. Physics, Input Events, Game Logic&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7LzNe/btsEkSuD1ds/kuNng7cyaGgQ3zNV6wnlYK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7LzNe/btsEkSuD1ds/kuNng7cyaGgQ3zNV6wnlYK/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7LzNe/btsEkSuD1ds/kuNng7cyaGgQ3zNV6wnlYK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/7LzNe/btsEkSuD1ds/kuNng7cyaGgQ3zNV6wnlYK/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;205&quot; height=&quot;205&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;720&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;바쁜 Unity 공주의 본격적인 일과 시간이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매 프레임&amp;nbsp;각 부처에서 올린 공문과 국민들이 올린 탄원서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왕이 내린 왕가의 규율과 지침을 담은 문서를 읽고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학교에서 받은 가정통신문과 알림장을 확인,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 달 우유급식비는 제때 냈는지 검토한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;투니버스에서 틀어주는 신비아파트와 또봇을 한 편씩 보고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적국에서 보내온 자객들에 맞서기 위한 호신술과 살인 기술을 연마한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 밤 9시가 되면 양치하고 발닦고 칼같이 잠에 든다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;349&quot; data-origin-height=&quot;313&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nJvxT/btsEkzoq9B5/WVBrTYhadYDMvOeo2d5j31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nJvxT/btsEkzoq9B5/WVBrTYhadYDMvOeo2d5j31/img.png&quot; data-alt=&quot;ㅋ&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nJvxT/btsEkzoq9B5/WVBrTYhadYDMvOeo2d5j31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnJvxT%2FbtsEkzoq9B5%2FWVBrTYhadYDMvOeo2d5j31%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;155&quot; height=&quot;139&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;349&quot; data-origin-height=&quot;313&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ㅋ&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 루틴은 매일매일 매 프레임마다 반복된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 그 루틴들을 좀 더 자세하게 풀어놓은 것이다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;FixedUpdate&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별다른 상호작용을 하지 않아도 일정한 시간 간격으로 호출되는 함수이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 일정한 시간 간격이란 Time.fixedDeltaTime(기본값: 0.02)이며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프레임이 아닌 고정된 시간 간격에 의존하기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각종 플랫폼의 성능 차이에서 오는 frameRate에 영향받지 않을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때문에 일정한 시간 간격으로 힘을 받아야 하는 물리 연산(특히 RigidBody쪽)들에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주로 사용된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;OnTrigger(Enter, Stay, Exit)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Collider끼리의 충돌을 체크하는 단계이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단, 물리 연산을 하지 않는 충돌도 포함이며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어느 한쪽 Collider의 isTrigger가 켜져있어야 한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Enter, Stay, Exit? &lt;br /&gt;처음 충돌(진입) 상태에 진입한 시점에 Enter,&lt;br /&gt;충돌(진입) 상태를 유지하고 있는 시점에 Stay, (Stay의 호출 간격이 Update 호출 간격인과 맞지 않을 수 있음)&lt;br /&gt;충돌(진입) 상태에서 벗어난 시점에 Exit을 호출한다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;OnCollision(Enter, Stay, Exit)&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Collider끼리의 충돌을 체크하는 단계이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;단, 물리 연산이 적용되는 충돌만을 말하며,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;어느 한쪽 Collider도 isTrigger가 켜져있으면 안된다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Enter, Stay, Exit?&lt;br /&gt;처음 충돌(진입) 상태에 진입한 시점에 Enter,&lt;br /&gt;충돌(진입) 상태를 유지하고 있는 시점에 Stay, (Stay의 호출 간격이 Update 호출 간격인과 맞지 않을 수 있음)&lt;br /&gt;충돌(진입) 상태에서 벗어난 시점에 Exit을 호출한다.&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;yield WaitForFixedUpdate&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뒤에서도 계속 나올 yield 시리즈의 함수(정확히는 코루틴)들은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코루틴 그 자체에 특별한 기능이 있다기보다는,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 시점이 오기 전까지 잠들어 있다가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생명 주기 상에서 어떠한 과정이 끝났다라는 '플래그'를 발견하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 깨어나는 역할을 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;478&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0B4mY/btsEfooMr4e/10OMOjI0uEeWI6nr7vfKB1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0B4mY/btsEfooMr4e/10OMOjI0uEeWI6nr7vfKB1/img.jpg&quot; data-alt=&quot;나 좀 깨워줘&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0B4mY/btsEfooMr4e/10OMOjI0uEeWI6nr7vfKB1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0B4mY%2FbtsEfooMr4e%2F10OMOjI0uEeWI6nr7vfKB1%2Fimg.jpg&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;319&quot; height=&quot;179&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;478&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;나 좀 깨워줘&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;그 중 yield WaitForFixedUpdate는 생명 주기 중 Physics 단계가 끝났을 때 깨어나며,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;코루틴 내의 while 반복문 말미에 yield return new WaitForFixedUpdate();를 한 줄 적어넣어&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;마치 while 반복문이 FixedUpdate와 같은 주기로 돌게끔 설계할 수 있다.&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: #9d9d9d;&quot;&gt;코루틴이 무엇인가?에 대해서는 바로 다음 주차인 '7주차: 코루틴'에서 살펴볼 예정이다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;OnMouse(Enter, Over,&lt;span&gt;&amp;nbsp;&lt;/span&gt;Exit, Down, Drag, Up)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플레이어의 마우스 클릭을 감지하는 단계이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 함수들이 호출되는 시점은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 타겟 위에 마우스가 진입했을 경우 Enter,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타겟 위에 마우스가 올라와 있을 경우 Over,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타겟에서 마우스가 벗어났을 경우 Exit,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타겟에서 마우스 버튼이 눌렸을 경우 Down,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타겟에서 마우스 클릭이 유지되고 있을 경우 Drag,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타겟에서 눌렸던 마우스 버튼이 다시 떼졌을 경우 Up&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Update&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생명 주기의 함수들 중 Start와 함께 가장 유명한 친구이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 스크립트가 켜져있는 경우 매 프레임마다 확정적으로 호출하지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프레임 당 1회이기 때문에 프레임 간격이 들쭉날쭉한 저성능의 플랫폼의 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Update 함수의 호출 빈도가 심각하게 낮아지거나 불균형해지는 모습을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때문에 Update 호출 시마다 연산 결과를 누적해야 하는 경우 연산값에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프레임과 프레임 사이의 시간 간격인 Time.deltaTime을 곱해줘야 한다는 이야기를&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어디선가 많이 들어봤을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1167&quot; data-origin-height=&quot;540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGTZqv/btsEkeriK4R/dzwsshkPnM9LNaeBiUveA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGTZqv/btsEkeriK4R/dzwsshkPnM9LNaeBiUveA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGTZqv/btsEkeriK4R/dzwsshkPnM9LNaeBiUveA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGTZqv%2FbtsEkeriK4R%2FdzwsshkPnM9LNaeBiUveA0%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;685&quot; height=&quot;317&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1167&quot; data-origin-height=&quot;540&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Time.deltaTime?&lt;br /&gt;&lt;br /&gt;PC1과 PC2 모두 같은 시간(=5초)이 흘렀다고 했을 때,&lt;br /&gt;둘 모두 매 Update마다 a += 1 연산을 했다면,&lt;br /&gt;&lt;br /&gt;5초가 지난 후&lt;br /&gt;PC1은 총 14 프레임이므로 a 값이 14,&lt;br /&gt;PC2는 총 12 프레임이므로 a 값이 12가 될 것이다.&lt;br /&gt;&lt;br /&gt;하지만 둘 모두 매 Update마다 a += 1 * Time.deltaTime 연산을 한다면,&lt;br /&gt;(Time.deltaTime은 이전 프레임과 현재 프레임 사이의 시간 간격)&lt;br /&gt;5초가 지난 후 a 값은 프레임 수와 무관하게 5가 될 것이다.&lt;br /&gt;&lt;br /&gt;프레임 수와 무관하게 두 PC 모두 5초간의 Time.deltaTime 총합은 5이고,&lt;br /&gt;이것이 프레임마다 분할되어 배분되었으므로.&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;yield null&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;yield WaitForFixedUpdate에서 언급했던 yield 시리즈이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;yield null의 경우 모든 Update가 종료될 때까지 잠들어있다가 다시 깨어난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마찬가지로 While 반복문 말이에 yield return null;을 한 줄 넣어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Update와 같은 주기로 돌게끔 활용하는 방법이 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;478&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0B4mY/btsEfooMr4e/10OMOjI0uEeWI6nr7vfKB1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0B4mY/btsEfooMr4e/10OMOjI0uEeWI6nr7vfKB1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0B4mY/btsEfooMr4e/10OMOjI0uEeWI6nr7vfKB1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0B4mY%2FbtsEfooMr4e%2F10OMOjI0uEeWI6nr7vfKB1%2Fimg.jpg&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;255&quot; height=&quot;143&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;478&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;yield WaitForSeconds&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 yield 시리즈.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;숫자 하나를 인자로 받고 해당 숫자의 시간(초)만큼 활동을 멈춘 뒤,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간이 지난 시점에서 Update문이 모두 종료되면 다시 깨어난다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;478&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0B4mY/btsEfooMr4e/10OMOjI0uEeWI6nr7vfKB1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0B4mY/btsEfooMr4e/10OMOjI0uEeWI6nr7vfKB1/img.jpg&quot; data-alt=&quot;이제는 알람 맞추고 잠들어버린&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0B4mY/btsEfooMr4e/10OMOjI0uEeWI6nr7vfKB1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0B4mY%2FbtsEfooMr4e%2F10OMOjI0uEeWI6nr7vfKB1%2Fimg.jpg&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;202&quot; height=&quot;114&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;478&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이제는 알람 맞추고 잠들어버린&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;yield WWW&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 또 yield 시리즈.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WWW 다운로드가 완료되기 전까지 잠들어 있는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;478&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0B4mY/btsEfooMr4e/10OMOjI0uEeWI6nr7vfKB1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0B4mY/btsEfooMr4e/10OMOjI0uEeWI6nr7vfKB1/img.jpg&quot; data-alt=&quot;코잇츠 또 잠들어버린 www&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0B4mY/btsEfooMr4e/10OMOjI0uEeWI6nr7vfKB1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0B4mY%2FbtsEfooMr4e%2F10OMOjI0uEeWI6nr7vfKB1%2Fimg.jpg&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;179&quot; height=&quot;101&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;478&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코잇츠 또 잠들어버린 www&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;yield StartCoroutine&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 또 또 yield 시리즈&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인자로 다른 코루틴을 받고, 해당 코루틴이 종료되기 전까지 잠들어 있는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 코루틴이 종료된 시점에서 다른 모든 Update가 종료될 때 다시 깨어난다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;478&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0B4mY/btsEfooMr4e/10OMOjI0uEeWI6nr7vfKB1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0B4mY/btsEfooMr4e/10OMOjI0uEeWI6nr7vfKB1/img.jpg&quot; data-alt=&quot;쟤 끝나기 전까진 나 깨우지 말라고&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0B4mY/btsEfooMr4e/10OMOjI0uEeWI6nr7vfKB1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0B4mY%2FbtsEfooMr4e%2F10OMOjI0uEeWI6nr7vfKB1%2Fimg.jpg&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;154&quot; height=&quot;87&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;478&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;쟤 끝나기 전까진 나 깨우지 말라고&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;LateUpdate&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Game Logic 단계에서 가장 마지막으로 호출되는 함수이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;온갖 종류의 Update문과 yield문의 연산이 종료되고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 호출되는 찐막 Update이기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주로 여기에 Camera 관련 Logic을 넣어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 매끄러운 화면을 보여준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;356&quot; data-origin-height=&quot;408&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bv2foc/btsEj8Lwt8E/nWwT8nPMoCKWd7sJobHlX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bv2foc/btsEj8Lwt8E/nWwT8nPMoCKWd7sJobHlX0/img.png&quot; data-alt=&quot;이제 일할 시간이다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bv2foc/btsEj8Lwt8E/nWwT8nPMoCKWd7sJobHlX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbv2foc%2FbtsEj8Lwt8E%2FnWwT8nPMoCKWd7sJobHlX0%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;211&quot; height=&quot;242&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;356&quot; data-origin-height=&quot;408&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-filename=&quot;blob&quot; data-origin-width=&quot;753&quot; data-origin-height=&quot;552&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VLKQA/btsEhJsjovG/q35ubGIK6toTt1XKCZ8feK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VLKQA/btsEhJsjovG/q35ubGIK6toTt1XKCZ8feK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VLKQA/btsEhJsjovG/q35ubGIK6toTt1XKCZ8feK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVLKQA%2FbtsEhJsjovG%2Fq35ubGIK6toTt1XKCZ8feK%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;172&quot; height=&quot;126&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;753&quot; data-origin-height=&quot;552&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. Scene, Gizmo, GUI Rendering&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mODKP/btsEhVzqcUF/HaG7a1pJMPwoRDO8UV4vSk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mODKP/btsEhVzqcUF/HaG7a1pJMPwoRDO8UV4vSk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mODKP/btsEhVzqcUF/HaG7a1pJMPwoRDO8UV4vSk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmODKP%2FbtsEhVzqcUF%2FHaG7a1pJMPwoRDO8UV4vSk%2Fimg.jpg&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;324&quot; height=&quot;185&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;드디어 칼잠에 든 공주.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공주는 자신이 하루 겪었던 일을 토대로 꿈을 꾸기 시작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머릿속 정리되어있지 않은 장면들이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감긴 눈 속에서 한 프레임씩 렌더링되고 그려지는 과정이다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;OnWillRenderObject&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 오브젝트가 카메라에 보여지는 상황이고, UI가 아니라면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카메라 당 한 번씩 호출된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;OnPreCull&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;씬이 카메라에 의해 컬링되기 직전에 호출된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컬링은 해당 오브젝트가 카메라에 표시될지, 표시되지 않을지 분별하는 작업이다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;OnBecameVisible/Invisible&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컬링 작업을 거친 후 오브젝트가 카메라에 표시되는 것으로 판정됐을 때(Visible),&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹은 표시되지 않는 것으로 판정됐을 때(Invisible) 호출된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;OnPreRender&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;460&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5YMe4/btsEmEkqSoJ/una9FCfDBZh8kk2t4xiGi1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5YMe4/btsEmEkqSoJ/una9FCfDBZh8kk2t4xiGi1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5YMe4/btsEmEkqSoJ/una9FCfDBZh8kk2t4xiGi1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5YMe4%2FbtsEmEkqSoJ%2Funa9FCfDBZh8kk2t4xiGi1%2Fimg.jpg&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;126&quot; height=&quot;131&quot; data-origin-width=&quot;460&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;씬이 화면에 본격적으로 렌더링되기 직전에 호출된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;OnRenderObject&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;씬 내 모든 오브젝트들의 렌더링이 처리된 직후 호출된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;OnPostRender&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카메라의 모든 씬 렌더링이 종료된 후 호출된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;OnRenderImage&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;씬의 모든 렌더링이 종료된 이후 포스트 프로세싱이 가능해진 시점에서 호출된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;OnDrawGizmos&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적으로 에디터 상의 화면에서 기즈모(격자)를 그려낼 필요가 있을 할 때 호출한다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;OnGUI&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 화면 상에서 UI에 해당하는 것들을 그릴 때 호출된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 기타&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;yield WaitForEndOfFrame&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이름에서 알 수 있듯, 한 프레임이 종료될 때마다 호출된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특이한 점은 앞선 yield Wait 시리즈들과는 달리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면 렌더링까지 전부 종료된 이후 화면에 나타내기 직전에 호출된다는 것이다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;OnApplicationPause&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게임이 일시정지되었다는 사실을 감지한 이후 프레임의 OnApplicationPause 단계에서 호출된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정확히는 인자로 게임의 일시정지 여부를 bool 값으로 받고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게임이 정상적으로 실행되고 있을 경우 false를,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무언가에 의해 멈췄을 경우 true를 반환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 일시정지 기능을 자체적으로 제공하는 에디터에서는 물론,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빌드 버전에서도 게임 창이 다른 어플리케이션 화면들에 가려지는 등의 상황이 발생할 때 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. Decommissioning&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바쁘게 살아온 일상,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한평생 나라를 위해 몸을 바쳐온 공주의 삶에도 끝이 찾아왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일매일 정해진 일과를 보내고 잠들기만을 반복했던 우리의 공주는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;곧 영원히 잠에 들 준비를 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;879&quot; data-origin-height=&quot;956&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVuaHJ/btsEn0NwM2n/2NKEBCzeVCH3XygckZupv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVuaHJ/btsEn0NwM2n/2NKEBCzeVCH3XygckZupv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVuaHJ/btsEn0NwM2n/2NKEBCzeVCH3XygckZupv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVuaHJ%2FbtsEn0NwM2n%2F2NKEBCzeVCH3XygckZupv1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;290&quot; height=&quot;315&quot; data-origin-width=&quot;879&quot; data-origin-height=&quot;956&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;OnApplicationQuit&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에디터 기준으로 Playmode가 종료되었을 때,&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;OnDisable&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 스크립트, 혹은 해당 오브젝트가 비활성화되었을 때 호출된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Initialization 단계의 OnEnable과 반대격이지만 순서상 더 이후에 호출된다고 생각하면 된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;OnDestroy&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;활성화돼있던 스크립트, 혹은 오브젝트가 파괴될 때 호출된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;378&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgtg1F/btsEj44ZuwL/zAocXuSK3gHTAYyjCtrpK0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgtg1F/btsEj44ZuwL/zAocXuSK3gHTAYyjCtrpK0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgtg1F/btsEj44ZuwL/zAocXuSK3gHTAYyjCtrpK0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbgtg1F%2FbtsEj44ZuwL%2FzAocXuSK3gHTAYyjCtrpK0%2Fimg.jpg&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;379&quot; height=&quot;159&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;378&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;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;이렇게 해서 Unity Life Cycle의 시작과 끝을 알아보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 수많은 과정들이 고작 한 프레임 단위로 사이클을 돌고 있다니...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그것도 한두개가 아닌 스크립트와 오브젝트들에서.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것이 참으로 갓생이 아닐 수가 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대단하다 유니티!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&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;a href=&quot;https://kjunwoo23.tistory.com/2&quot;&gt;0주차: 인트로 - 새롭고 신기한 것을 좋아하거나, 모르는 것을 알고 싶어 하는 마음&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/3&quot;&gt;1주차: Unity 엔진은 왜 개발 언어로 C#을 선택했을까?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/4&quot;&gt;2주차: 의외로&amp;nbsp;세상&amp;nbsp;잡다한&amp;nbsp;Transform에&amp;nbsp;대한&amp;nbsp;모든&amp;nbsp;것&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/5&quot;&gt;3주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (1/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/6&quot;&gt;4주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (2/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/7&quot;&gt;5주차: 헐크&amp;nbsp;아저씨도&amp;nbsp;깜짝&amp;nbsp;놀란&amp;nbsp;Unity&amp;nbsp;Render&amp;nbsp;Pipeline이&amp;nbsp;작동하는&amp;nbsp;과정&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/8&quot;&gt;6주차: 매 프레임 나보다 갓생 사는 Unity의 Life Cycle&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/9&quot;&gt;7주차: 남들보다 더 갓생 사는 Coroutine의 충격적인 정체&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/10&quot;&gt;8주차: 야물(YAML)딱진 그 녀석의 은밀한 속마음 - Unity Scene 파일 (.unity)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/11&quot;&gt;9주차: 내&amp;nbsp;과자&amp;nbsp;포장지&amp;nbsp;누가&amp;nbsp;버렸어?&amp;nbsp;-&amp;nbsp;meta&amp;nbsp;data&amp;nbsp;파일&amp;nbsp;(.meta)&amp;nbsp;파헤치기&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/12&quot;&gt;10주차: 철가방 채로 배달온 Unity 빌드 파일. 난 단무지 시킨 적 없는데, 왜 있지?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/13&quot;&gt;11주차: 마무리 - 후기&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>내 맘대로 쓰는 Unity 심층분석 析深層分</category>
      <author>원펀치 쓰리 갓냥이</author>
      <guid isPermaLink="true">https://kjunwoo23.tistory.com/8</guid>
      <comments>https://kjunwoo23.tistory.com/8#entry8comment</comments>
      <pubDate>Sun, 4 Feb 2024 20:42:38 +0900</pubDate>
    </item>
    <item>
      <title>5주차: 헐크 아저씨도 깜짝 놀란 Unity Render Pipeline이 작동하는 과정</title>
      <link>https://kjunwoo23.tistory.com/7</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/2&quot;&gt;0주차: 인트로 - 새롭고 신기한 것을 좋아하거나, 모르는 것을 알고 싶어 하는 마음&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/3&quot;&gt;1주차: Unity 엔진은 왜 개발 언어로 C#을 선택했을까?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/4&quot;&gt;2주차: 의외로&amp;nbsp;세상&amp;nbsp;잡다한&amp;nbsp;Transform에&amp;nbsp;대한&amp;nbsp;모든&amp;nbsp;것&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/5&quot;&gt;3주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (1/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/6&quot;&gt;4주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (2/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/7&quot;&gt;5주차: 헐크&amp;nbsp;아저씨도&amp;nbsp;깜짝&amp;nbsp;놀란&amp;nbsp;Unity&amp;nbsp;Render&amp;nbsp;Pipeline이&amp;nbsp;작동하는&amp;nbsp;과정&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/8&quot;&gt;6주차: 매 프레임 나보다 갓생 사는 Unity의 Life Cycle&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/9&quot;&gt;7주차: 남들보다 더 갓생 사는 Coroutine의 충격적인 정체&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/10&quot;&gt;8주차: 야물(YAML)딱진 그 녀석의 은밀한 속마음 - Unity Scene 파일 (.unity)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/11&quot;&gt;9주차: 내&amp;nbsp;과자&amp;nbsp;포장지&amp;nbsp;누가&amp;nbsp;버렸어?&amp;nbsp;-&amp;nbsp;meta&amp;nbsp;data&amp;nbsp;파일&amp;nbsp;(.meta)&amp;nbsp;파헤치기&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/12&quot;&gt;10주차: 철가방 채로 배달온 Unity 빌드 파일. 난 단무지 시킨 적 없는데, 왜 있지?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/13&quot;&gt;11주차: 마무리 - 후기&lt;/a&gt;&lt;/blockquote&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;style3&quot; /&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;540&quot; data-origin-height=&quot;283&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sxCdJ/btsDUUaEvBh/Okut7TW114RTHmNxbGypYk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sxCdJ/btsDUUaEvBh/Okut7TW114RTHmNxbGypYk/img.gif&quot; data-alt=&quot;렌더링 중&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sxCdJ/btsDUUaEvBh/Okut7TW114RTHmNxbGypYk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/sxCdJ/btsDUUaEvBh/Okut7TW114RTHmNxbGypYk/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;439&quot; height=&quot;230&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;283&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;렌더링 중&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;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;짧은 시간 안에 &lt;b&gt;수많은 연산&lt;/b&gt;과 &lt;b&gt;상호작용&lt;/b&gt;을 한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 자신이 연산해낸 것들을 사람에게 보여주기 위해&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그것을 &lt;b&gt;화면&lt;/b&gt;에 띄워내야 하는데,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 과정 역시도 또 다른 연산들을 거쳐야 한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;모니터&lt;/b&gt;는 컴퓨터가 원하는 대로 연필로 쓰고 지우개로 지워 내놓으면 그만인 도화지가 아니고,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;가로 세로 정해진 개수&lt;/b&gt;의 &lt;b&gt;픽셀들&lt;/b&gt;에 &lt;b&gt;색&lt;/b&gt;을 칠해&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;표현된 그림을 &lt;b&gt;매순간&lt;/b&gt; 갈아치워야 하는 &lt;b&gt;애니메이션 플립 북&lt;/b&gt;이기 때문이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r4QKk/btsDWJmbk9I/m4RUBHqOdAynhKo33OWSLk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r4QKk/btsDWJmbk9I/m4RUBHqOdAynhKo33OWSLk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r4QKk/btsDWJmbk9I/m4RUBHqOdAynhKo33OWSLk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/r4QKk/btsDWJmbk9I/m4RUBHqOdAynhKo33OWSLk/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;469&quot; height=&quot;264&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 때문에 컴퓨터는 &lt;b&gt;매 프레임&lt;/b&gt;마다 &lt;b&gt;어떤 픽셀&lt;/b&gt;에 &lt;b&gt;어떤 색&lt;/b&gt;을 채워 내보내야&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이용자가 원하는 화면을 나타낼 수 있는지 계산해야 하고,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;개발자는 &lt;b&gt;그런 연산 과정&lt;/b&gt;을 효율적으로 잘 프로그래밍 해줘야 한다.&amp;nbsp;&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 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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하지만 그렇다고 해서 모든 개발자들이&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이런 과정들까지 세세하게 구현해야 할 필요는 없다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이제 막 SpriteRenderer와 RawImage 배치를 만지작거리는 새싹 개발자들에게&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&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;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;순차적인 단계&lt;/b&gt;로 나누어 코드를 미리 작성하고,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;누구나 사용할 수 있도록 &lt;b&gt;모듈화된 라이브러리&lt;/b&gt;로 배포한 케이스가 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예시로는 &lt;b&gt;그래픽 라이브러리&lt;/b&gt; 중 인지도가 가장 높은 &lt;b&gt;OpenGL&lt;/b&gt;, &lt;b&gt;DirectX&lt;/b&gt; 등이 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그렇다면 여기에서 위 그래픽 라이브러리들이 구현해낸 '&lt;b&gt;순차적인 단계&lt;/b&gt;'란 무엇일까?&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;고화질의 2D, 혹은 3D 이미지들을 모니터에 그려내는 것은 &lt;b&gt;CPU&lt;/b&gt; 혼자서 처리할 수 있는 일이 아니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CPU&lt;/b&gt;는 &lt;b&gt;복잡한 연산&lt;/b&gt;도 &lt;b&gt;단시간&lt;/b&gt;에 뚝딱 처리할 수 있는 뛰어난 성능을 가지고 있지만,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;모니터에 &lt;b&gt;방대한 양&lt;/b&gt;의&amp;nbsp;&lt;b&gt;그래픽&lt;/b&gt;을 그려내는 것은 &lt;b&gt;단일 속도&lt;/b&gt;만으로 커버해내기는 어렵기 때문이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c8PAZC/btsDWQlotmA/F4BUxlmHpSteW2XOv5w4A1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8PAZC/btsDWQlotmA/F4BUxlmHpSteW2XOv5w4A1/img.gif&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;180&quot; data-is-animation=&quot;true&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8PAZC/btsDWQlotmA/F4BUxlmHpSteW2XOv5w4A1/img.gif&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8PAZC%2FbtsDWQlotmA%2FF4BUxlmHpSteW2XOv5w4A1%2Fimg.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;320&quot; height=&quot;180&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqtZZ6/btsDZK5wrzo/UvEwxKElcZ9070aT9orx80/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqtZZ6/btsDZK5wrzo/UvEwxKElcZ9070aT9orx80/img.gif&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;225&quot; data-is-animation=&quot;true&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqtZZ6/btsDZK5wrzo/UvEwxKElcZ9070aT9orx80/img.gif&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqtZZ6%2FbtsDZK5wrzo%2FUvEwxKElcZ9070aT9orx80%2Fimg.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;400&quot; height=&quot;225&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;하나의 일을 차근차근 처리하는 CPU와 단순한 일들을 병렬적으로 한 번에 처리하는 GPU&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;b&gt;그래픽 연산&lt;/b&gt;은 &lt;b&gt;계산 과정&lt;/b&gt; 자체는 &lt;b&gt;단순&lt;/b&gt;하지만 그 &lt;b&gt;양&lt;/b&gt;이 &lt;b&gt;어마무시하게 많다&lt;/b&gt;.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그렇기에 &lt;b&gt;복잡한 연산&lt;/b&gt;에 능하더라도 &lt;b&gt;한 번에 많은 연산&lt;/b&gt;을 처리하지 못하는 &lt;b&gt;CPU&lt;/b&gt;보다는,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;간단한 연산&lt;/b&gt;만 가능하더라도 &lt;b&gt;병렬적&lt;/b&gt;으로 &lt;b&gt;한 번에 많은 연산&lt;/b&gt;을 처리할 수 있는 &lt;b&gt;GPU&lt;/b&gt;(그래픽 카드)가 작업에 더 적합하다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하지만 &lt;b&gt;GPU&lt;/b&gt;가 그래픽 관련 &lt;b&gt;모든 연산&lt;/b&gt;을 다 도맡아서 할 수는 없다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;GPU&lt;/b&gt;는 &lt;b&gt;CPU&lt;/b&gt;가 하기엔 양이 많은 연산들을 가져가 대신 해주는 &lt;b&gt;보조자&lt;/b&gt;의 역할일 뿐이므로.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;때문에, &lt;b&gt;CPU&lt;/b&gt;와 &lt;b&gt;GPU&lt;/b&gt;의 &lt;b&gt;분업&lt;/b&gt;이 중요할 것이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;전체에서 &lt;b&gt;누가 어떤 파트&lt;/b&gt;의 연산을 맡을 것인가?&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;연산 결과를 서로에게 &lt;b&gt;어느 시점&lt;/b&gt;에, &lt;b&gt;어떤 방식&lt;/b&gt;으로 &lt;b&gt;전달&lt;/b&gt;할 것인가?&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;또 &lt;b&gt;어떤 단계&lt;/b&gt;의 연산들을 프로그래머가 &lt;b&gt;직접 수정&lt;/b&gt;할 수 있도록 &lt;b&gt;허용&lt;/b&gt;할 것인가?&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이러한 일련의 과정을 미리 정해놓고 &lt;b&gt;하나의 회로&lt;/b&gt;처럼 &lt;b&gt;단계별로 설계&lt;/b&gt;한 것을 &lt;b&gt;Rendering Pipeline&lt;/b&gt;이라고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 OpenGL, DirectX, WebGL등의 &lt;b&gt;유명 그래픽 라이브러리&lt;/b&gt;들은 전부 저마다의 &lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Rendering&lt;/span&gt; Pipeline&lt;/b&gt;을 가지고 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;594&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b37YTQ/btsDW3kwvRK/KT7YKA0kivfEDrQrWQv5Y0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b37YTQ/btsDW3kwvRK/KT7YKA0kivfEDrQrWQv5Y0/img.png&quot; data-alt=&quot;가장 유명한 OpenGL Rendering Pipeline&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b37YTQ/btsDW3kwvRK/KT7YKA0kivfEDrQrWQv5Y0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb37YTQ%2FbtsDW3kwvRK%2FKT7YKA0kivfEDrQrWQv5Y0%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;643&quot; height=&quot;479&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;594&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;가장 유명한 OpenGL Rendering Pipeline&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;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;&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그렇다면 &lt;b&gt;Unity&lt;/b&gt;는 과연 어떤 렌더 파이프라인을 사용할까?&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Unity&lt;/b&gt;가 사용하는 파이프라인에는 크게 다음 세 가지가 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7kZRg/btsD1nPhFCC/SUkDnfva7hyFSdtsKxgKa1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7kZRg/btsD1nPhFCC/SUkDnfva7hyFSdtsKxgKa1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7kZRg/btsD1nPhFCC/SUkDnfva7hyFSdtsKxgKa1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7kZRg%2FbtsD1nPhFCC%2FSUkDnfva7hyFSdtsKxgKa1%2Fimg.jpg&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;688&quot; height=&quot;344&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Built-In Render Pipeline&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Unity&lt;/b&gt;에 &lt;b&gt;기본적으로 내장&lt;/b&gt;되어있는 파이프라인이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 아이템인 만큼 인터넷상에서&amp;nbsp;&lt;b&gt;관련 정보를 찾아보기가 쉽고&lt;/b&gt;,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 여느 타 기능들과 섞여도 잘 작동하는 &lt;b&gt;보편성&lt;/b&gt;을 보장 받으며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Asset Store에서 받아온 &lt;b&gt;에셋&lt;/b&gt;들과도 &lt;b&gt;호환성&lt;/b&gt;이 뛰어나다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그곳에 있는 &lt;b&gt;에셋&lt;/b&gt;들도 전부 기본 Pipeline의 사용을 염두에 두고 제작되었을 것이므로.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 여느 '&lt;b&gt;내장 탑재&lt;/b&gt;'의 이름이 붙은 것들이 그러하듯,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;코드의 수정&lt;/b&gt;이 &lt;b&gt;불가능&lt;/b&gt;하고 사용할 수 있는 &lt;b&gt;기능&lt;/b&gt;들이 &lt;b&gt;제한적&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정확히 말하자면, 개발자가 코드를 직접 작성해 &lt;b&gt;새로운 기능&lt;/b&gt;을 &lt;b&gt;추가&lt;/b&gt;하고 싶어도 &lt;b&gt;추가할 수가 없는 것&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Universal Render Pipeline (URP) (구 LWRP)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 기본 파이프라인에 비해 &lt;b&gt;최적화&lt;/b&gt; 방면에서 더 좋은 모습을 보이는 파이프라인이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Lighting, Shading 등 다양한 부분에서 &lt;b&gt;trade-off&lt;/b&gt;를 진행해,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;제한된 성능&lt;/b&gt;의 플랫폼에서도 &lt;b&gt;고사양 품질&lt;/b&gt;의 그래픽을 뽑아내는 것이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 파이프라인의 개발 목적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 &lt;b&gt;URP&lt;/b&gt;는 &lt;b&gt;Scriptable Render Pipline(SRP)&lt;/b&gt;에 속한 파이프라인이기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;코드 수정&lt;/b&gt;과 &lt;b&gt;기능의 추가&lt;/b&gt;가 비교적 자유로워 &lt;b&gt;높은 확장성&lt;/b&gt;을 가지고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Shading&lt;/b&gt;면에서도 더 &lt;b&gt;다채로운 모습&lt;/b&gt;을 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 &lt;b&gt;SRP&lt;/b&gt;에 포함되는 만큼 &lt;b&gt;코드의 수정&lt;/b&gt;이 많아질수록&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Asset Store에 있는 &lt;b&gt;에셋&lt;/b&gt;들과 &lt;b&gt;호환이 되지 않을 가능성&lt;/b&gt;이 높아진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;High&amp;nbsp;Definition&amp;nbsp;Render&amp;nbsp;Pipeline&amp;nbsp;(HDRP)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;URP&lt;/b&gt;가 플랫폼의 성능 편차에 구애받지 않는 &lt;b&gt;최적화&lt;/b&gt;를 추구했다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;HDRP&lt;/b&gt;가 추구하는 것은 오로지&amp;nbsp;&lt;b&gt;최상의 퀄리티&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고성능 PC, 콘솔 등 &lt;b&gt;하이 엔드 급&lt;/b&gt;의 &lt;b&gt;플랫폼&lt;/b&gt;들을 타겟으로 할 때 주로 사용되며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Real-Time으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;b&gt;최고 품질&lt;/b&gt;의 &lt;b&gt;Lighting&lt;/b&gt;, &lt;b&gt;Shading&lt;/b&gt; 등을 표현해내는데 용이하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마찬가지로 &lt;b&gt;SRP&lt;/b&gt;에 속해있는 파이프라인으로, &lt;b&gt;코드 수정&lt;/b&gt;과 &lt;b&gt;기능 추가&lt;/b&gt;가 자유롭다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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 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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Unity 파이프라인의 종류들을 알아봤으니,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이제 실제로 그것들이 &lt;b&gt;어떤 과정&lt;/b&gt;을 거쳐 화면에 그림을 그려내는지 알아볼 때가 되었다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Built-In Render Pipeline&lt;/b&gt;의 &lt;b&gt;Forward Rendering Path&lt;/b&gt; (가장 일반적인 &lt;a href=&quot;https://docs.unity3d.com/kr/current/Manual/RenderingPaths.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;렌더링 경로&lt;/a&gt;)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;를 택했을 때의 경우를 기준으로 준비했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bw6HCo/btsDW9yeFnJ/ktbyA0rwyJd9Pofsdcm9R0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bw6HCo/btsDW9yeFnJ/ktbyA0rwyJd9Pofsdcm9R0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bw6HCo/btsDW9yeFnJ/ktbyA0rwyJd9Pofsdcm9R0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbw6HCo%2FbtsDW9yeFnJ%2FktbyA0rwyJd9Pofsdcm9R0%2Fimg.jpg&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;289&quot; height=&quot;289&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&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;h4 data-ke-size=&quot;size20&quot;&gt;0. Pipeline Overview&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bl4kMs/btsD4vzJ0DS/JVbLnB0XFpl11RrY1wbvrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bl4kMs/btsD4vzJ0DS/JVbLnB0XFpl11RrY1wbvrk/img.png&quot; data-alt=&quot;Unity Built-In Render Pipeline Overview&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bl4kMs/btsD4vzJ0DS/JVbLnB0XFpl11RrY1wbvrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbl4kMs%2FbtsD4vzJ0DS%2FJVbLnB0XFpl11RrY1wbvrk%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;1920&quot; height=&quot;1080&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Unity Built-In Render Pipeline Overview&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. Input Assembler (Vertex Specification)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;414&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfTLeS/btsD2INzuHb/MJZIBZCprCzdlKus35DT2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfTLeS/btsD2INzuHb/MJZIBZCprCzdlKus35DT2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfTLeS/btsD2INzuHb/MJZIBZCprCzdlKus35DT2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfTLeS%2FbtsD2INzuHb%2FMJZIBZCprCzdlKus35DT2k%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;455&quot; height=&quot;197&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;414&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래픽 상에서 나타나는 모든 물체들은 &lt;b&gt;폴리곤&lt;/b&gt;이라는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조그마한 &lt;b&gt;삼각형&lt;/b&gt;들로 이루어져 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;곡면&lt;/b&gt;을 있는 그대로 계산해 묘사하기보다는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;무수히 많은 평면&lt;/b&gt;으로 나누어 묘사하는 편이 더 &lt;b&gt;효율적&lt;/b&gt;이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러한 &lt;b&gt;평면&lt;/b&gt;을 이루는 최소 조건이 &lt;b&gt;세 개의 점&lt;/b&gt;, 즉 &lt;b&gt;삼각형&lt;/b&gt;이기 때문.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때문에 이 폴리곤을 만들기 위해서는 각 폴리곤의 꼭짓점(= &lt;b&gt;정점&lt;/b&gt;)들이 3개씩 필요하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;725&quot; data-origin-height=&quot;449&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZ9SQL/btsDZ4qjRRv/xXTC3XAxOOM38fVApBunLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZ9SQL/btsDZ4qjRRv/xXTC3XAxOOM38fVApBunLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZ9SQL/btsDZ4qjRRv/xXTC3XAxOOM38fVApBunLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZ9SQL%2FbtsDZ4qjRRv%2FxXTC3XAxOOM38fVApBunLK%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;484&quot; height=&quot;300&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;725&quot; data-origin-height=&quot;449&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Input Assembler&lt;/b&gt; 단계에서 &lt;b&gt;CPU&lt;/b&gt;가 &lt;b&gt;GPU&lt;/b&gt;에게 &lt;b&gt;정점&lt;/b&gt;들의 정보를 전달한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;삼각형&lt;/b&gt;을 만들고 싶다면 삼각형의 &lt;b&gt;꼭짓점 세 개&lt;/b&gt;를,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사각형&lt;/b&gt;을 만들고 싶다면 삼각형 두 개의 &lt;b&gt;꼭짓점 여섯 개&lt;/b&gt;를 전달한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. Vertex Shader&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1235&quot; data-origin-height=&quot;648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2tuWC/btsD3ds2Ryy/SwxT1ajbxrCmnKZVkPJRQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2tuWC/btsD3ds2Ryy/SwxT1ajbxrCmnKZVkPJRQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2tuWC/btsD3ds2Ryy/SwxT1ajbxrCmnKZVkPJRQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2tuWC%2FbtsD3ds2Ryy%2FSwxT1ajbxrCmnKZVkPJRQk%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;645&quot; height=&quot;338&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1235&quot; data-origin-height=&quot;648&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CPU&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의자의 위치를 (209동 1305호, 안방, 컴퓨터 책상 앞)으로 계산할 수는 없지 않은가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위도, 경도, 고도를 다 따져 범지구적인 스케일의 &lt;b&gt;정확하고 범용성 있는 수치&lt;/b&gt;로 나타내야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정을 &lt;b&gt;Modeling Coordinates&lt;/b&gt;를 &lt;b&gt;World Coordinates&lt;/b&gt;로 변환해주는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Model Transform&lt;/b&gt; (= Local Transform)이라고 한다.&lt;/p&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;GPU&lt;/b&gt;가 &lt;b&gt;공간 좌표계&lt;/b&gt;를 여러 단계 &lt;b&gt;변환&lt;/b&gt;해주는 동시에,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자가 원한다면 &lt;b&gt;Gouraud Shading&lt;/b&gt;이라 불리는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다소 원시적인 기법의 Lighting도 적용해줄 수 있는 단계이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;200&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MH0N7/btsD3eyJYwn/QRZFzWXlPXBUKJ0kuK1fvk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MH0N7/btsD3eyJYwn/QRZFzWXlPXBUKJ0kuK1fvk/img.jpg&quot; data-alt=&quot;Gouraud Shading: 정점 단위로 빛의 반사가 계산되는 만큼 반사광 모양이 어색하고 뾰족하게 표현된다. 옛날 3D 게임에서 자주 찾아볼 수 있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MH0N7/btsD3eyJYwn/QRZFzWXlPXBUKJ0kuK1fvk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMH0N7%2FbtsD3eyJYwn%2FQRZFzWXlPXBUKJ0kuK1fvk%2Fimg.jpg&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;329&quot; height=&quot;329&quot; data-origin-width=&quot;200&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Gouraud Shading: 정점 단위로 빛의 반사가 계산되는 만큼 반사광 모양이 어색하고 뾰족하게 표현된다. 옛날 3D 게임에서 자주 찾아볼 수 있다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. Tesselator&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가까이 있는 물체는 멀리 있는 물체에 비해 &lt;b&gt;폴리곤&lt;/b&gt;이 &lt;b&gt;더 밀도있게&lt;/b&gt; 짜여질 필요가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;폴리곤이 부족하다&lt;/b&gt;는 것은 곧 &lt;b&gt;해상도가 떨어진다&lt;/b&gt;는 것이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가까이서 볼수록 티가 나는 것은 당연하기 때문이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;437&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LIgoe/btsD2I7WHUj/tbeCsepdtq7lUkiPfwndk0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LIgoe/btsD2I7WHUj/tbeCsepdtq7lUkiPfwndk0/img.jpg&quot; data-alt=&quot;얘는 폴리곤이 부족한게 아니라 초점이 안맞은 거긴 하지만&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LIgoe/btsD2I7WHUj/tbeCsepdtq7lUkiPfwndk0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLIgoe%2FbtsD2I7WHUj%2FtbeCsepdtq7lUkiPfwndk0%2Fimg.jpg&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;300&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;437&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;얘는 폴리곤이 부족한게 아니라 초점이 안맞은 거긴 하지만&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Tesselator&lt;/b&gt;라는 이름에서 알 수 있듯이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빈 공간에 &lt;b&gt;타일&lt;/b&gt;을 채우듯 &lt;b&gt;기존 모델의 정점&lt;/b&gt;을 &lt;b&gt;쪼개어&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폴리곤 사이 사이 빈&amp;nbsp;공간에 새로운 폴리곤들을 추가해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;근거리&lt;/b&gt;에서는 &lt;b&gt;더 높은 해상도&lt;/b&gt;를 얻을 수 있게끔 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. Geometry Shader&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;880&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brwBFa/btsD1cBxKvo/RorNIyrtuTnub2h8ahoIG0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brwBFa/btsD1cBxKvo/RorNIyrtuTnub2h8ahoIG0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brwBFa/btsD1cBxKvo/RorNIyrtuTnub2h8ahoIG0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrwBFa%2FbtsD1cBxKvo%2FRorNIyrtuTnub2h8ahoIG0%2Fimg.jpg&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;223&quot; height=&quot;297&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;880&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Tesselator&lt;/b&gt;에서 전달받은 새로운 정점들에 더해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 모델의 &lt;b&gt;정점&lt;/b&gt;을 &lt;b&gt;추가/삭제/수정&lt;/b&gt;할 수 있는 단계이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수정 단계가 끝나면 &lt;b&gt;해당 정점들&lt;/b&gt;이 이루는 &lt;b&gt;폴리곤&lt;/b&gt;을 &lt;b&gt;추가로 생성&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. Rasterizer&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Rasterizer&lt;/b&gt;의 역할은 다양하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Unhinging Transformation&lt;/b&gt;을 통해 &lt;b&gt;원근감&lt;/b&gt;을 부여하고,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;544&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLwEyF/btsDZ3kKdPR/QUnqPVdteyPFChZPw78ZYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLwEyF/btsDZ3kKdPR/QUnqPVdteyPFChZPw78ZYK/img.png&quot; data-alt=&quot;기존 사각뿔 형태의 시야각을 직육면체 형태로 확장해 가까운 물체를 크게 키워 원근감을 부여한다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLwEyF/btsDZ3kKdPR/QUnqPVdteyPFChZPw78ZYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLwEyF%2FbtsDZ3kKdPR%2FQUnqPVdteyPFChZPw78ZYK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;317&quot; height=&quot;263&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;544&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;기존 사각뿔 형태의 시야각을 직육면체 형태로 확장해 가까운 물체를 크게 키워 원근감을 부여한다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;정점&lt;/b&gt;과 &lt;b&gt;정점&lt;/b&gt; 사이, &lt;b&gt;폴리곤 내부&lt;/b&gt;의 빈 공간들을 &lt;b&gt;보간&lt;/b&gt;을 통해 &lt;b&gt;픽셀&lt;/b&gt;로 채운다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;200&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bx95kK/btsDZWst2zG/WlGXb8UCCb2o1E1vnszh71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bx95kK/btsDZWst2zG/WlGXb8UCCb2o1E1vnszh71/img.png&quot; data-alt=&quot;정육면체의 각 꼭짓점(정점)들을 서로 다른 색깔로 설정해두면, 보간으로 인해 폴리곤 내부에는 무지개빛 그라데이션의 픽셀들이 생성된다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bx95kK/btsDZWst2zG/WlGXb8UCCb2o1E1vnszh71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbx95kK%2FbtsDZWst2zG%2FWlGXb8UCCb2o1E1vnszh71%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;294&quot; height=&quot;294&quot; data-origin-width=&quot;200&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;정육면체의 각 꼭짓점(정점)들을 서로 다른 색깔로 설정해두면, 보간으로 인해 폴리곤 내부에는 무지개빛 그라데이션의 픽셀들이 생성된다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 &lt;b&gt;카메라 시야&lt;/b&gt;에 들어오지 않는 픽셀들은 &lt;b&gt;가차 없이 잘라낸다&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;218&quot; data-origin-height=&quot;124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHCrE1/btsD0ELSs84/PtvfCF33ng8EYqdLINlyCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHCrE1/btsD0ELSs84/PtvfCF33ng8EYqdLINlyCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHCrE1/btsD0ELSs84/PtvfCF33ng8EYqdLINlyCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHCrE1%2FbtsD0ELSs84%2FPtvfCF33ng8EYqdLINlyCk%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;218&quot; height=&quot;124&quot; data-origin-width=&quot;218&quot; data-origin-height=&quot;124&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;h4 data-ke-size=&quot;size20&quot;&gt;6. Depth Test&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Rasterizer&lt;/b&gt; 이후 픽셀들을 바로 렌더링하게 되면&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;폴리곤&lt;/b&gt;들이 &lt;b&gt;처리되는 순서&lt;/b&gt;가 &lt;b&gt;실제로 카메라에 보이게 되는 순서&lt;/b&gt;와 &lt;b&gt;무관&lt;/b&gt;하기 때문에&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;카메라 기준으로 더 &lt;b&gt;뒤에 있는 폴리곤&lt;/b&gt;이&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그 &lt;b&gt;앞에 있는 폴리곤&lt;/b&gt;을 &lt;b&gt;뚫고 나오거나&lt;/b&gt;, 역으로 &lt;b&gt;가리는 상황&lt;/b&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;816&quot; data-origin-height=&quot;839&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFmNc2/btsD4kym05j/QNMGspRMEsBxWtk6oZ7k80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFmNc2/btsD4kym05j/QNMGspRMEsBxWtk6oZ7k80/img.png&quot; data-alt=&quot;폴리곤 처리 순서 차이로 큐브의 아랫면이 사라진 것처럼 보인다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFmNc2/btsD4kym05j/QNMGspRMEsBxWtk6oZ7k80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFmNc2%2FbtsD4kym05j%2FQNMGspRMEsBxWtk6oZ7k80%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;373&quot; height=&quot;384&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;839&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;폴리곤 처리 순서 차이로 큐브의 아랫면이 사라진 것처럼 보인다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때문에 &lt;b&gt;Depth Test&lt;/b&gt;에서 각 픽셀들의 &lt;b&gt;깊이값&lt;/b&gt;(카메라로부터의 거리, Z값)을 계산/결정하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Z-Buffer&lt;/b&gt;에 저장하는 과정을 거친다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알고리즘 특성상 &lt;b&gt;Z-Buffer&lt;/b&gt;에 저장된 결과값은 각 &lt;b&gt;폴리곤의 처리 순서&lt;/b&gt;와 무관하게 항상 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brDbNQ/btsDZFEx6oG/UimSQTKgUMGivkeBWBmEKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brDbNQ/btsDZFEx6oG/UimSQTKgUMGivkeBWBmEKk/img.png&quot; data-origin-width=&quot;1082&quot; data-origin-height=&quot;542&quot; data-is-animation=&quot;false&quot; style=&quot;width: 55.7051%; margin-right: 10px;&quot; data-widthpercent=&quot;56.36&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brDbNQ/btsDZFEx6oG/UimSQTKgUMGivkeBWBmEKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrDbNQ%2FbtsDZFEx6oG%2FUimSQTKgUMGivkeBWBmEKk%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;1082&quot; height=&quot;542&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cupcu6/btsD3er13Py/JbKKgdBocRhi7ScHbH2011/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cupcu6/btsD3er13Py/JbKKgdBocRhi7ScHbH2011/img.png&quot; data-origin-width=&quot;1014&quot; data-origin-height=&quot;656&quot; data-is-animation=&quot;false&quot; style=&quot;width: 43.1321%;&quot; data-widthpercent=&quot;43.64&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cupcu6/btsD3er13Py/JbKKgdBocRhi7ScHbH2011/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcupcu6%2FbtsD3er13Py%2FJbKKgdBocRhi7ScHbH2011%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;1014&quot; height=&quot;656&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. Stencil Test&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmsinx/btsD08MJ36T/2e907cBCejttpxzbBVk67k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmsinx/btsD08MJ36T/2e907cBCejttpxzbBVk67k/img.jpg&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;600&quot; data-is-animation=&quot;false&quot; width=&quot;281&quot; height=&quot;281&quot; style=&quot;width: 40.4524%; margin-right: 10px;&quot; data-widthpercent=&quot;40.93&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmsinx/btsD08MJ36T/2e907cBCejttpxzbBVk67k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbmsinx%2FbtsD08MJ36T%2F2e907cBCejttpxzbBVk67k%2Fimg.jpg&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;600&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s2prs/btsD3MPl1XQ/GImcAdDqh7kdzIdlWAPRh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s2prs/btsD3MPl1XQ/GImcAdDqh7kdzIdlWAPRh0/img.png&quot; data-origin-width=&quot;280&quot; data-origin-height=&quot;194&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; style=&quot;width: 58.3848%;&quot; data-widthpercent=&quot;59.07&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s2prs/btsD3MPl1XQ/GImcAdDqh7kdzIdlWAPRh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs2prs%2FbtsD3MPl1XQ%2FGImcAdDqh7kdzIdlWAPRh0%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;280&quot; height=&quot;194&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Depth Test&lt;/b&gt;가 픽셀에 의해 가려지는 다른 픽셀, 물체의 뒷면 등이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면에 나타나지 않도록 &lt;b&gt;Z-Buffer&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;b&gt;Stencil Test&lt;/b&gt;는 픽셀의 깊이(거리)와 무관하게&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;어떤 부분&lt;/b&gt;을 보이게 하고, &lt;b&gt;어떤 부분&lt;/b&gt;을 안보이게 할지를 개발자가 &lt;b&gt;직접&lt;/b&gt;&amp;nbsp;설정하는 단계이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마찬가지로 &lt;b&gt;Stencil Buffer&lt;/b&gt;에 &lt;b&gt;픽셀의 렌더링 유무&lt;/b&gt; 정보를 넣는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;선택적&lt;/b&gt;으로 &lt;b&gt;렌더링 되지 않을 곳&lt;/b&gt;을 정해주는 기능이기 때문에,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그림자, 거울, 외곽선 표현 등 다양한 곳에서 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;8. Fragment Shader (= Pixel Shader)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhZezw/btsD4F99g1c/ZEoHm2LzhfVXo4RiIK7imK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhZezw/btsD4F99g1c/ZEoHm2LzhfVXo4RiIK7imK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhZezw/btsD4F99g1c/ZEoHm2LzhfVXo4RiIK7imK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhZezw%2FbtsD4F99g1c%2FZEoHm2LzhfVXo4RiIK7imK%2Fimg.jpg&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;354&quot; height=&quot;354&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;렌더링의 꽃&lt;/b&gt;이라고 할 수 있는 &lt;b&gt;Fragment Shader&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폴리곤의 픽셀들에 &lt;b&gt;색을 칠하고&lt;/b&gt;,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Height Map, Bump Map, Normal Map 등 &lt;b&gt;다양한 기법&lt;/b&gt;의 &lt;b&gt;Texture&lt;/b&gt;를 적용한 뒤,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;정점들&lt;/b&gt;과 &lt;b&gt;폴리곤의 법선 벡터&lt;/b&gt;를 이용해 각종 &lt;b&gt;Lighting 효과&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;사람의 눈으로 보았을 때 화려하다고 느껴지는 부분의 최소 70% 이상이 구현되는 곳이며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;컴퓨터 그래픽 기술&lt;/b&gt;의 발전이 &lt;b&gt;가장 크게 체감&lt;/b&gt;되는 단계이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;9. Output Merger&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;626&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RDoQS/btsD1a4Vu3O/AtKykPhKPJnqlwLHKKTaHK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RDoQS/btsD1a4Vu3O/AtKykPhKPJnqlwLHKKTaHK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RDoQS/btsD1a4Vu3O/AtKykPhKPJnqlwLHKKTaHK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRDoQS%2FbtsD1a4Vu3O%2FAtKykPhKPJnqlwLHKKTaHK%2Fimg.jpg&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;361&quot; height=&quot;361&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;626&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Fragment Shader&lt;/b&gt; 이후 화면에 나타나기 전에 거치는,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실상 렌더링에서의 &lt;b&gt;마지막 단계&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Depth Test/Stencil Test&lt;/b&gt;에서 얻어낸 &lt;b&gt;Z-Buffer/Stencil Buffer&lt;/b&gt;를 이용해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 픽셀을 나타내고 어떤 픽셀을 숨길지 계산하며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;색과 색이 섞일 때의&amp;nbsp;&lt;b&gt;Blending 기법&lt;/b&gt;을 적용하고, (예: Alpha Blending)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;픽셀과 픽셀의 경계를 흐릿하게 해주는 &lt;b&gt;Anti-Aliasing&lt;/b&gt;를 통해 &lt;b&gt;계단 현상을 방지&lt;/b&gt;하는 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모니터에 보이기 전 &lt;b&gt;최종 마무리 단계&lt;/b&gt;를 거친다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;10. Post Processing&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1040&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lf4Gh/btsD3J6nEMP/F6yMl0nbphxnz1YDDsOCv0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lf4Gh/btsD3J6nEMP/F6yMl0nbphxnz1YDDsOCv0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lf4Gh/btsD3J6nEMP/F6yMl0nbphxnz1YDDsOCv0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/lf4Gh/btsD3J6nEMP/F6yMl0nbphxnz1YDDsOCv0/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;491&quot; height=&quot;283&quot; data-origin-width=&quot;1040&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Post Processing&lt;/b&gt;은 1~9의 렌더링 단계를 거치고 난 뒤&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필요에 따라 &lt;b&gt;한 번 더&lt;/b&gt; 렌더링 과정을 더하는 작업이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블러 효과, 렌즈 효과 (빛 번짐), 화면 왜곡, 흑백/색조 변환 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞의 과정들에 더하여 &lt;b&gt;비주얼적으로 한 층 더 발전한 결과물&lt;/b&gt;들을 얻어낼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;&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;b&gt;Unity Render Pipeline&lt;/b&gt;의 일반적인 작동 과정을 살펴보았다.&lt;br /&gt;라고 써놓기는 했지만, 사실 &lt;b&gt;OpenGL&lt;/b&gt;이니 &lt;b&gt;DirectX&lt;/b&gt;이니 대부분 것들의 Pipeline이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이와 비슷한 과정을 취하고 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필자도 찾아보면서 그렇게 느끼기도 했고.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 게임, 영화, 혹은 애니메이션에서 별 생각 없이 봤던 장면들이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로는 이렇게 까다로운 과정을 거쳐 화면에 나타난 거였다니...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래도 알고는 있었지만 파면 팔수록 &lt;b&gt;세상 일 돌아가는거 진짜 복잡하구나&lt;/b&gt; 하는 생각이 들었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;i13497425654.gif&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;308&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qlZLR/btsDZHvCAOH/vmbdilu2gNzsv7k3vRnNX1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qlZLR/btsDZHvCAOH/vmbdilu2gNzsv7k3vRnNX1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qlZLR/btsDZHvCAOH/vmbdilu2gNzsv7k3vRnNX1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/qlZLR/btsDZHvCAOH/vmbdilu2gNzsv7k3vRnNX1/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;640&quot; height=&quot;308&quot; data-filename=&quot;i13497425654.gif&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;308&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;/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;style3&quot; /&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;a href=&quot;https://kjunwoo23.tistory.com/2&quot;&gt;0주차: 인트로 - 새롭고 신기한 것을 좋아하거나, 모르는 것을 알고 싶어 하는 마음&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/3&quot;&gt;1주차: Unity 엔진은 왜 개발 언어로 C#을 선택했을까?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/4&quot;&gt;2주차: 의외로&amp;nbsp;세상&amp;nbsp;잡다한&amp;nbsp;Transform에&amp;nbsp;대한&amp;nbsp;모든&amp;nbsp;것&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/5&quot;&gt;3주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (1/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/6&quot;&gt;4주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (2/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/7&quot;&gt;5주차: 헐크&amp;nbsp;아저씨도&amp;nbsp;깜짝&amp;nbsp;놀란&amp;nbsp;Unity&amp;nbsp;Render&amp;nbsp;Pipeline이&amp;nbsp;작동하는&amp;nbsp;과정&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/8&quot;&gt;6주차: 매 프레임 나보다 갓생 사는 Unity의 Life Cycle&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/9&quot;&gt;7주차: 남들보다 더 갓생 사는 Coroutine의 충격적인 정체&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/10&quot;&gt;8주차: 야물(YAML)딱진 그 녀석의 은밀한 속마음 - Unity Scene 파일 (.unity)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/11&quot;&gt;9주차: 내&amp;nbsp;과자&amp;nbsp;포장지&amp;nbsp;누가&amp;nbsp;버렸어?&amp;nbsp;-&amp;nbsp;meta&amp;nbsp;data&amp;nbsp;파일&amp;nbsp;(.meta)&amp;nbsp;파헤치기&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/12&quot;&gt;10주차: 철가방 채로 배달온 Unity 빌드 파일. 난 단무지 시킨 적 없는데, 왜 있지?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/13&quot;&gt;11주차: 마무리 - 후기&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>내 맘대로 쓰는 Unity 심층분석 析深層分</category>
      <author>원펀치 쓰리 갓냥이</author>
      <guid isPermaLink="true">https://kjunwoo23.tistory.com/7</guid>
      <comments>https://kjunwoo23.tistory.com/7#entry7comment</comments>
      <pubDate>Sat, 27 Jan 2024 06:59:28 +0900</pubDate>
    </item>
    <item>
      <title>4주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (2/2)</title>
      <link>https://kjunwoo23.tistory.com/6</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/2&quot;&gt;0주차: 인트로 - 새롭고 신기한 것을 좋아하거나, 모르는 것을 알고 싶어 하는 마음&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/3&quot;&gt;1주차: Unity 엔진은 왜 개발 언어로 C#을 선택했을까?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/4&quot;&gt;2주차: 의외로&amp;nbsp;세상&amp;nbsp;잡다한&amp;nbsp;Transform에&amp;nbsp;대한&amp;nbsp;모든&amp;nbsp;것&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/5&quot;&gt;3주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (1/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/6&quot;&gt;4주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (2/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/7&quot;&gt;5주차: 헐크&amp;nbsp;아저씨도&amp;nbsp;깜짝&amp;nbsp;놀란&amp;nbsp;Unity&amp;nbsp;Render&amp;nbsp;Pipeline이&amp;nbsp;작동하는&amp;nbsp;과정&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/8&quot;&gt;6주차: 매 프레임 나보다 갓생 사는 Unity의 Life Cycle&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/9&quot;&gt;7주차: 남들보다 더 갓생 사는 Coroutine의 충격적인 정체&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/10&quot;&gt;8주차: 야물(YAML)딱진 그 녀석의 은밀한 속마음 - Unity Scene 파일 (.unity)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/11&quot;&gt;9주차: 내&amp;nbsp;과자&amp;nbsp;포장지&amp;nbsp;누가&amp;nbsp;버렸어?&amp;nbsp;-&amp;nbsp;meta&amp;nbsp;data&amp;nbsp;파일&amp;nbsp;(.meta)&amp;nbsp;파헤치기&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/12&quot;&gt;10주차: 철가방 채로 배달온 Unity 빌드 파일. 난 단무지 시킨 적 없는데, 왜 있지?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/13&quot;&gt;11주차: 마무리 - 후기&lt;/a&gt;&lt;/blockquote&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;style3&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;사실 물체의 회전을 표현하는 방식에&amp;nbsp;&lt;b&gt;오일러 각&lt;/b&gt;만 존재하는 것은 아니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wCEia/btsDD3qh68a/xFhRacLH93WlyjEszyBwnk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wCEia/btsDD3qh68a/xFhRacLH93WlyjEszyBwnk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wCEia/btsDD3qh68a/xFhRacLH93WlyjEszyBwnk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/wCEia/btsDD3qh68a/xFhRacLH93WlyjEszyBwnk/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;500&quot; height=&quot;270&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 &lt;b&gt;3개&lt;/b&gt;의 &lt;b&gt;실수&lt;/b&gt;로 구성되어있던 &lt;b&gt;오일러 각&lt;/b&gt;과 달리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1개&lt;/b&gt;의 &lt;b&gt;실수&lt;/b&gt;, &lt;b&gt;3개&lt;/b&gt;의 &lt;b&gt;허수&lt;/b&gt; 부분으로 구성된 &lt;b&gt;사원수(Quaternion)&lt;/b&gt;라는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 수 체계로 &lt;b&gt;3차원 회전&lt;/b&gt;을 표현할 수 있다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;복소수: &lt;i&gt;a + bi&lt;/i&gt;&lt;br /&gt;사원수: &lt;i&gt;a + bi + cj + dk&lt;br /&gt;&lt;/i&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;&lt;b&gt;실수&lt;/b&gt;만으로는 전부 나타낼 수 없는 부분을 &lt;b&gt;허수&lt;/b&gt;의 힘을 빌려 나타낸다는 점에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;복소수&lt;/b&gt;와 &lt;b&gt;사원수&lt;/b&gt;가 다소 비슷해 보일 수 있으나,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;몇 가지 공통점과 차이점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공통점은 위 수식에서도 볼 수 있듯이 &lt;b&gt;새로운 허수 단위&lt;/b&gt;를 사용한다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;복소수&lt;/b&gt;의 경우 &lt;b&gt;i&lt;/b&gt;, &lt;b&gt;사원수&lt;/b&gt;의 경우 &lt;b&gt;i, j, k&lt;/b&gt;를 활용하며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 경우의 허수들 모두 &lt;b&gt;제곱할 경우 -1&lt;/b&gt;이 된다는 특징이 있다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;복소수: &lt;i&gt;i&lt;/i&gt;&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;sup2; = -1&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;사원수: &lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;i&amp;sup2; = j&amp;sup2; = k&amp;sup2; = -1&lt;/span&gt;&lt;/i&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;위 식만을 볼 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;i, j, k의 제곱값이 같다면, 그럼 결국 모두 다 같은 값인 것 아닌가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;할 수 있겠지만, &lt;b&gt;사원수&lt;/b&gt;의 경우 다음 한 가지 규칙이 추가된다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;ijk = -1&lt;/span&gt;&lt;/i&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;때문에 만일 &lt;i&gt;i = j = k&lt;/i&gt;을 만족할&amp;nbsp; 경우 &lt;i&gt;i&amp;sup3; = -1&lt;/i&gt;이 성립됨으로 인해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;i&amp;sup2; = &lt;i&gt;j&amp;sup2; =&lt;/i&gt; k&lt;i&gt;&amp;sup2; =&lt;/i&gt; -1&lt;/i&gt;의 공식이 깨져버리기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;i, j, k는 모두 다른 허수 값&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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOQ13q/btsDAkApJS2/GzksHurMWMRGFN8eusmdt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOQ13q/btsDAkApJS2/GzksHurMWMRGFN8eusmdt1/img.png&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;536&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; data-widthpercent=&quot;49.39&quot; style=&quot;width: 48.8144%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOQ13q/btsDAkApJS2/GzksHurMWMRGFN8eusmdt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOQ13q%2FbtsDAkApJS2%2FGzksHurMWMRGFN8eusmdt1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;816&quot; height=&quot;536&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNWMMu/btsDA9SEPeI/XhyyeKJZ37b4UGWqOe0Ju0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNWMMu/btsDA9SEPeI/XhyyeKJZ37b4UGWqOe0Ju0/img.png&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;541&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; style=&quot;width: 50.0228%;&quot; data-widthpercent=&quot;50.61&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNWMMu/btsDA9SEPeI/XhyyeKJZ37b4UGWqOe0Ju0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNWMMu%2FbtsDA9SEPeI%2FXhyyeKJZ37b4UGWqOe0Ju0%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;844&quot; height=&quot;541&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;실수 xy 좌표계(그림1)에 z 단위를 추가해 xyz 좌표계(그림2)를 만든 것처럼,&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGvbz3/btsDERC9URs/R4j4H37unMyX0kCfsjkfEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGvbz3/btsDERC9URs/R4j4H37unMyX0kCfsjkfEk/img.png&quot; data-origin-width=&quot;847&quot; data-origin-height=&quot;522&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; data-widthpercent=&quot;50.12&quot; style=&quot;width: 49.5332%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGvbz3/btsDERC9URs/R4j4H37unMyX0kCfsjkfEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGvbz3%2FbtsDERC9URs%2FR4j4H37unMyX0kCfsjkfEk%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;847&quot; height=&quot;522&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFVZLO/btsDxV17evS/PxqZMsEMGKy7mBD5K09g6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFVZLO/btsDxV17evS/PxqZMsEMGKy7mBD5K09g6K/img.png&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;530&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; data-widthpercent=&quot;49.88&quot; style=&quot;width: 49.304%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFVZLO/btsDxV17evS/PxqZMsEMGKy7mBD5K09g6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFVZLO%2FbtsDxV17evS%2FPxqZMsEMGKy7mBD5K09g6K%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;856&quot; height=&quot;530&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;허수 i 복소수 체계(그림3)에 jk 단위를 더해 허수 ijk 사원수 체계(그림4)가 만들어진 것.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;xy 좌표계에서 x와 y가 아예 다른 단위인 것처럼,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;i, j, k&lt;/b&gt; 역시 &lt;b&gt;서로 아예 다른 단위&lt;/b&gt;인 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어째서 시작부터 i, j, k가 서로 다른 단위임을 이토록 강조하는 것일까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아예 다르다라는 것은 &lt;b&gt;독립적&lt;/b&gt;이라는 의미고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그것은 곧 서로에 대해서 &lt;b&gt;종속적이지 않다&lt;/b&gt;는 것이기 때문이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;611&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SoZli/btsDzxfIjX4/jOJpAjDlP4s2iBxW88W0zK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SoZli/btsDzxfIjX4/jOJpAjDlP4s2iBxW88W0zK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SoZli/btsDzxfIjX4/jOJpAjDlP4s2iBxW88W0zK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSoZli%2FbtsDzxfIjX4%2FjOJpAjDlP4s2iBxW88W0zK%2Fimg.jpg&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;203&quot; height=&quot;138&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;611&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;200&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HajZG/btsDAsrmJjM/vJkRJbBdcgkqKUlSWWK7C1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HajZG/btsDAsrmJjM/vJkRJbBdcgkqKUlSWWK7C1/img.gif&quot; data-alt=&quot;회전축이 서로 종속되어있기에 문제가 발생했던 그 무언가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HajZG/btsDAsrmJjM/vJkRJbBdcgkqKUlSWWK7C1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/HajZG/btsDAsrmJjM/vJkRJbBdcgkqKUlSWWK7C1/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;182&quot; height=&quot;182&quot; data-origin-width=&quot;200&quot; data-origin-height=&quot;200&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;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;h3 data-ke-size=&quot;size23&quot;&gt;4차원 좌표로 회전을 표현? 어떻게?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3차원 물체의 회전&lt;/b&gt;을 &lt;b&gt;4차원 좌표&lt;/b&gt;로 표현한다는 것은 조금 낯설어보일 수도 있겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이는 이미 기존의 &lt;b&gt;2차원 좌표계&lt;/b&gt;에서도 이미 잘 쓰이고 있었다.&lt;/p&gt;
&lt;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-filename=&quot;blob&quot; data-origin-width=&quot;953&quot; data-origin-height=&quot;780&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kYnfE/btsDA264vCC/XMetowSHMHZoMk8CO7C0oK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kYnfE/btsDA264vCC/XMetowSHMHZoMk8CO7C0oK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kYnfE/btsDA264vCC/XMetowSHMHZoMk8CO7C0oK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkYnfE%2FbtsDA264vCC%2FXMetowSHMHZoMk8CO7C0oK%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;410&quot; height=&quot;336&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;953&quot; data-origin-height=&quot;780&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 &lt;b&gt;복소수 평면&lt;/b&gt;에 원을 그리고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원 위에서 임의의 점 P를 회전시킨다고 해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;점 P가 초기에 R축 위 1 지점에 있다고 할 때,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;점을 반시계 방향으로 &lt;b&gt;90도 회전&lt;/b&gt;시키고 싶다면 P의 좌표에 &lt;b&gt;i를 곱하면&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;점 P에 &lt;b&gt;i&lt;/b&gt;를 곱해 &lt;b&gt;90도 회전&lt;/b&gt;시키면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1&lt;/b&gt;에서 &lt;b&gt;i&lt;/b&gt;로, &lt;b&gt;i&lt;/b&gt;에서 &lt;b&gt;-1&lt;/b&gt;로, &lt;b&gt;-1&lt;/b&gt;에서 &lt;b&gt;-i&lt;/b&gt;로, 그리고 다시 &lt;b&gt;1&lt;/b&gt;로 돌아오는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 회전을 복소수 좌표계로 나타내면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;물체의 회전&lt;/b&gt;을 &lt;b&gt;곱셈&lt;/b&gt;으로 나타낼 수 있다는 &lt;b&gt;큰 메리트&lt;/b&gt;가 생기게 된다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;회전을 곱셈으로 나타내는게 왜 메리트?&lt;/b&gt;&lt;br /&gt;2주차에서 다뤘던 것처럼 &lt;b&gt;Transform&lt;/b&gt;에서 위치 이동, 크기 조정, 좌표계 변환 등의 작업을 할 때&lt;br /&gt;기존 행렬에 &lt;b&gt;변환행렬&lt;/b&gt;을 &lt;b&gt;곱해주는 작업&lt;/b&gt;을 하기 때문이다.&lt;br /&gt;회전 작업을 &lt;b&gt;곱셈&lt;/b&gt;으로 나타낼 수 있다면&lt;br /&gt;&lt;b&gt;물체 회전&lt;/b&gt; 역시 &lt;b&gt;변환행렬 곱셈 작업의 반열&lt;/b&gt;에 오르게 되어 작업의 능률이 상승할 것이고,&lt;br /&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;위의 &lt;b&gt;복소수 평면&lt;/b&gt;에서의 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회전축&lt;/b&gt;은 평면에서 수직으로 뚫려 나오는 방향으로 &lt;b&gt;1개&lt;/b&gt;, &lt;b&gt;좌표 단위&lt;/b&gt;는 I, R로 &lt;b&gt;2개&lt;/b&gt;였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 &lt;b&gt;회전축&lt;/b&gt;이 &lt;b&gt;3개&lt;/b&gt; 필요한 &lt;b&gt;3차원 회전&lt;/b&gt;의 경우 &lt;b&gt;몇 개의 좌표 단위&lt;/b&gt;가 필요할까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;삼원수&lt;/b&gt;를 활용해 &lt;b&gt;3개&lt;/b&gt;의 단위만으로 표현해보려는 시도도 있었지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론부터 말하자면 &lt;b&gt;4개&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;b&gt;3개의 회전축&lt;/b&gt;을 필요로 했던 &lt;b&gt;오일러 각&lt;/b&gt;이 &lt;b&gt;3개의 단위&lt;/b&gt;를 사용하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;하나의 회전축&lt;/b&gt;이 잠겨버렸던 것에서 짐작할 수 있었듯이,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회전축이 1개&lt;/b&gt;인 &lt;b&gt;복소수 평면&lt;/b&gt;에서는 필요한 &lt;b&gt;단위&lt;/b&gt;가&lt;b&gt; 2개&lt;/b&gt;였던 것처럼,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 직접 통제 가능한 &lt;b&gt;단위의 개수&lt;/b&gt;는 &lt;b&gt;회전축의 수&lt;/b&gt;보다 &lt;b&gt;최소 1개 이상&lt;/b&gt;은 더 많아야 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 마침 &lt;b&gt;1개&lt;/b&gt;의 &lt;b&gt;실수 부분&lt;/b&gt;과 &lt;b&gt;3개&lt;/b&gt;의 &lt;b&gt;허수 부분&lt;/b&gt;, 총 &lt;b&gt;4개의 단위&lt;/b&gt;를 사용하는 &lt;b&gt;사원수&lt;/b&gt;는 이 조건을 충족했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 &lt;b&gt;3차원 물체의 회전&lt;/b&gt;에 &lt;b&gt;사원수(Quaternion)&lt;/b&gt;을 적용하기 위한 준비는 끝났다.&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DFjkC/btsDA2Tx7lt/AQuOBt4jkPmTQUrb78oKik/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DFjkC/btsDA2Tx7lt/AQuOBt4jkPmTQUrb78oKik/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DFjkC/btsDA2Tx7lt/AQuOBt4jkPmTQUrb78oKik/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/DFjkC/btsDA2Tx7lt/AQuOBt4jkPmTQUrb78oKik/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;266&quot; height=&quot;261&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;322&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;800&quot; data-origin-height=&quot;525&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EDoRN/btsDDapFOPo/V9pvuEp9661jYKWwWIQgo1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EDoRN/btsDDapFOPo/V9pvuEp9661jYKWwWIQgo1/img.gif&quot; data-alt=&quot;다시 돌아와, 쌩쇼를 하며 회전하는 보일러의 불판을 본 쿼터니온느는 어떤 번뜩이는 아이디어를 떠올렸다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EDoRN/btsDDapFOPo/V9pvuEp9661jYKWwWIQgo1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/EDoRN/btsDDapFOPo/V9pvuEp9661jYKWwWIQgo1/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;328&quot; height=&quot;215&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;525&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;696&quot; data-origin-height=&quot;486&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5r8gb/btsDD0f3cOQ/vqltW4c36PhhpNEkhEJUK1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5r8gb/btsDD0f3cOQ/vqltW4c36PhhpNEkhEJUK1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5r8gb/btsDD0f3cOQ/vqltW4c36PhhpNEkhEJUK1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/5r8gb/btsDD0f3cOQ/vqltW4c36PhhpNEkhEJUK1/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;556&quot; height=&quot;388&quot; data-origin-width=&quot;696&quot; data-origin-height=&quot;486&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼터니온느는 새로운 모델의 불판을 제안했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 &lt;b&gt;x y z&lt;/b&gt;에 더불어 &lt;b&gt;w&lt;/b&gt;라는 새로운 단위를 탑재한,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언젠간 자신이 재학 중인 4차원 좌표계 공학과의 졸업 작품으로 만들어보고자 구상했던,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;s&gt;자신의 이름을 딴&lt;/s&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;b&gt;x y z&lt;/b&gt; 순서대로 &lt;b&gt;세 번의 회전&lt;/b&gt;을 거쳐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;마지막 최종 회전&lt;/b&gt;의 모습을 보여줬다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼터니언 불판은 &lt;b&gt;x y z&lt;/b&gt;에 원하는 &lt;b&gt;회전축의 벡터&lt;/b&gt;의 정보를 담고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;w&lt;/b&gt;에 &lt;b&gt;회전각&lt;/b&gt; 정보를 넣어 그만큼 회전시켰다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;단 한 번의 회전&lt;/b&gt;으로 모든 작업이 끝났기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회전 순서&lt;/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;b&gt;회전축&lt;/b&gt;의 &lt;b&gt;방향&lt;/b&gt;이 &lt;b&gt;제한&lt;/b&gt;되어있지 않고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회전축 벡터&lt;/b&gt;를 원하는 대로 &lt;b&gt;지정&lt;/b&gt;할 수 있었기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전과 달리 &lt;b&gt;공간상&lt;/b&gt;으로 &lt;b&gt;최단거리&lt;/b&gt;를 따라 이동하게끔 회전을 유도할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때문에 이전처럼 회전 과정에서 &lt;b&gt;보간의 오류&lt;/b&gt;를 야기하지도 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회전축&lt;/b&gt;이 잠길 일도 없었기 때문에 &lt;b&gt;짐벌락 현상&lt;/b&gt; 역시 찾아볼 수 없었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;286&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/njYZp/btsDERJV1Nd/AII9nGpCirzPFce1LdFhlK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/njYZp/btsDERJV1Nd/AII9nGpCirzPFce1LdFhlK/img.gif&quot; data-alt=&quot;머쓱&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/njYZp/btsDERJV1Nd/AII9nGpCirzPFce1LdFhlK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/njYZp/btsDERJV1Nd/AII9nGpCirzPFce1LdFhlK/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;291&quot; height=&quot;167&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;286&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;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;h3 data-ke-size=&quot;size23&quot;&gt;쿼터니언 회전의 한계&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;제한된 180˚ 이상의 회전&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 장점만 있는 것은 아니었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼터니언 불판은 &lt;b&gt;180˚이상의 회전&lt;/b&gt;을 한 번에 나타낼 수 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 말했듯 &lt;b&gt;공간상&lt;/b&gt;으로 &lt;b&gt;최단거리&lt;/b&gt;를 따라 이동하게끔 되어있었기 때문에,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사전에 &lt;b&gt;180 + &amp;alpha;&lt;/b&gt;만큼 회전하도록 의도하고 설계했다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 실행시켜보면 더 짧은 거리인 &lt;b&gt;180 - &amp;alpha;&lt;/b&gt;만큼 &lt;b&gt;반대 방향&lt;/b&gt;으로 회전하는 것이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 이는 &lt;b&gt;보간 과정&lt;/b&gt;에서의 &lt;b&gt;모호성&lt;/b&gt;을 없애기 위해서는 감당해야 할 수 밖에 없는 현상으로,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 &lt;b&gt;180˚ 이상의 회전&lt;/b&gt;을 표현하고 싶은 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;한 번&lt;/b&gt;의 회전이 아닌 &lt;b&gt;두 번&lt;/b&gt; 이상의 회전으로 나누어 표현하거나,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반드시 거쳐야 하는 &lt;b&gt;중간 지점&lt;/b&gt;을 설정해두면 해결될 일이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;직관적이지 못한 표기법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보일러가 만든 불판과 비교되는 &lt;b&gt;가장 큰 단점&lt;/b&gt;이라면 단점인 부분이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;오일러 각&lt;/b&gt;으로 나타낸 (45, 0, 60), (30, 90, 0) 등의 &lt;b&gt;회전각&lt;/b&gt;들을 보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;짐벌락&lt;/b&gt;이 발생하지 않는 선에서는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직관적으로 &lt;b&gt;회전 이후의 모습&lt;/b&gt;을 예상하기 쉬웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;세 개의 축&lt;/b&gt;과 &lt;b&gt;세 번의 회전&lt;/b&gt;이라는 &lt;b&gt;오일러 각&lt;/b&gt;의 작동 원리가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리 머릿속에서도 재현되기 쉬울 정도로 &lt;b&gt;쉽고 직관적&lt;/b&gt;이었기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면 &lt;b&gt;쿼터니언 회전&lt;/b&gt;의 (10, 50, 30, 60)를 보고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회전이 적용된 이후&lt;/b&gt;의 고기 모습을 쉽게 예상할 수 있는 학생은 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고기가 원하는 각도까지 도달할 수 있도록 하려면 &lt;b&gt;얼마만큼 회전시켜야 하는지&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;쿼터니언&lt;/b&gt;으로 나타낼 수 있는 학생도 얼마 되지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇듯 &lt;b&gt;더 좋은 결과의 회전&lt;/b&gt;을 만들어낼 수 있고 &lt;b&gt;연산 횟수&lt;/b&gt;가 적어 &lt;b&gt;컴퓨터&lt;/b&gt;와 불판에게는 친근했어도,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정작 불판을 만지는 학생들에게는 &lt;b&gt;그렇게 쉽게 가까이 다가갈 수&lt;/b&gt;는 없는 표현 방식이였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;209&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/57vSo/btsDzvvrt66/JfjlO01WegxrQ9As4WEfKk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/57vSo/btsDzvvrt66/JfjlO01WegxrQ9As4WEfKk/img.gif&quot; data-alt=&quot;기술적으로는 뛰어났지만 사회성은 조금 부족했던 쿼터니온느&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/57vSo/btsDzvvrt66/JfjlO01WegxrQ9As4WEfKk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/57vSo/btsDzvvrt66/JfjlO01WegxrQ9As4WEfKk/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;376&quot; height=&quot;157&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;209&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;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;h3 data-ke-size=&quot;size23&quot;&gt;그럼에도...&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼에도 보일러와 쿼터니온느는 힘을 합쳐 새로운 모델의 불판을 제작해내기로 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 둘은 어느 한 명의 의견만을 반영해 단점을 그대로 안고 가지 않고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;둘 모두의 방법을 응용&lt;/b&gt;, &lt;b&gt;서로의 단점을 보완&lt;/b&gt;해 최고의 불판이 나오도록 협업했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;206&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zrUmZ/btsDAr63RKx/q4QXEAlAQd7eeS0D8otzQ0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zrUmZ/btsDAr63RKx/q4QXEAlAQd7eeS0D8otzQ0/img.gif&quot; data-alt=&quot;뚝딱뚝딱&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zrUmZ/btsDAr63RKx/q4QXEAlAQd7eeS0D8otzQ0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/zrUmZ/btsDAr63RKx/q4QXEAlAQd7eeS0D8otzQ0/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;500&quot; height=&quot;206&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;206&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;뚝딱뚝딱&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학생들이 &lt;b&gt;직접&lt;/b&gt; 불판의 &lt;b&gt;조종값을 입력&lt;/b&gt;하고 현재의 &lt;b&gt;회전값을 확인&lt;/b&gt;하는 데에는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;직관성&lt;/b&gt;이 뛰어난 보일러의 불판(&lt;b&gt;Euler Angle&lt;/b&gt;)을 응용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면 &lt;b&gt;목표한 회전값&lt;/b&gt;까지 &lt;b&gt;기계&lt;/b&gt;가 &lt;b&gt;계산&lt;/b&gt;해서 &lt;b&gt;자동으로 회전&lt;/b&gt;시켜 주는 데에는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회전축&lt;/b&gt;과 &lt;b&gt;각도&lt;/b&gt;의 &lt;b&gt;제약&lt;/b&gt;이 없어 &lt;b&gt;회전이 자유로운&lt;/b&gt; 쿼터니온느의 불판(&lt;b&gt;Quaternion&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;3차원 좌표계 공학과 학생과 4차원 좌표계 공학과 학생의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 민족 대통합과도 같은 훈훈한 일화는 세대를 타고 전해져 내려와&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현대로도 이어져 &lt;b&gt;Unity 시스템&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;b&gt;Unity 인스펙터 창&lt;/b&gt;의 Transform &amp;rarr; Rotation란의 &lt;b&gt;Vector3 회전값&lt;/b&gt;은 &lt;b&gt;오일러 각&lt;/b&gt;을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;C# 스크립트 상&lt;/b&gt;에서 물체의 &lt;b&gt;현재 회전값&lt;/b&gt;을 확인하고 싶을 때도 &lt;b&gt;Transform.eulerAngle&lt;/b&gt;에 접근해 알아낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 우리가 &lt;b&gt;물체를 직접 회전&lt;/b&gt;시키거나 &lt;b&gt;회전값을 수정&lt;/b&gt;하고 싶을 때에는 &lt;b&gt;Quaternion.Euler(x, y, z)&lt;/b&gt;를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(x, y, z)&lt;/b&gt;에 우리가 원하는 물체의 &lt;b&gt;오일러 각&lt;/b&gt;을 넣으면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터가 그것에 대응되는 알맞은 &lt;b&gt;쿼터니언&lt;/b&gt;으로 변환하고 &lt;b&gt;회전에 사용&lt;/b&gt;한다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bz8XJs/btsDDZVORne/NbLKCkiqVV5CVrltHoyb1K/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bz8XJs/btsDDZVORne/NbLKCkiqVV5CVrltHoyb1K/img.gif&quot; data-alt=&quot;이후 고기를 맛있게 구워먹었다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bz8XJs/btsDDZVORne/NbLKCkiqVV5CVrltHoyb1K/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bz8XJs/btsDDZVORne/NbLKCkiqVV5CVrltHoyb1K/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;358&quot; height=&quot;179&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;250&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;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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어느 순간 자신들의 감정이 깊어져 가는 것을 확인했고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대학을 졸업한 후 결혼에 성공적으로 골인했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;207&quot; data-origin-height=&quot;243&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tB0di/btsDyRkUeLI/i5CWsIhKKVgKwTFHdtQPVK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tB0di/btsDyRkUeLI/i5CWsIhKKVgKwTFHdtQPVK/img.jpg&quot; data-alt=&quot;끼야아아아악&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tB0di/btsDyRkUeLI/i5CWsIhKKVgKwTFHdtQPVK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtB0di%2FbtsDyRkUeLI%2Fi5CWsIhKKVgKwTFHdtQPVK%2Fimg.jpg&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;114&quot; height=&quot;134&quot; data-origin-width=&quot;207&quot; data-origin-height=&quot;243&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;끼야아아아악&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뭐요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&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;a href=&quot;https://kjunwoo23.tistory.com/2&quot;&gt;0주차: 인트로 - 새롭고 신기한 것을 좋아하거나, 모르는 것을 알고 싶어 하는 마음&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/3&quot;&gt;1주차: Unity 엔진은 왜 개발 언어로 C#을 선택했을까?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/4&quot;&gt;2주차: 의외로&amp;nbsp;세상&amp;nbsp;잡다한&amp;nbsp;Transform에&amp;nbsp;대한&amp;nbsp;모든&amp;nbsp;것&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/5&quot;&gt;3주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (1/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/6&quot;&gt;4주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (2/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/7&quot;&gt;5주차: 헐크&amp;nbsp;아저씨도&amp;nbsp;깜짝&amp;nbsp;놀란&amp;nbsp;Unity&amp;nbsp;Render&amp;nbsp;Pipeline이&amp;nbsp;작동하는&amp;nbsp;과정&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/8&quot;&gt;6주차: 매 프레임 나보다 갓생 사는 Unity의 Life Cycle&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/9&quot;&gt;7주차: 남들보다 더 갓생 사는 Coroutine의 충격적인 정체&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/10&quot;&gt;8주차: 야물(YAML)딱진 그 녀석의 은밀한 속마음 - Unity Scene 파일 (.unity)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/11&quot;&gt;9주차: 내&amp;nbsp;과자&amp;nbsp;포장지&amp;nbsp;누가&amp;nbsp;버렸어?&amp;nbsp;-&amp;nbsp;meta&amp;nbsp;data&amp;nbsp;파일&amp;nbsp;(.meta)&amp;nbsp;파헤치기&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/12&quot;&gt;10주차: 철가방 채로 배달온 Unity 빌드 파일. 난 단무지 시킨 적 없는데, 왜 있지?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/13&quot;&gt;11주차: 마무리 - 후기&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>내 맘대로 쓰는 Unity 심층분석 析深層分</category>
      <author>원펀치 쓰리 갓냥이</author>
      <guid isPermaLink="true">https://kjunwoo23.tistory.com/6</guid>
      <comments>https://kjunwoo23.tistory.com/6#entry6comment</comments>
      <pubDate>Thu, 18 Jan 2024 04:39:07 +0900</pubDate>
    </item>
    <item>
      <title>3주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (1/2)</title>
      <link>https://kjunwoo23.tistory.com/5</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/2&quot;&gt;0주차: 인트로 - 새롭고 신기한 것을 좋아하거나, 모르는 것을 알고 싶어 하는 마음&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/3&quot;&gt;1주차: Unity 엔진은 왜 개발 언어로 C#을 선택했을까?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/4&quot;&gt;2주차: 의외로&amp;nbsp;세상&amp;nbsp;잡다한&amp;nbsp;Transform에&amp;nbsp;대한&amp;nbsp;모든&amp;nbsp;것&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/5&quot;&gt;3주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (1/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/6&quot;&gt;4주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (2/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/7&quot;&gt;5주차: 헐크&amp;nbsp;아저씨도&amp;nbsp;깜짝&amp;nbsp;놀란&amp;nbsp;Unity&amp;nbsp;Render&amp;nbsp;Pipeline이&amp;nbsp;작동하는&amp;nbsp;과정&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/8&quot;&gt;6주차: 매 프레임 나보다 갓생 사는 Unity의 Life Cycle&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/9&quot;&gt;7주차: 남들보다 더 갓생 사는 Coroutine의 충격적인 정체&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/10&quot;&gt;8주차: 야물(YAML)딱진 그 녀석의 은밀한 속마음 - Unity Scene 파일 (.unity)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/11&quot;&gt;9주차: 내&amp;nbsp;과자&amp;nbsp;포장지&amp;nbsp;누가&amp;nbsp;버렸어?&amp;nbsp;-&amp;nbsp;meta&amp;nbsp;data&amp;nbsp;파일&amp;nbsp;(.meta)&amp;nbsp;파헤치기&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/12&quot;&gt;10주차: 철가방 채로 배달온 Unity 빌드 파일. 난 단무지 시킨 적 없는데, 왜 있지?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/13&quot;&gt;11주차: 마무리 - 후기&lt;/a&gt;&lt;/blockquote&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;style3&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;아주 먼 옛날, 세상에 스마트폰과 챗GPT가 보급되지 않았던 시절,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마법이라는 이름으로 수학과 과학이라는 신비로운 학문을 연구하던 시대가 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 여기, 영국의 &lt;b&gt;명문 제빵 마법 학교&lt;/b&gt;인 &lt;b&gt;호그로와상&lt;/b&gt;에 두 에이스 학생,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;보일러 드리프트&lt;/b&gt;와 &lt;b&gt;쿼터니온느 그라인더&lt;/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;b&gt;불속성 마법 융합대학&lt;/b&gt; 소속의 &lt;b&gt;3차원 좌표계 공학과&lt;/b&gt; 학생이었고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼터니온느는 같은 융합대학 소속의 과만 다른 &lt;b&gt;4차원 좌표계 공학과&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;그러던 어느 날, 호그로와상 불속성 마법 융합대학의 MT가 열렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MT에 참석한 학생들은 각 학과들끼리 모여 바비큐 파티를 가지려 했으나,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;얇고 넓은 사이즈의 바비큐 고기에 비해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좁고 강한 세기의 숯불로 학생들의 파티는 난항을 겪었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고기를 골고루 굽고 싶었으나 고기의 중심부만 가열되는 것이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이에 3차원 좌표계 공학과의 에이스 보일러 학생은 다음과 같은 방식으로 고기를 굽기 시작했다.&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;328&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvoIBB/btsDjZwu1Sr/bitZCmxaC7Y7vCvmeM3KZ0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvoIBB/btsDjZwu1Sr/bitZCmxaC7Y7vCvmeM3KZ0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvoIBB/btsDjZwu1Sr/bitZCmxaC7Y7vCvmeM3KZ0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bvoIBB/btsDjZwu1Sr/bitZCmxaC7Y7vCvmeM3KZ0/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;328&quot; height=&quot;322&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보일러의 동기들은 이 현란한 불판의 움직임을 보며&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바비큐 고기의 모든 부분을 골고루 구울 수 있는 최고의 방식이라고 극찬했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 이 방식을 옆 테이블에 지켜본&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4차원 좌표계 공학과의 에이스 쿼터니온느는 화들짝 놀랐다.&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;400&quot; data-origin-height=&quot;207&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beb0n7/btsDivh7Srt/buThNO3VO3rdCmgfUKjQ70/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beb0n7/btsDivh7Srt/buThNO3VO3rdCmgfUKjQ70/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beb0n7/btsDivh7Srt/buThNO3VO3rdCmgfUKjQ70/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/beb0n7/btsDivh7Srt/buThNO3VO3rdCmgfUKjQ70/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;400&quot; height=&quot;207&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;207&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아니 저런 식으로 구우면, 불판을 원하는 대로 회전시킬 수 없을 텐데?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과연 &lt;span style=&quot;color: #333333; text-align: start;&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 &lt;b&gt;3차원 회전&lt;/b&gt;에서 발생할 수 있는 &lt;b&gt;짐벌락 현상&lt;/b&gt;이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이에 3차원 좌표계 공학과 학생들과 4차원 좌표계 공학과 학생들은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 문제에 관련된 심도 깊은 토론을 하기 위해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉시 모든 바비큐 파티를 중단하고 테이블을 한데 모아 긴급 회의를 시작했다.&lt;/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;h2 data-ke-size=&quot;size26&quot;&gt;오일러 각&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;오일러 각&lt;/b&gt;은 3차원 공간에 놓인 물체의 회전 상태를 &lt;b&gt;세 번의 축회전&lt;/b&gt;으로 나타내는 각도 표현 방식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 오일러 각이 (45, 60, 20)인 물체는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;X축 회전으로 45도&lt;/b&gt;, &lt;b&gt;Y축 회전으로 60도&lt;/b&gt;, &lt;b&gt;Z축 회전으로 20도&lt;/b&gt; 회전한 결과물이라고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;220&quot; data-origin-height=&quot;219&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rSPW7/btsDiwnWpZ4/GK2N1IqxnGtGPd1kOxJWF0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rSPW7/btsDiwnWpZ4/GK2N1IqxnGtGPd1kOxJWF0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rSPW7/btsDiwnWpZ4/GK2N1IqxnGtGPd1kOxJWF0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/rSPW7/btsDiwnWpZ4/GK2N1IqxnGtGPd1kOxJWF0/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;220&quot; height=&quot;219&quot; data-origin-width=&quot;220&quot; data-origin-height=&quot;219&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 회전 방식의 독특한 점은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물체가 회전할 시, &lt;b&gt;자신을 제외한 다른 회전축들 역시 같이 회전&lt;/b&gt;할 수 있다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 X축 회전 시 Y, Z축이,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Y축 회전 시 Z축이&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;b&gt;종속적인 관계&lt;/b&gt;가,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이어서 나오게 될 &lt;b&gt;오일러 각의 여러 한계들&lt;/b&gt;을 유발하는 &lt;b&gt;결정적 원인&lt;/b&gt;이 된다.&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;h3 data-ke-size=&quot;size23&quot;&gt;오일러 각의 한계&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 회전 순서에 따라 달라지는 결과&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;하나의 회전축&lt;/b&gt;이 &lt;b&gt;자신을 제외한 다른 축&lt;/b&gt;들에게도 영향을 주는 묘한 특성 때문에,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;물체를 회전시키는 순서&lt;/b&gt;에 따라 &lt;b&gt;아예 다른 결과물&lt;/b&gt;이 나오게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아주 같은 케이스는 아니지만 비슷한 케이스를 조금 보도록 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학생 A와 B는 학교 운동장에서 보물지도를 발견했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보물지도에는 다음 세 문장이 적혀있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;1. 이곳에서 오른쪽을 보고 삼 보 이동하시오.&lt;br /&gt;2. 그곳에서 왼쪽을 보고 이 보 이동하시오. &lt;br /&gt;3. 그곳에서 오른쪽을 보고 삼 보 이동하시오.&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;같은 보물지도를 발견한 학생 A와 B였지만, 기억한 내용은 달랐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학생 A는 지도에 적힌 순서대로(1&amp;rarr;2&amp;rarr;3) 길을 맞게 찾아갔고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학생 B는 거리와 방향은 정확히 기억했지만 순서를 헷갈려(1&amp;rarr;3&amp;rarr;2) 도착한 곳이 달라지게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuODwC/btsDjWmofwK/UKakgfpTk7NEmkEFAMxQLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuODwC/btsDjWmofwK/UKakgfpTk7NEmkEFAMxQLK/img.png&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;564&quot; data-is-animation=&quot;false&quot; style=&quot;width: 51.7332%; margin-right: 10px;&quot; data-widthpercent=&quot;52.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuODwC/btsDjWmofwK/UKakgfpTk7NEmkEFAMxQLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuODwC%2FbtsDjWmofwK%2FUKakgfpTk7NEmkEFAMxQLK%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;564&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAw9jV/btsDnDr1ZZe/TEUFlbzQBtbAUUN7y6btk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAw9jV/btsDnDr1ZZe/TEUFlbzQBtbAUUN7y6btk0/img.png&quot; data-origin-width=&quot;542&quot; data-origin-height=&quot;465&quot; data-is-animation=&quot;false&quot; style=&quot;width: 47.104%;&quot; data-widthpercent=&quot;47.66&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAw9jV/btsDnDr1ZZe/TEUFlbzQBtbAUUN7y6btk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAw9jV%2FbtsDnDr1ZZe%2FTEUFlbzQBtbAUUN7y6btk0%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;542&quot; height=&quot;465&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;A 학생( 1&amp;rarr;2&amp;rarr;3 )과 B 학생(1&amp;rarr;3&amp;rarr;2)의 이동 경로 차이&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A와 B 모두 1, 2, 3 문장을 합쳐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총합 오른쪽으로 여섯 보, 왼쪽으로 이 보 이동한 것은 똑같은데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어째서 도착한 곳이 달라진 걸까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 &lt;b&gt;이동하기 위해 서 있던 곳에서 오른쪽/왼쪽을 바라보는 행위&lt;/b&gt;가,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그 다음 순서의 오른쪽/왼쪽의 기준을 바꾸었기 때문&lt;/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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;축끼리의 회전이 독립적이지 못하고 &lt;b&gt;종속적&lt;/b&gt;이기 때문에,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;X축의 회전은 다음 회전에 쓰일 Y, Z축의 형태에 영향을 끼치고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다음 회전의 모양이 달라지게 된다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당연하게도 Y, Z축의 회전 역시 마찬가지이다.&lt;/p&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;letter-spacing: 0px;&quot;&gt;(45, 60, 20) 오일러각의 경우도&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;X를 45도 회전, Y를 60도 회전, Z를 20도 회전하는 경우와&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;X를 45도 회전, Z를 20도 회전, Y를 60도 회전하는 경우의 회전 결과가 다르게 나타나는 것이다.&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;letter-spacing: 0px;&quot;&gt;때문에 실제로 오일러각을 나타내는 방법에는 다음 12가지가 있다.&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;XYZ, ZXY, ZXZ, XYX, YXY, YZY,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;ZYZ, ZXZ, XZY, YXZ, YZX, ZYX&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;letter-spacing: 0px;&quot;&gt;(&amp;alpha;, &amp;beta;, &amp;gamma;)의 각도가 주어지고 위 12가지 방법에 따라&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;XYZ의 경우 X를 &amp;alpha;만큼, Y를 &amp;beta;만큼, Z를 &amp;gamma;만큼,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;ZXY의 경우 Z를 &amp;alpha;만큼, X를 &amp;beta;만큼, Y를 &amp;gamma;만큼&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;순서에 따른 차이를 발생시키지 않기 위해&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&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;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이렇게 어떻게든 해결책이 마련이 되기는 했지만,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;회전 순서에 따라 결과가 달라질 수 있다는 점은&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;여전히 회전을 표현하는 방식에 있어서 크나큰 단점이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GvbFP/btsDissjt6V/k08EZNojptFBbG0tcXZIe0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GvbFP/btsDissjt6V/k08EZNojptFBbG0tcXZIe0/img.gif&quot; data-alt=&quot;어후 3차원 애들이란 ㅉㅉ&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GvbFP/btsDissjt6V/k08EZNojptFBbG0tcXZIe0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/GvbFP/btsDissjt6V/k08EZNojptFBbG0tcXZIe0/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;316&quot; height=&quot;205&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;350&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;어후 3차원 애들이란 ㅉㅉ&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 보간의 문제&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학술적인 연구도 중요하지만 결국 배고픔 앞에 장사가 없다는 것을 알아차린 호그로와상 불속성 마법 융합대학 학생들은,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 회의를 중단하고 다시 바비큐 파티를 재개했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회의를 통해 별 다른 대안을 찾지 못했기 때문에 학생들은 보일러의 불판을 계속 사용했고,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvoIBB/btsDjZwu1Sr/bitZCmxaC7Y7vCvmeM3KZ0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvoIBB/btsDjZwu1Sr/bitZCmxaC7Y7vCvmeM3KZ0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvoIBB/btsDjZwu1Sr/bitZCmxaC7Y7vCvmeM3KZ0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bvoIBB/btsDjZwu1Sr/bitZCmxaC7Y7vCvmeM3KZ0/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;231&quot; height=&quot;227&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이는 쿼터니온느의 심술을 돋구기에 충분했다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;쿼터니온느에게 있어서 배고픔보다도 더 거부감이 드는 것은&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3차원 좌표계 공학과 학생들의 멍청함과 안일함이기 때문이었다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;군침을 흘리며 기다리는 학생들을 보다못한 쿼터니온느는 결국 불판을 담당하는 보일러에게 요청했다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;고기 아랫부분이 조금 덜 익은 것 같아서,&lt;br /&gt;불판을 (-90, 90, -90) 오일러 각으로 회전시켜줘.&lt;/span&gt;&lt;/blockquote&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;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 고기가 익기를 조금 기다린 뒤,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;쿼터니온느는 우매한 3차원 좌표계 공학과 학생들에게 결정적인 한 방을 날렸다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;고기 아랫부분이 이제 적당히 익은 것 같아.&lt;br /&gt;이번엔 불판을 다시 (0, 0, 0) 오일러 각으로 회전시켜줘.&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&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;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 이윽고 보여지는 광경에,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3차원 좌표계 공학과 학생들은 &lt;b&gt;충격과 공포에 빠져 그대로 그 자리에 얼어붙어버렸다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;320&quot; data-origin-height=&quot;240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mDodB/btsDmWySylT/ghwKpwmTkmrZ21SHzS6rGk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mDodB/btsDmWySylT/ghwKpwmTkmrZ21SHzS6rGk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mDodB/btsDmWySylT/ghwKpwmTkmrZ21SHzS6rGk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/mDodB/btsDmWySylT/ghwKpwmTkmrZ21SHzS6rGk/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;465&quot; height=&quot;349&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;240&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;수직 위 방향(-90, 90, -90)을 가리키고 있던 고기는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;직관적인 일직선 궤적&lt;/b&gt;이 아닌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;알 수 없는 이상한 궤적&lt;/b&gt;을 그리며 원위치(0, 0, 0)로 돌아오는 것이었다.&lt;span style=&quot;color: #777777; text-align: center;&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;207&quot; data-origin-height=&quot;243&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1NM3B/btsDncn1H69/SzcPeFnBD4uu3G0y8Z1jxK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1NM3B/btsDncn1H69/SzcPeFnBD4uu3G0y8Z1jxK/img.jpg&quot; data-alt=&quot;끼야아아아악&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1NM3B/btsDncn1H69/SzcPeFnBD4uu3G0y8Z1jxK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1NM3B%2FbtsDncn1H69%2FSzcPeFnBD4uu3G0y8Z1jxK%2Fimg.jpg&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;137&quot; height=&quot;161&quot; data-origin-width=&quot;207&quot; data-origin-height=&quot;243&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 현상의 원인을 이해하기 위해 알고 있어야 하는 오일러 각의 또 하나의 특징은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(&amp;alpha;, &amp;beta;, &amp;gamma;) 각에서 &amp;alpha;, &amp;beta;, &amp;gamma;은 모두 &lt;b&gt;-180&amp;deg;와 180&amp;deg; 사이의 각&lt;/b&gt;을 가진다는 것이다. (or -&amp;pi; ~ &amp;pi;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 -180&amp;deg;와 180&amp;deg;는 같은 크기의 각이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;180&amp;deg;에서 1&amp;deg;를 더한 181&amp;deg;의 경우 -179&amp;deg;와 완전히 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각도는 결국 회전이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 바퀴를 회전하든 두 바퀴를 회전하든&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회전한 바퀴수가 각도에 표현되어야 할 이유&lt;/b&gt;는 없기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;360&amp;deg;를 주기로 &lt;b&gt;-180&amp;deg;과 180&amp;deg; 사이를 반복&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아까와 마찬가지로 보물지도 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학생 A와 B는 학교 운동장에서 보물지도를 찾았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보물지도에는 다음 세 문장이 적혀있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;1. 운동장의 중심을 기준으로 반지름 10m의 원을 그리고,&lt;br /&gt;2. 가장 북쪽인 지점을 0&amp;deg;로 하라.&lt;br /&gt;3. 이때 -120&amp;deg;와 60&amp;deg;, 원 위에서 두 지점 사이의 정확한 중간 지점을 찾아라.&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;&lt;span style=&quot;color: #333333;&quot;&gt;같은 보물지도를 발견했지만, 학생 A와 B의 해석은 달랐다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;학생 A는 단순히 (-120 + 60) / 2 = -30임을 인식해 -30&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg; 지점으로 달려가 열심히 땅을 파기 시작했다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;반면 학생 B는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;-120&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg; = 240&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg;임을 이용, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;(240 + 60) / 2 = 150임을 인식해 150&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg; 지점으로 달려가 열심히 땅을 파기 시작했다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&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&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDNyLq/btsDnsqLsM8/z3ZrPrHFFkOrt2ntfGgIi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDNyLq/btsDnsqLsM8/z3ZrPrHFFkOrt2ntfGgIi0/img.png&quot; data-origin-width=&quot;867&quot; data-origin-height=&quot;588&quot; data-is-animation=&quot;false&quot; style=&quot;width: 52.2244%; margin-right: 10px;&quot; data-widthpercent=&quot;52.84&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDNyLq/btsDnsqLsM8/z3ZrPrHFFkOrt2ntfGgIi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDNyLq%2FbtsDnsqLsM8%2Fz3ZrPrHFFkOrt2ntfGgIi0%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;867&quot; height=&quot;588&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pdmFz/btsDmUnwL64/GjKiTSyrkuNK88ELu7ft61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pdmFz/btsDmUnwL64/GjKiTSyrkuNK88ELu7ft61/img.png&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;598&quot; data-is-animation=&quot;false&quot; style=&quot;width: 46.6128%;&quot; data-widthpercent=&quot;47.16&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pdmFz/btsDmUnwL64/GjKiTSyrkuNK88ELu7ft61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpdmFz%2FbtsDmUnwL64%2FGjKiTSyrkuNK88ELu7ft61%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;787&quot; height=&quot;598&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;A: (-120 + 60) / 2 = -30&amp;nbsp; &amp;nbsp; &amp;nbsp;------------------------------------------------------------&amp;nbsp; &amp;nbsp; &amp;nbsp;B: (240 + 60) / 2 = 150&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: #333333;&quot;&gt;결국 두 지점 모두 나름의 정답이었고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이러한 &lt;b&gt;중간값의 모호성&lt;/b&gt;은 컴퓨터로 하여금 &lt;b&gt;우리가 의도하지 않은 계산값&lt;/b&gt;을 내놓게 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;컴퓨터를 이용해 게임 혹은 영화의 애니메이션을 제작할 때,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&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: #333333;&quot;&gt;&lt;b&gt;보간값&lt;/b&gt;은 임의의 두 지점 사이의 &lt;b&gt;중간값&lt;/b&gt;, 혹은 &lt;b&gt;사전에 정해둔 비율의 사잇값&lt;/b&gt;으로,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&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: #333333;&quot;&gt;예시를 들자면 주인공이 검을 휘두르는 모션을 제작하기 위해&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;검을 위로 치켜드는 프레임에서 팔의 각도를 0&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg;&lt;/span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;검을 아래로 내리친 이후의 프레임에서 팔의 각도를 90&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg;로 설정하고&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;그 사이의 프레임을 0&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg;와 90&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg;사이의 수없이 많은 보간값들로 채워&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: #333333; text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;검을 든 팔이 부드럽게 내려가는 모습을 연출하는 것이다.&lt;/span&gt;&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;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;하지만 이 계산을 컴퓨터에게 맡기게 된다면 문제가 발생할 수 있다.&amp;nbsp;&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: #333333;&quot;&gt;개발자는 &lt;b&gt;0&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg; &lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&amp;rarr; &lt;/span&gt;10&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg; &amp;rarr; &lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;45&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg; &amp;rarr; 8&lt;/span&gt;0&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg; &amp;rarr; 9&lt;/span&gt;0&lt;/b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&amp;deg;&lt;/b&gt;의 각도 변화를 의도했겠지만,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;컴퓨터는 &lt;b&gt;0&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg; &lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&amp;rarr; -&lt;/span&gt;10&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg; &amp;rarr; &lt;/span&gt;-135&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg; &amp;rarr; &lt;/span&gt;100&lt;/b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&amp;deg;&lt;/b&gt;(-260&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg;&lt;/span&gt;)&lt;b&gt; &amp;rarr; 9&lt;/b&gt;&lt;/span&gt;&lt;b&gt;0&lt;/b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&amp;deg;&lt;/b&gt;(-270&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg;&lt;/span&gt;)로 팔이 &lt;b&gt;반대방향&lt;/b&gt;으로 돌 수도 있는 것이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;오일러 각에서 &lt;b&gt;45&lt;/b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&amp;deg;와 &lt;span style=&quot;text-align: left;&quot;&gt;-135&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&amp;deg;&lt;/b&gt; 모두 &lt;b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg;와&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;text-align: left;&quot;&gt;90&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&amp;deg;의 중간값&lt;/b&gt;이기 때문.&lt;/span&gt;&lt;/span&gt;&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mDodB/btsDmWySylT/ghwKpwmTkmrZ21SHzS6rGk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mDodB/btsDmWySylT/ghwKpwmTkmrZ21SHzS6rGk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mDodB/btsDmWySylT/ghwKpwmTkmrZ21SHzS6rGk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/mDodB/btsDmWySylT/ghwKpwmTkmrZ21SHzS6rGk/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;347&quot; height=&quot;260&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;240&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: #333333;&quot;&gt;까 보일러가 고기 굽던 불판을 다시 생각해보자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;위 불판이 &lt;b&gt;이상한 궤적&lt;/b&gt;을 그리며 원위치로 돌아온 이유는 &lt;b&gt;계산이 잘못돼서가 아니라&lt;/b&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(-90, 90, -90)에서 (0, 0, 0)으로 이동할 때&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&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: #333333;&quot;&gt;(-90, 90, -90) &lt;span style=&quot;text-align: left;&quot;&gt;&amp;rarr;&lt;/span&gt; (-45, 45, -45) &lt;span style=&quot;text-align: left;&quot;&gt;&amp;rarr;&lt;/span&gt; (0, 0, 0)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&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: #333333;&quot;&gt;10&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg;&lt;/span&gt;와 363&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg; 중 1&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg;에 더 가까운 것은 무엇일까?&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: #333333; text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;b&gt;수치상&lt;/b&gt;으로 보았을 때는 &lt;b&gt;10&lt;/b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&amp;deg;&lt;/b&gt;이다. 1&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg;에서&lt;/span&gt; 9&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg;만큼만 더 이동하면 되기 때문이다.&lt;/span&gt;&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: #333333; text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;하지만 실제 &lt;b&gt;공간상&lt;/b&gt;으로 나타내어 보았을 때는 &lt;span style=&quot;text-align: left;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg;에서&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt; &lt;/span&gt;무려 362&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg;나 더 가야 하는 &lt;b&gt;363&lt;/b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&amp;deg;&lt;/b&gt;가&lt;span style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/span&gt;더 가까운 곳에 있다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&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;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;또한 &lt;b&gt;우리가 직접 보고 생각하는&lt;/b&gt; 1&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg;와 363&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg;의 중간값과 ((1 + 3) / 2 = &lt;b&gt;2&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg;&lt;/span&gt;&lt;/b&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&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: #333333; text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;b&gt;컴퓨터가 생각하는&lt;/b&gt; &lt;span style=&quot;text-align: left;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg;와&amp;nbsp;363&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg;의 중간값은 다르다. &lt;span style=&quot;text-align: left;&quot;&gt;((1 + 363) / 2 = 182 = &lt;b&gt;-178&lt;span style=&quot;text-align: left;&quot;&gt;&amp;deg;&lt;/span&gt;&lt;/b&gt;)&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&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;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;이러한 &lt;b&gt;모호성&lt;/b&gt;, 그리고 각도의 &lt;b&gt;수치상의 크기&lt;/b&gt;가 &lt;b&gt;공간상에서의 크기&lt;/b&gt;와 일치하지 않는 특성은&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&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: #333333; text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;회전 계산에 있어서 오일러 각의 크나큰 맹점이다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W9xuT/btsDivP5Mrd/4ocmTwnpwFMDIPYgdWIjvK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W9xuT/btsDivP5Mrd/4ocmTwnpwFMDIPYgdWIjvK/img.jpg&quot; data-alt=&quot;그니까 고기 그만 구워라 보일러&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W9xuT/btsDivP5Mrd/4ocmTwnpwFMDIPYgdWIjvK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW9xuT%2FbtsDivP5Mrd%2F4ocmTwnpwFMDIPYgdWIjvK%2Fimg.jpg&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;198&quot; height=&quot;198&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&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;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;3. 짐벌락&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바비큐 장에 잠시 혼란이 찾아왔지만, 학생들은 이내&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'회전 과정에서 약간의 궤도 이탈이 일어나는 것 정도는 고기가 구워지는데 문제가 되지 않는다.'&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라고 판단, 불판을 계속해서 보일러에게 맡기고 고기를 굽기 시작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼터니온느는 이 상황이 정말로 마음에 들지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그녀 내면의 심술 뚜껑이 날아가 버릴 정도로 속이 매우 매우 끓고 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보일러가 모두에게 주목받는 것도, 바비큐 파티의 영웅이 되는 것도,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모두 그저 끔찍한 상황이라고 생각했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;아까 고기를 밑부분 밖에 안 구웠었잖아.&lt;br /&gt;윗부분도 야무지게 구워지게 (90, 0, 0)로 불판을 회전시켜줘.&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;보일러는 쿼터니온느의 행동을 이해하지 못했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분명 어제까지만 해도 친한 친구였는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어째서 갑자기 나를 계속해서 함정에 빠트리고 난처하게 만드는 거지?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 무엇을 잘못한 거지?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 보일러는 학생들에게 맛있는 고기를 먹이고 싶었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(90, 0, 0)로 불판을 회전시키면 실제로 고기의 윗부분이 밑으로 내려가게 되기 때문에,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼터니온느의 말에 일리가 있다 생각하고 불판을 회전시켰다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고기의 윗부분이 맛있게 구워지는 동안,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼터니온느는 다음 말을 내뱉어버렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;불판이 고장난 거 아냐? 이래서는 Y각을 바꿔도, Z각을 바꿔도 결과가 같아지는데?&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;200&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crbmGD/btsDngL2HIT/cUmLBgC2SQNDjAZfOZwTY1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crbmGD/btsDngL2HIT/cUmLBgC2SQNDjAZfOZwTY1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crbmGD/btsDngL2HIT/cUmLBgC2SQNDjAZfOZwTY1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/crbmGD/btsDngL2HIT/cUmLBgC2SQNDjAZfOZwTY1/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;345&quot; height=&quot;345&quot; data-origin-width=&quot;200&quot; data-origin-height=&quot;200&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;220&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccFdgg/btsDnysgxM6/HXCtSm8UkkVdFqde8xYF60/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccFdgg/btsDnysgxM6/HXCtSm8UkkVdFqde8xYF60/img.gif&quot; data-alt=&quot;이제 제발 그만...&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccFdgg/btsDnysgxM6/HXCtSm8UkkVdFqde8xYF60/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/ccFdgg/btsDnysgxM6/HXCtSm8UkkVdFqde8xYF60/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;157&quot; height=&quot;193&quot; data-origin-width=&quot;220&quot; data-origin-height=&quot;270&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이제 제발 그만...&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 일에 충격을 받은 보일러는 그야말로 펑펑 울었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세상이 자신을 억까한다는 생각이 들었고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계속해서 자신을 괴롭히는 쿼터니온느가 원망스러워졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고기의 모든 면을 자유자재로 구워야 할 수 있는 불판이,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3차원 회전&lt;/b&gt;임에도 불구하고 &lt;b&gt;회전축이 3개에서 2개로 줄어드는 일&lt;/b&gt;은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자기 자신이 보기에도 도저히 용납할 수 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보일러는 세상이 미웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보일러와 쿼터니온느 사이의 신경전을 그저 웃기다며 구경만 하고 있는 학생들도 미웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보일러는 몽둥이를 들고와 자신이 만들었던 불판을 마구 부수기로 마음 먹었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불판이라면 고기의 모든 면을 잘 구워내야 하는 것을,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제대로 회전도 못하면 그걸 어따 쓰농!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이라면서.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보일러가 몽둥이를 들어올리려는 찰나,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼터니온느가 그 앞을 가로막아섰다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보일러가 들고있는 몽둥이를 뺏어 저 멀리 던졌고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;찌질하게 그만 좀 울으라고 휴지를 앞에 툭 내놨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보일러는 그런 쿼터니온느의 행동을 도무지 이해할 수 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;얜 대체 왜 이러는 걸까.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모두의 주목 속에서 보일러의 울음이 그치려는 찰나,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼터니온느가 그 원리를 차분히 설명했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;짐벌락&lt;/b&gt;은 아까 보간의 문제 부분에서 보았던 고기 불판의 &lt;b&gt;기이한 움직임&lt;/b&gt;에서 추가로 이어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불판이 (-90, 90, -90)에서 (0, 0, 0)로 바로 회전할 수 없었던 이유는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;보간&lt;/b&gt;의 문제를 이용해서도 설명할 수 있지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 예시에서와 같이 컴퓨터 모델로 직접 구현하여 실행해보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불판이 잘 회전을 하다가 어느 순간&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불판을 회전시켜 줄 수 있는 &lt;b&gt;회전축이 하나가 사라진다&lt;/b&gt;는 것을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;200&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crbmGD/btsDngL2HIT/cUmLBgC2SQNDjAZfOZwTY1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crbmGD/btsDngL2HIT/cUmLBgC2SQNDjAZfOZwTY1/img.gif&quot; data-alt=&quot;가장 바깥쪽 회전과 가장 안쪽 회전이 '아예 같은 회전'이 되어버렸다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crbmGD/btsDngL2HIT/cUmLBgC2SQNDjAZfOZwTY1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/crbmGD/btsDngL2HIT/cUmLBgC2SQNDjAZfOZwTY1/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;228&quot; height=&quot;228&quot; data-origin-width=&quot;200&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;가장 바깥쪽 회전과 가장 안쪽 회전이 '아예 같은 회전'이 되어버렸다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서로 다른 회전축에 수직인 두 개의 평면이 &lt;b&gt;아예 포개어지는&lt;/b&gt; 상황이 발생하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물체의 현재 상태를 기준으로 X, Y, Z축 방향 &lt;b&gt;모든 곳으로 회전할 수 있었던&lt;/b&gt; 불판이,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어느 순간 &lt;b&gt;하나의 회전 방향&lt;/b&gt;을 &lt;b&gt;잃게&lt;/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;b&gt;하나의 회전축 자유도를 잃게 되는 현상&lt;/b&gt;을 &lt;b&gt;짐벌락&lt;/b&gt;이라고 하며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 3차원 공간의 회전에서 오일러 각이 제대로 쓰일 수 없는 가장 큰 이유가 된다.&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회전 순서&lt;/b&gt;에 따라 결과값이 달라지는 &lt;b&gt;모순&lt;/b&gt;이 있으며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;두 각도 사이의 보간값&lt;/b&gt;이 항상 정확하지는 않다는 &lt;b&gt;모호성&lt;/b&gt;이 있고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;심지어 특정 조건을 만족시킬 경우 &lt;b&gt;하나의 회전축이 아예 사라지는 문제&lt;/b&gt;가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 3차원 공간에서 물체의 회전을 온전히 표현할 수 있는 방법은 아예 없는 것일까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 있다면, 대체 어떤 방법을 사용해야 할까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그저 학생들과 함께 골고루 익힌 고기가 먹고 싶어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직접 기지를 발휘해 불판을 만들고 맛있게 고기를 구워보려 하는 보일러를,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;굳이 못 굽게 막고 딴지 걸고 지독하게 괴롭히는 쿼터니온느는,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대체 무슨 꿍꿍이인걸까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 다음 주,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (2/2)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에서 이어서 다루어보겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각지도 못하게 양이 많아져 2부작이 되었다...&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;540&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bor1Mw/btsDiQGPaDq/W0Tr2jDfHDKLSTXWRW0fB1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bor1Mw/btsDiQGPaDq/W0Tr2jDfHDKLSTXWRW0fB1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bor1Mw/btsDiQGPaDq/W0Tr2jDfHDKLSTXWRW0fB1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bor1Mw/btsDiQGPaDq/W0Tr2jDfHDKLSTXWRW0fB1/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;410&quot; height=&quot;266&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;350&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&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;a href=&quot;https://kjunwoo23.tistory.com/2&quot;&gt;0주차: 인트로 - 새롭고 신기한 것을 좋아하거나, 모르는 것을 알고 싶어 하는 마음&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/3&quot;&gt;1주차: Unity 엔진은 왜 개발 언어로 C#을 선택했을까?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/4&quot;&gt;2주차: 의외로&amp;nbsp;세상&amp;nbsp;잡다한&amp;nbsp;Transform에&amp;nbsp;대한&amp;nbsp;모든&amp;nbsp;것&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/5&quot;&gt;3주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (1/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/6&quot;&gt;4주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (2/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/7&quot;&gt;5주차: 헐크&amp;nbsp;아저씨도&amp;nbsp;깜짝&amp;nbsp;놀란&amp;nbsp;Unity&amp;nbsp;Render&amp;nbsp;Pipeline이&amp;nbsp;작동하는&amp;nbsp;과정&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/8&quot;&gt;6주차: 매 프레임 나보다 갓생 사는 Unity의 Life Cycle&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/9&quot;&gt;7주차: 남들보다 더 갓생 사는 Coroutine의 충격적인 정체&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/10&quot;&gt;8주차: 야물(YAML)딱진 그 녀석의 은밀한 속마음 - Unity Scene 파일 (.unity)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/11&quot;&gt;9주차: 내&amp;nbsp;과자&amp;nbsp;포장지&amp;nbsp;누가&amp;nbsp;버렸어?&amp;nbsp;-&amp;nbsp;meta&amp;nbsp;data&amp;nbsp;파일&amp;nbsp;(.meta)&amp;nbsp;파헤치기&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/12&quot;&gt;10주차: 철가방 채로 배달온 Unity 빌드 파일. 난 단무지 시킨 적 없는데, 왜 있지?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/13&quot;&gt;11주차: 마무리 - 후기&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>내 맘대로 쓰는 Unity 심층분석 析深層分</category>
      <author>원펀치 쓰리 갓냥이</author>
      <guid isPermaLink="true">https://kjunwoo23.tistory.com/5</guid>
      <comments>https://kjunwoo23.tistory.com/5#entry5comment</comments>
      <pubDate>Sat, 13 Jan 2024 19:50:03 +0900</pubDate>
    </item>
    <item>
      <title>2주차: 의외로 세상 잡다한 Transform에 대한 모든 것</title>
      <link>https://kjunwoo23.tistory.com/4</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/2&quot;&gt;0주차: 인트로 - 새롭고 신기한 것을 좋아하거나, 모르는 것을 알고 싶어 하는 마음&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/3&quot;&gt;1주차: Unity 엔진은 왜 개발 언어로 C#을 선택했을까?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/4&quot;&gt;2주차: 의외로&amp;nbsp;세상&amp;nbsp;잡다한&amp;nbsp;Transform에&amp;nbsp;대한&amp;nbsp;모든&amp;nbsp;것&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/5&quot;&gt;3주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (1/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/6&quot;&gt;4주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (2/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/7&quot;&gt;5주차: 헐크&amp;nbsp;아저씨도&amp;nbsp;깜짝&amp;nbsp;놀란&amp;nbsp;Unity&amp;nbsp;Render&amp;nbsp;Pipeline이&amp;nbsp;작동하는&amp;nbsp;과정&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/8&quot;&gt;6주차: 매 프레임 나보다 갓생 사는 Unity의 Life Cycle&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/9&quot;&gt;7주차: 남들보다 더 갓생 사는 Coroutine의 충격적인 정체&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/10&quot;&gt;8주차: 야물(YAML)딱진 그 녀석의 은밀한 속마음 - Unity Scene 파일 (.unity)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/11&quot;&gt;9주차: 내&amp;nbsp;과자&amp;nbsp;포장지&amp;nbsp;누가&amp;nbsp;버렸어?&amp;nbsp;-&amp;nbsp;meta&amp;nbsp;data&amp;nbsp;파일&amp;nbsp;(.meta)&amp;nbsp;파헤치기&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/12&quot;&gt;10주차: 철가방 채로 배달온 Unity 빌드 파일. 난 단무지 시킨 적 없는데, 왜 있지?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/13&quot;&gt;11주차: 마무리 - 후기&lt;/a&gt;&lt;/blockquote&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;style3&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;이번 주는 Unity 개발을 하다보면 무조건 알 수밖에 없는 &lt;b&gt;Transform&lt;/b&gt;에 대한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Transform&lt;/b&gt;은 Scene 화면 내의 사실상 모든 오브젝트에 포함되어있는 &lt;b&gt;필수 컴포넌트&lt;/b&gt;로(Canvas, UI 제외),&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;흔히들 오브젝트의 &lt;b&gt;위치&lt;/b&gt;, &lt;b&gt;회전각&lt;/b&gt;, &lt;b&gt;크기&lt;/b&gt; 등의 정보들이 담겨져 있는 것으로 알고 있으며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hierarchy&amp;nbsp;창에서의 오브젝트 &lt;b&gt;부모 자식 관계&lt;/b&gt;도 Transfrom에서 관리된다.&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-filename=&quot;blob&quot; data-origin-width=&quot;391&quot; data-origin-height=&quot;100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mpT8r/btsC39rgcL7/8kMCR4mDrfNfv2TCYcCwk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mpT8r/btsC39rgcL7/8kMCR4mDrfNfv2TCYcCwk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mpT8r/btsC39rgcL7/8kMCR4mDrfNfv2TCYcCwk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmpT8r%2FbtsC39rgcL7%2F8kMCR4mDrfNfv2TCYcCwk1%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;583&quot; height=&quot;100&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;391&quot; data-origin-height=&quot;100&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;필수 컴포넌트&lt;/b&gt;인 만큼 우리가 자주 접하고 사용하지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의외로 우리는 이 친구에 대해서 아는 것이 많이 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나를 포함, 대다수의 입문 개발자들은 보통&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;위치&lt;/b&gt;, &lt;b&gt;회전&lt;/b&gt;, &lt;b&gt;크기&lt;/b&gt;, 오브젝트 &lt;b&gt;부모 자식의 상속&lt;/b&gt;이라는 Transform의 &lt;b&gt;큼직한 역할&lt;/b&gt;만 알고 있지,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구체적으로 &lt;b&gt;어떤 세부 기능들&lt;/b&gt;이 있는지는 잘 모르는 경우가 많기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반에서 항상 반장을 도맡아 하고, 주변에서 친하게 안 지내본 친구가 없다는 엄청난 인싸 녀석이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정작 의외로 그 녀석이 어디에서 사는지, 평소에 속으로 무슨 생각을 하고 다니는지는 아무도 모르는,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비밀에 숨겨진 그런 인싸 친구랄까?&lt;/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;630&quot; data-origin-height=&quot;354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Aj4H2/btsCUAxavor/KrW5bbLPztHi4Zklf46BN0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Aj4H2/btsCUAxavor/KrW5bbLPztHi4Zklf46BN0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Aj4H2/btsCUAxavor/KrW5bbLPztHi4Zklf46BN0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAj4H2%2FbtsCUAxavor%2FKrW5bbLPztHi4Zklf46BN0%2Fimg.jpg&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;440&quot; height=&quot;247&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;354&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 그런 불쌍한 친구와 속을 터놓고 이야기해보고자,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Transform&lt;/b&gt;에 담겨있는 자세한 내용들을 &lt;b&gt;Position&lt;/b&gt;, &lt;b&gt;Rotation&lt;/b&gt;, &lt;b&gt;Scale&lt;/b&gt;, &lt;b&gt;Parent&lt;/b&gt;,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 &lt;b&gt;네 가지 분류&lt;/b&gt;로 나누어 알아볼 예정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자세한 이야기를 시작하기에 앞서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Transform 클래스&lt;/b&gt;는 사실 &lt;b&gt;Object 클래스&lt;/b&gt;를 상속한 &lt;b&gt;Component 클래스&lt;/b&gt;를 상속하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Mhsr8/btsCTXzs28M/zj5HsesRKt07K1NzpPqeg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Mhsr8/btsCTXzs28M/zj5HsesRKt07K1NzpPqeg1/img.png&quot; data-alt=&quot;Transform 클래스가 Component 클래스를 상속&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Mhsr8/btsCTXzs28M/zj5HsesRKt07K1NzpPqeg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMhsr8%2FbtsCTXzs28M%2Fzj5HsesRKt07K1NzpPqeg1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;547&quot; height=&quot;328&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Transform 클래스가 Component 클래스를 상속&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-filename=&quot;blob&quot; data-origin-width=&quot;488&quot; data-origin-height=&quot;348&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciVKiN/btsC4b3EZva/c1cziKlO5u4cnXztWUajt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciVKiN/btsC4b3EZva/c1cziKlO5u4cnXztWUajt1/img.png&quot; data-alt=&quot;그리고 Component 클래스가 Object 클래스를 상속 / 여기서 Object는 System.Object가 아닌 UnityEngine.Object&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciVKiN/btsC4b3EZva/c1cziKlO5u4cnXztWUajt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciVKiN%2FbtsC4b3EZva%2Fc1cziKlO5u4cnXztWUajt1%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;488&quot; height=&quot;348&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;488&quot; data-origin-height=&quot;348&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;그리고 Component 클래스가 Object 클래스를 상속 / 여기서 Object는 System.Object가 아닌 UnityEngine.Object&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때문에 &lt;b&gt;Transform 클래스&lt;/b&gt;는&amp;nbsp;&lt;b&gt;Component 클래스&lt;/b&gt;, &lt;b&gt;Object 클래스&lt;/b&gt;가 가지고 있는 속성들을 모두 공통적으로 가지고 있으며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것들에 대한 설명은 본 게시물에서 따로 다루지 않을 생각이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Transform 고유의 속성들만으로도 충분히 양이 많다.&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-filename=&quot;blob&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;457&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJpk3G/btsCVF55Si5/AgKOzNlgjXGbC5pgnmeP2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJpk3G/btsCVF55Si5/AgKOzNlgjXGbC5pgnmeP2k/img.png&quot; data-alt=&quot;친구랑 제대로 대화 해보기도 전에 아빠랑 할아버지가 누군지까지 알아버렸다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJpk3G/btsCVF55Si5/AgKOzNlgjXGbC5pgnmeP2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJpk3G%2FbtsCVF55Si5%2FAgKOzNlgjXGbC5pgnmeP2k%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;476&quot; height=&quot;429&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;457&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;&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;Transform의 속성 중 &lt;b&gt;너무 유명한 녀석들&lt;/b&gt;은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. Position&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;1) public Vector3 forward, right, up&lt;/span&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;537&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dprg9Q/btsCZhYaqmz/MWPSS7zd7ZyBGxVf3Qicm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dprg9Q/btsCZhYaqmz/MWPSS7zd7ZyBGxVf3Qicm1/img.png&quot; data-alt=&quot;파란색이 forward, 빨간색이 right, 초록색이 up&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dprg9Q/btsCZhYaqmz/MWPSS7zd7ZyBGxVf3Qicm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdprg9Q%2FbtsCZhYaqmz%2FMWPSS7zd7ZyBGxVf3Qicm1%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;295&quot; height=&quot;241&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;537&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;파란색이 forward, 빨간색이 right, 초록색이 up&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: #9d9d9d;&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: #9d9d9d;&quot;&gt;오브젝트를 기준으로 세 가지 방향축을 나타내는 3차원 벡터이다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;2) public Vector3 position, &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;localPosition&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;마찬가지로 이미 유명하다.&lt;/span&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;position은 오브젝트의 world 상에서의 좌표를 나타내는 3차원 벡터,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;localPosition은 부모(0, 0, 0)를 기준으로 했을 때의 상대적인 좌표를 나타내는 3차원 벡터이다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3) public Matrix4x4 localToWorldMatrix, worldToLocalMatrix&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;localPostion&lt;/b&gt;(로컬 좌표계)을 &lt;b&gt;position&lt;/b&gt;(월드 좌표계)으로,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;position&lt;/b&gt;(월드 좌표계)을 &lt;b&gt;localPosition&lt;/b&gt;(로컬 좌표계)으로 &lt;b&gt;변환&lt;/b&gt;하는 데에 사용되는 &lt;b&gt;4차원 변환행렬&lt;/b&gt;이다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;localToWorldMatrix 행렬&lt;/b&gt;을 &lt;b&gt;localPosition&lt;/b&gt; 앞에,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;혹은 &lt;b&gt;worldToLocalMatrix 행렬&lt;/b&gt;을 &lt;b&gt;position&lt;/b&gt; 앞에 곱하여 &lt;b&gt;좌표계가 변환&lt;/b&gt;된 결과를 얻어낼 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;왜 월드 좌표계와 로컬 좌표계를 오가는데 4차원 행렬을 곱하느냐?&lt;/b&gt; 한다면...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 &lt;b&gt;단순 좌표계 변환&lt;/b&gt; 뿐만 아니라 &lt;b&gt;위치&lt;/b&gt;, &lt;b&gt;회전&lt;/b&gt;, &lt;b&gt;크기 조정&lt;/b&gt; 모두 &lt;b&gt;4차원 행렬&lt;/b&gt;의 &lt;b&gt;곱&lt;/b&gt;으로 표현할 수 있고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로도 &lt;b&gt;Transform의 작동 원리&lt;/b&gt; 또한 그러하기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;224&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVxhyX/btsC33ybFab/eKxfVL9TKSIDbksd2NRHok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVxhyX/btsC33ybFab/eKxfVL9TKSIDbksd2NRHok/img.png&quot; data-alt=&quot;(tx, ty, tz)만큼 위치 이동 변환&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVxhyX/btsC33ybFab/eKxfVL9TKSIDbksd2NRHok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVxhyX%2FbtsC33ybFab%2FeKxfVL9TKSIDbksd2NRHok%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;407&quot; height=&quot;224&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;224&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(tx, ty, tz)만큼 위치 이동 변환&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;299&quot; data-origin-height=&quot;127&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r4oc2/btsC2BWdjav/OmoCvmJdw0V0ph9zu57n3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r4oc2/btsC2BWdjav/OmoCvmJdw0V0ph9zu57n3k/img.png&quot; data-alt=&quot;&amp;amp;amp;theta;각만큼 z축 회전 변환&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r4oc2/btsC2BWdjav/OmoCvmJdw0V0ph9zu57n3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr4oc2%2FbtsC2BWdjav%2FOmoCvmJdw0V0ph9zu57n3k%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;302&quot; height=&quot;128&quot; data-origin-width=&quot;299&quot; data-origin-height=&quot;127&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;&amp;amp;theta;각만큼 z축 회전 변환&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;813&quot; data-origin-height=&quot;225&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bg36gO/btsC0XS0kVi/ItFdDfpLwVldXRVkOIkANk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bg36gO/btsC0XS0kVi/ItFdDfpLwVldXRVkOIkANk/img.png&quot; data-alt=&quot;(sx, sy, sz)만큼 확대/축소 변환&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bg36gO/btsC0XS0kVi/ItFdDfpLwVldXRVkOIkANk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg36gO%2FbtsC0XS0kVi%2FItFdDfpLwVldXRVkOIkANk%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;418&quot; height=&quot;116&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;225&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(sx, sy, sz)만큼 확대/축소 변환&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;813&quot; data-origin-height=&quot;225&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lm78A/btsCZkt8VWI/LkB6XOs4MRx86FFQWrcKWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lm78A/btsCZkt8VWI/LkB6XOs4MRx86FFQWrcKWk/img.png&quot; data-alt=&quot;이렇게 해서 좌표계 변환 또한 행렬의 곱으로 나타낼 수 있다. 좌표계 변환 역시 위치 이동, 회전, 확대/축소의 연속일 것이므로.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lm78A/btsCZkt8VWI/LkB6XOs4MRx86FFQWrcKWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flm78A%2FbtsCZkt8VWI%2FLkB6XOs4MRx86FFQWrcKWk%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;202&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;225&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;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1704349702528&quot; class=&quot;reasonml&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;Vector3 lPosition = transform.localPosition;
Vector3 wPosition1 = transform.position;
Vector3 wPosition2 = transform.localToWorldMatrix
       			* new Vector4(lPosition.x, lPosition.y, lPosition.z, 1);

//is wPosition1 equivalent to wPosition2? &amp;lt;&amp;lt; yes&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리하여 좌표계 변환을 할 때 위 식에서 가운데에 곱해주는 &lt;b&gt;변환행렬&lt;/b&gt; 역할을 하는 것이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;localToWorldMatrix&lt;/b&gt;, &lt;b&gt;worldToLocalMatrix&lt;/b&gt; 인 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;곱해주기만 하면 원하는 좌표계에서의 좌표가 출력될 수 있게끔&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이동&lt;/b&gt;, &lt;b&gt;회전&lt;/b&gt; 등의 연산들이 &lt;b&gt;미리 적용&lt;/b&gt;되어 있는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;변환행렬계의 밀키트&lt;/b&gt;라 볼 수 있겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Transform 내에서 미리 계산하여 넘겨주는 것이기 때문에 당연히 &lt;b&gt;읽기 전용&lt;/b&gt;이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;수정&lt;/b&gt;이 &lt;b&gt;불가능&lt;/b&gt;하다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4) TransformDirection, InverseTransformDirection&lt;br /&gt;TransformPoint, InverseTransformPoint&lt;br /&gt;TransformVector, InverseTransformVector&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 위에서 설명했던 4차원 변환행렬 친구들과 비슷한 녀석들이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 아까 그 친구는 4차원 변환행렬을 제공하는 것에서 그쳤다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 녀석들은 &lt;b&gt;변환까지 직접 해주는 함수들&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;local&lt;/b&gt;에서의 &lt;b&gt;direction&lt;/b&gt;(forward, up, right)을 &lt;b&gt;world&lt;/b&gt;에서의 &lt;b&gt;direction&lt;/b&gt;으로,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;local&lt;/b&gt;에서의 &lt;b&gt;point&lt;/b&gt;를 &lt;b&gt;world&lt;/b&gt;에서의 &lt;b&gt;point&lt;/b&gt;로,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;local&lt;/b&gt;에서의 &lt;b&gt;vector&lt;/b&gt;를 &lt;b&gt;world&lt;/b&gt;에서의 &lt;b&gt;vector&lt;/b&gt;로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변환해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;Vector3 wForward&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;transform&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot;&gt;TransformDirection&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot;&gt;Vector3&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;forward&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot;&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Inverse&lt;/b&gt;가 붙었을 경우 전과는 반대로&lt;b&gt; world&lt;/b&gt;에서 &lt;b&gt;local&lt;/b&gt;로 변환해준다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;5) Translate&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;유명한 녀석이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;transform의 position 좌표를 이동시켜주는 함수이며,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;transform.position += new Vector3(speed * Time.deltaTime, 0, 0);&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&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: #9d9d9d;&quot;&gt;예)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;transform.translate(Vector3.forward * speed * TIme.deltaTime);&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. Rotation&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;1) public Vector3&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;eulerAngles, localEulerAngles&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;오브젝트의 회전각을 오일러각(Vector3)의 형태로 표현한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;local이 붙은 경우 world에서의 회전각이 아닌 부모 좌표계에서의 회전각을 나타낸다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;2) public Quaternion rotation, localRotation&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;오브젝트의 회전각을 쿼터니온(Quaternion)의 형태로 표현한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt; local이 붙은 경우 world에서의 회전각이 아닌 부모 좌표계에서의 회전각을 나타낸다.&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;u&gt;&lt;b&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;왜 회전각을 굳이 오일러각과 쿼터니온으로 구분해서 표현할까...?&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;에 대해서는 3주차(Quaternion)에서 알아볼 예정이다.&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3) LookAt&lt;/h4&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;150&quot; data-origin-height=&quot;238&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biWZS5/btsC32ziOig/kkuGUJsJXIhoaoetrIpcK0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biWZS5/btsC32ziOig/kkuGUJsJXIhoaoetrIpcK0/img.gif&quot; data-alt=&quot;transform.LookAt(장난감.transform);&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biWZS5/btsC32ziOig/kkuGUJsJXIhoaoetrIpcK0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/biWZS5/btsC32ziOig/kkuGUJsJXIhoaoetrIpcK0/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;211&quot; height=&quot;335&quot; data-origin-width=&quot;150&quot; data-origin-height=&quot;238&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;transform.LookAt(장난감.transform);&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;오브젝트&lt;/b&gt;의 &lt;b&gt;forward 벡터&lt;/b&gt;가 &lt;b&gt;특정 방향&lt;/b&gt;을 가리키도록 &lt;b&gt;자동으로 회전시켜주는 함수&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기에서 &lt;b&gt;특정 방향&lt;/b&gt;이라 함은 LookAt 함수에 인자로 전달받은 Transform을 바라보는 방향이다.&lt;/p&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;3차원 좌표계&lt;/b&gt;일 경우 단순히 바라보기만 한다면 문제가 조금 생길 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오브젝트가 말 그대로 목표 Transform을 '&lt;b&gt;바라보기만 하면&lt;/b&gt;' 되는 것이기 떄문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 원하지 않는 각도로 오브젝트가 &lt;b&gt;갸우뚱&lt;/b&gt;하면서 바라보는 상황이 생길 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VxKGo/btsCUBb8jpO/1Jt39kZ6reaudQF85ENRyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VxKGo/btsCUBb8jpO/1Jt39kZ6reaudQF85ENRyK/img.png&quot; data-origin-width=&quot;189&quot; data-origin-height=&quot;100&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;33.33&quot; data-filename=&quot;edited_edited_blob&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VxKGo/btsCUBb8jpO/1Jt39kZ6reaudQF85ENRyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVxKGo%2FbtsCUBb8jpO%2F1Jt39kZ6reaudQF85ENRyK%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;189&quot; height=&quot;100&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqAtww/btsC4vONdCs/6oCQxnDGWJK6JibcS23NY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqAtww/btsC4vONdCs/6oCQxnDGWJK6JibcS23NY1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;100&quot; data-origin-width=&quot;189&quot; data-widthpercent=&quot;33.33&quot; data-filename=&quot;edited_blob&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqAtww/btsC4vONdCs/6oCQxnDGWJK6JibcS23NY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqAtww%2FbtsC4vONdCs%2F6oCQxnDGWJK6JibcS23NY1%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;189&quot; height=&quot;100&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djnH53/btsC1Ig0PKn/JUHgDr9jAKDcaqEb5V4zuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djnH53/btsC1Ig0PKn/JUHgDr9jAKDcaqEb5V4zuk/img.png&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;100&quot; data-origin-width=&quot;189&quot; data-widthpercent=&quot;33.34&quot; data-filename=&quot;edited_edited_blob&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djnH53/btsC1Ig0PKn/JUHgDr9jAKDcaqEb5V4zuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjnH53%2FbtsC1Ig0PKn%2FJUHgDr9jAKDcaqEb5V4zuk%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;189&quot; height=&quot;100&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;3명의 박진영은 모두 당신을 잘 '바라보고' 있기 때문에 LookAt 함수는 잘 적용되고 있다. 다만 내가 저런 각도를 원하지 않을 뿐.&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;때문에 LookAt 함수의 인자로 바라볼 대상 Transform에다가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;윗벡터 Vector3&lt;/b&gt;를 하나 더 넣어주면 이런 문제를 해결할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;transform.LookAt(target,&amp;nbsp;Vector3.up);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오브젝트가 취할 수 있는 여러 각도 중 Transform 방향을 바라보는 각도는 &lt;b&gt;무수히 많으나&lt;/b&gt;,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 동시에 &lt;b&gt;제3의&amp;nbsp;윗벡터&lt;/b&gt;가 오브젝트의 &lt;b&gt;머리 위로 오게끔&lt;/b&gt; 하는 각도는 &lt;b&gt;단 하나로 결정&lt;/b&gt;되기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것으로 &lt;b&gt;원하는 모습의 회전&lt;/b&gt;을 만들어낼 수 있는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;212&quot; data-origin-height=&quot;138&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdly5j/btsC6SvRNMR/tDGCWqcbIKnNTjLOm4l3Lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdly5j/btsC6SvRNMR/tDGCWqcbIKnNTjLOm4l3Lk/img.png&quot; data-alt=&quot;이제 각도는 괜찮은데 걍 사진이 문제&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdly5j/btsC6SvRNMR/tDGCWqcbIKnNTjLOm4l3Lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbdly5j%2FbtsC6SvRNMR%2FtDGCWqcbIKnNTjLOm4l3Lk%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;223&quot; height=&quot;145&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;212&quot; data-origin-height=&quot;138&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;4) Rotate&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&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: #9d9d9d;&quot;&gt;현재 회전각에서 상대적인 수치만큼 회전시키고 싶다면&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;인자로 오일러각 Vector3를,&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: #9d9d9d;&quot;&gt;아예 절대적인 각도를 대입하고 싶다면&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;인자로 오일러각 Vector3와 함께 Space.World를 넣는다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5) RotateAround&lt;/h4&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-filename=&quot;bdacb1b3f5acb45b6baaf791773b139e24d17a40.gif&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;271&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcRV3O/btsC4H2KXmw/DYriz79Nzw4cIwcBHdkyjk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcRV3O/btsC4H2KXmw/DYriz79Nzw4cIwcBHdkyjk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcRV3O/btsC4H2KXmw/DYriz79Nzw4cIwcBHdkyjk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bcRV3O/btsC4H2KXmw/DYriz79Nzw4cIwcBHdkyjk/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;400&quot; height=&quot;226&quot; data-filename=&quot;bdacb1b3f5acb45b6baaf791773b139e24d17a40.gif&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;271&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Rotate는 항상 &lt;b&gt;오브젝트의 중심&lt;/b&gt;을 기준으로 회전하는 반면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RotateAround는 회전의 중심이 되는 &lt;b&gt;점 좌표 (Vector3)&lt;/b&gt;, &lt;b&gt;회전축&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; 벡터&amp;nbsp;&lt;/span&gt;(Vector3)&lt;/span&gt;&lt;/b&gt;, &lt;b&gt;회전각 (float)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 가지를 인자로 넘겨주면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;원하는 중심축&lt;/b&gt;을 기준으로, &lt;b&gt;원하는 각도&lt;/b&gt;만큼 오브젝트를 &lt;b&gt;회전&lt;/b&gt;시킬 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;h3 data-ke-size=&quot;size23&quot;&gt;3. Scale&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;1) public Vector3 localScale&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;흔히 쓰이는 transform의 크기 속성이다. 다만 parent 오브젝트에 대한 상대적인 크기라는 특징이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) public Vector3 lossyScale&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;world 좌표계를 기준으로 하는, 오브젝트의 &lt;b&gt;절대적인 크기&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;lossyScale은 &lt;b&gt;읽기 전용&lt;/b&gt;이기 때문에 우리가 &lt;b&gt;직접적으로 수정할 수 없다&lt;/b&gt;는 특징이 있지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;parent를 null로 설정해놓고 localScale을 원하는 크기만큼 조정한 다음,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 원래의 parent를 설정하는 식으로 lossyScale을 간접적으로 수정하는 방법이 있다.&lt;/p&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;h3 data-ke-size=&quot;size23&quot;&gt;4. Parent&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;1) public Transform root, parent&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;이름에서 알 수 있듯이, 해당 transform이 속한 오브젝트의 상위 오브젝트 transform을 저장해놓는 곳이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;transform.parent를 통해 자신의 부모 오브젝트의 transform을,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;transform.root을 통해 최상위 계층의 부모 오브젝트를 얻을 수 있다.&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: #9d9d9d;&quot;&gt;root의 경우 자신 위의 오브젝트가 존재하지 않으면 자기 자신을 반환하기 때문에 null이 나올 수 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;public void SetParent(Transform parent)를 통해 자신의 부모를 바꿀 수도 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;2) public int childCount&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;자신이 가지고 있는 child의 수를 반환한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;비활성화돼있는 child 역시 카운팅에 포함되며,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;모든 자식 오브젝트를 순회해야 할 일이 있을 때 유용하게 쓰인다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;3) Find, GetChild&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자신이 가지고 있는 child 중 &lt;b&gt;원하는 child&lt;/b&gt;를 얻어야 할 때 쓰인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Find&lt;/b&gt;의 경우에는 &lt;b&gt;오브젝트의 이름(string)&lt;/b&gt;을 인자로 받으며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;GetChild&lt;/b&gt;는 찾고자 하는 child가 몇 번째 child인지 그 &lt;b&gt;index(int)&lt;/b&gt;를 인자로 받는다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4) DetachChildren&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;346&quot; data-origin-height=&quot;144&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cf6xwP/btsC6x7qH9h/6KwzRgnYQiOOo52J6gFus0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cf6xwP/btsC6x7qH9h/6KwzRgnYQiOOo52J6gFus0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cf6xwP/btsC6x7qH9h/6KwzRgnYQiOOo52J6gFus0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cf6xwP/btsC6x7qH9h/6KwzRgnYQiOOo52J6gFus0/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;339&quot; height=&quot;141&quot; data-origin-width=&quot;346&quot; data-origin-height=&quot;144&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자신이 가지고 있는 &lt;b&gt;모든 child&lt;/b&gt;를 부모 자식 관계를 끊고 &lt;b&gt;unparent&lt;/b&gt; 시킨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;진짜 무서운 함수다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5) GetSiblingIndex, SetSiblingIndex&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부모의 child 중 &lt;b&gt;자신이 몇 번째인지&lt;/b&gt; 정보를 얻거나,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;몇 번째 child가 되겠다&lt;/b&gt;고 변경한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 child간의 &lt;b&gt;순서&lt;/b&gt;를 얻고&lt;b&gt; 수정&lt;/b&gt;하는 속성이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ssoWb/btsC6nX612q/OvXTskxKlKkxWO7c1QkkLK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ssoWb/btsC6nX612q/OvXTskxKlKkxWO7c1QkkLK/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ssoWb/btsC6nX612q/OvXTskxKlKkxWO7c1QkkLK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/ssoWb/btsC6nX612q/OvXTskxKlKkxWO7c1QkkLK/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;500&quot; height=&quot;200&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;200&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;584&quot; data-origin-height=&quot;411&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H8pUN/btsDaxrGo58/wuYZeP7cpi8FDCMmNH6cKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H8pUN/btsDaxrGo58/wuYZeP7cpi8FDCMmNH6cKk/img.png&quot; data-alt=&quot;오늘 서열 정리 좀 해야 쓰것다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H8pUN/btsDaxrGo58/wuYZeP7cpi8FDCMmNH6cKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH8pUN%2FbtsDaxrGo58%2FwuYZeP7cpi8FDCMmNH6cKk%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;216&quot; height=&quot;152&quot; data-origin-width=&quot;584&quot; data-origin-height=&quot;411&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;오늘 서열 정리 좀 해야 쓰것다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6) SetAsFirstSibling, SetAsLastSibling&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;형제(Sibling) 중 &lt;b&gt;첫 번째&lt;/b&gt;, 혹은 &lt;b&gt;마지막&lt;/b&gt; child로 순서를 변경한다.&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;500&quot; data-origin-height=&quot;250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QGeCB/btsC4CVBUVj/vZHdgphf1xjG3LvBRk1rmk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QGeCB/btsC4CVBUVj/vZHdgphf1xjG3LvBRk1rmk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QGeCB/btsC4CVBUVj/vZHdgphf1xjG3LvBRk1rmk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/QGeCB/btsC4CVBUVj/vZHdgphf1xjG3LvBRk1rmk/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;196&quot; height=&quot;98&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;250&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;etc.&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;public bool hasChanged&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Transform에 있는 속성 중 내게 &lt;b&gt;가장 생소한 속성&lt;/b&gt;이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;position, rotation, scale 등 Transform의 속성 중 &lt;b&gt;하나라도 변한 것&lt;/b&gt;이 있다면 &lt;b&gt;true&lt;/b&gt;를 &lt;b&gt;반환&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 우리의 기대와는 달리 우리가 따로 &lt;b&gt;Transform의 내용들을 수정한 적이 없어도&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;항상 매 프레임 true를 반환&lt;/b&gt;한다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 이유는 Transform의 속성 중 &lt;b&gt;hasTransform&lt;/b&gt;이라는 녀석이 있는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 녀석이 &lt;b&gt;매 프레임마다 true&lt;/b&gt;로 변경되고, &lt;b&gt;프레임이 끝날 때쯤 fasle&lt;/b&gt;로 변경된 뒤 프레임이 종료되기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;hasTransform&lt;/b&gt;의 변경 사실을 감지하고&lt;b&gt; hasChanged가 항상 true를 반환&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;때문에 false인 모습의 hasChanged를 보고 싶다면 개발자가 따로 타이밍을 정해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;hasTransform&lt;/b&gt; 녀석과 원만한 합의를 봐야할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아니면 직접 &lt;b&gt;hasTransform = false&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;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 해서 Transform 안에 있는 속성들에 대해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자주 쓸 일 있는, 혹은 &lt;b&gt;거의 써볼 일 없는 것들&lt;/b&gt;까지 전부 다 알아보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Transform 정도면 간단한 기능 몇 개 있는 만만한 녀석일 거라 생각했는데...&lt;br /&gt;양이 너무 많았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 바닥 겸손해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFKoHv/btsC2CHfsST/IS2ztuzLFAMp039hzL3u1K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFKoHv/btsC2CHfsST/IS2ztuzLFAMp039hzL3u1K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFKoHv/btsC2CHfsST/IS2ztuzLFAMp039hzL3u1K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFKoHv%2FbtsC2CHfsST%2FIS2ztuzLFAMp039hzL3u1K%2Fimg.jpg&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;421&quot; height=&quot;219&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;328&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;/p&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;style3&quot; /&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;a href=&quot;https://kjunwoo23.tistory.com/2&quot;&gt;0주차: 인트로 - 새롭고 신기한 것을 좋아하거나, 모르는 것을 알고 싶어 하는 마음&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/3&quot;&gt;1주차: Unity 엔진은 왜 개발 언어로 C#을 선택했을까?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/4&quot;&gt;2주차: 의외로&amp;nbsp;세상&amp;nbsp;잡다한&amp;nbsp;Transform에&amp;nbsp;대한&amp;nbsp;모든&amp;nbsp;것&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/5&quot;&gt;3주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (1/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/6&quot;&gt;4주차: EulerAngle아, Quaternion아, 둘이 싸우지 말고 사이좋게 지내야 한다~ (2/2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/7&quot;&gt;5주차: 헐크&amp;nbsp;아저씨도&amp;nbsp;깜짝&amp;nbsp;놀란&amp;nbsp;Unity&amp;nbsp;Render&amp;nbsp;Pipeline이&amp;nbsp;작동하는&amp;nbsp;과정&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/8&quot;&gt;6주차: 매 프레임 나보다 갓생 사는 Unity의 Life Cycle&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/9&quot;&gt;7주차: 남들보다 더 갓생 사는 Coroutine의 충격적인 정체&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/10&quot;&gt;8주차: 야물(YAML)딱진 그 녀석의 은밀한 속마음 - Unity Scene 파일 (.unity)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/11&quot;&gt;9주차: 내&amp;nbsp;과자&amp;nbsp;포장지&amp;nbsp;누가&amp;nbsp;버렸어?&amp;nbsp;-&amp;nbsp;meta&amp;nbsp;data&amp;nbsp;파일&amp;nbsp;(.meta)&amp;nbsp;파헤치기&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/12&quot;&gt;10주차: 철가방 채로 배달온 Unity 빌드 파일. 난 단무지 시킨 적 없는데, 왜 있지?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kjunwoo23.tistory.com/13&quot;&gt;11주차: 마무리 - 후기&lt;/a&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;</description>
      <category>내 맘대로 쓰는 Unity 심층분석 析深層分</category>
      <author>원펀치 쓰리 갓냥이</author>
      <guid isPermaLink="true">https://kjunwoo23.tistory.com/4</guid>
      <comments>https://kjunwoo23.tistory.com/4#entry4comment</comments>
      <pubDate>Sun, 7 Jan 2024 21:34:22 +0900</pubDate>
    </item>
  </channel>
</rss>