<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>서리 개인 개발 블로그</title>
    <link>https://srdeveloper.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 12 Aug 2026 14:42:35 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Seo_re:</managingEditor>
    <image>
      <title>서리 개인 개발 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/3327492/attach/ad87ddd3c723491aac41ad5d7f113331</url>
      <link>https://srdeveloper.tistory.com</link>
    </image>
    <item>
      <title>스프라이트 메쉬 제네레이터(Sprite mesh generator)</title>
      <link>https://srdeveloper.tistory.com/145</link>
      <description>&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;figure id=&quot;og_1717503483994&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - realnity09/SpriteMeshGen&quot; data-og-description=&quot;Contribute to realnity09/SpriteMeshGen development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/realnity09/SpriteMeshGen&quot; data-og-url=&quot;https://github.com/realnity09/SpriteMeshGen&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/JwmNk/hyWhaYL611/j2u6DQq3Mji8Otoyl5ASik/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/realnity09/SpriteMeshGen&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/realnity09/SpriteMeshGen&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/JwmNk/hyWhaYL611/j2u6DQq3Mji8Otoyl5ASik/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - realnity09/SpriteMeshGen&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to realnity09/SpriteMeshGen development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프라이트의 Custom outline이나 Custom physics shape 정보를 바탕으로 Mesh를 생성하는 커스텀 에디터다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;렌더링 되는 에셋들은 2D지만 3D물리를 사용해야해서 만들게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;※ Mesh collider에 사용할 메쉬 데이터이기 때문에 uv 설정은 따로 하지 않았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;에디터 경로&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-06-03 221424.png&quot; data-origin-width=&quot;341&quot; data-origin-height=&quot;68&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QSm7U/btsHL7DCOlZ/RxcKNGPPO1SgSyd89gKkvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QSm7U/btsHL7DCOlZ/RxcKNGPPO1SgSyd89gKkvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QSm7U/btsHL7DCOlZ/RxcKNGPPO1SgSyd89gKkvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQSm7U%2FbtsHL7DCOlZ%2FRxcKNGPPO1SgSyd89gKkvK%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;341&quot; height=&quot;68&quot; data-filename=&quot;스크린샷 2024-06-03 221424.png&quot; data-origin-width=&quot;341&quot; data-origin-height=&quot;68&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지를 임포트한 뒤, &lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;Custom&lt;/code&gt; -&amp;nbsp;&lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;Mesh&lt;/code&gt; -&amp;nbsp;&lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;Mesh generator&lt;/code&gt;를 클릭하면 Mesh generator 창이 열리는것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;에디터 설명&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-06-03 221841.png&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qf4jF/btsHMuZCR40/ZGOYdfH7ciLIq36qY7fge0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qf4jF/btsHMuZCR40/ZGOYdfH7ciLIq36qY7fge0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qf4jF/btsHMuZCR40/ZGOYdfH7ciLIq36qY7fge0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqf4jF%2FbtsHMuZCR40%2FZGOYdfH7ciLIq36qY7fge0%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;569&quot; height=&quot;354&quot; data-filename=&quot;스크린샷 2024-06-03 221841.png&quot; data-origin-width=&quot;569&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;&lt;b&gt;1. Target save path :&lt;/b&gt; Generate한 메쉬가 저장될 디렉토리를 설정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Target sprite :&lt;/b&gt; 메쉬로 Generate할 스프라이트를 선택한다. (스프라이트를 선택해야 하단 설정이 활성화 된다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. Target vertices&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;b&gt;- Physics shape :&lt;/b&gt; Custom physics shape 정점을 바탕으로 메쉬를 Generate한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;b&gt;- Out line :&lt;/b&gt; Custom outline 정점을 바탕으로 메쉬를 Generate한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. Thickness :&lt;/b&gt; 메쉬의 두께(Z축)의 수치이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. Generate :&lt;/b&gt; 메쉬를 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;※ 스프라이트의 정점 정보를 수정했을 때, 기존 메쉬를 지웠다가 재생성 할 필요 없이 Generate 해주면 메쉬를 변경한 정점 정보 대상으로 업데이트 해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;※ 메쉬를 업데이트 했을 시, Scene에 적용되어있는 메쉬가 업데이트 전의 메쉬로 보일텐데 이건 해당 Scene에서 갱신이 안되서 그렇지 업데이트가 되지 않은것이 아니다. (Play 모드를 해주거나 Scene을 다시 열면 업데이트 된 메쉬로 확인이 가능하다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;스프라이트 에디터&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 스프라이트 에디터에 대해서 잘 모른다면 다음 메뉴얼 참고&lt;/p&gt;
&lt;figure id=&quot;og_1717421512610&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;스프라이트 에디터 - Unity 매뉴얼&quot; data-og-description=&quot;스프라이트 텍스처에 단 하나의 그래픽 요소만 있는 경우가 있으나 관련된 여러 그래픽스를 하나의 이미지로 합치는 게 더욱 편리할 때가 많습니다. 예를 들어 바퀴가 차체와는 독립적으로 움&quot; data-og-host=&quot;docs.unity3d.com&quot; data-og-source-url=&quot;https://docs.unity3d.com/kr/2021.3/Manual/SpriteEditor.html&quot; data-og-url=&quot;https://docs.unity3d.com/kr/2021.3/Manual/SpriteEditor.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b1T2e5/hyWdmzDeMN/FXARzCechEYFvxyGsI9rKK/img.png?width=520&amp;amp;height=126&amp;amp;face=267_33_337_119&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/2021.3/Manual/SpriteEditor.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.unity3d.com/kr/2021.3/Manual/SpriteEditor.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b1T2e5/hyWdmzDeMN/FXARzCechEYFvxyGsI9rKK/img.png?width=520&amp;amp;height=126&amp;amp;face=267_33_337_119');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;스프라이트 에디터 - Unity 매뉴얼&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;스프라이트 텍스처에 단 하나의 그래픽 요소만 있는 경우가 있으나 관련된 여러 그래픽스를 하나의 이미지로 합치는 게 더욱 편리할 때가 많습니다. 예를 들어 바퀴가 차체와는 독립적으로 움&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.unity3d.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-06-03 222958.png&quot; data-origin-width=&quot;241&quot; data-origin-height=&quot;166&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A4dwC/btsHNFFRMpY/HkARFV6t9mBWLrzjoDyAN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A4dwC/btsHNFFRMpY/HkARFV6t9mBWLrzjoDyAN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A4dwC/btsHNFFRMpY/HkARFV6t9mBWLrzjoDyAN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA4dwC%2FbtsHNFFRMpY%2FHkARFV6t9mBWLrzjoDyAN1%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;241&quot; height=&quot;166&quot; data-filename=&quot;스크린샷 2024-06-03 222958.png&quot; data-origin-width=&quot;241&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;- Physics shape로 메쉬를 생성하려 할 시, 스프라이트 에디터에서 좌측 상단 드롭다운 메뉴를 클릭한 뒤, Custom physics shape을 선택한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Outline으로 메쉬를 생성하려 할 시, 스프라이트 에디터에서 좌측 상단 드롭다운 메뉴를 클릭한 뒤, Custom Oueline을 선택한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;※ 정점을 배치한 뒤 반드시 우측 상단의 Apply를 눌러서 저장해야 정상적으로 메쉬가 Generate된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;주의사항&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-06-03 224556.png&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yRgFf/btsHOk84TPv/jpO6bf14HZCveKfZNeiHck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yRgFf/btsHOk84TPv/jpO6bf14HZCveKfZNeiHck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yRgFf/btsHOk84TPv/jpO6bf14HZCveKfZNeiHck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyRgFf%2FbtsHOk84TPv%2FjpO6bf14HZCveKfZNeiHck%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;396&quot; height=&quot;402&quot; data-filename=&quot;스크린샷 2024-06-03 224556.png&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;402&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 스프라이트 에디터에서 Custom physics shape로 정점 생성 후, 메쉬를 Generate하면 메쉬가 비정상적인 모양으로 생성될 때가 있다. (Custom physics shape은 triangle 정보가 없기 때문에...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;※ Outline은 정점 위치 상관 없이 정상적으로 생성된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 렌더링쪽 지식이 조금이라도 있으면 제대로 나오게 정점 위치를 수정할 수 있겠지만, 만약 지식이 없는 사람은 정상적으로 모양이 나올때까지 정점들 위치를 시계방향으로 한칸씩 돌려서 Generate하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Develoment/Unity</category>
      <category>Unity</category>
      <author>Seo_re:</author>
      <guid isPermaLink="true">https://srdeveloper.tistory.com/145</guid>
      <comments>https://srdeveloper.tistory.com/145#entry145comment</comments>
      <pubDate>Tue, 4 Jun 2024 21:18:27 +0900</pubDate>
    </item>
    <item>
      <title>안드로이드 기기에서 앱 실행시 크래시 나는 문제(libunity.so)</title>
      <link>https://srdeveloper.tistory.com/144</link>
      <description>&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;URP 프로젝트에서 Unity chan 모델을 사용하여 간단한 조작을 할 수 있는 게임을 만든후 빌드, 앱을 실행해봤는데 실행하자마자 앱 크래시가 발생했다.&lt;/p&gt;
&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_1717312787488&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;05-13 10:35:14.027 26023 26045 E CRASH   : #00 pc 000000000046afa8  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #01 pc 0000000000abbdec  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #02 pc 0000000000abbfec  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #03 pc 0000000000abbf6c  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #04 pc 00000000005cd30c  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #05 pc 00000000005cfd5c  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #06 pc 00000000004a6330  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #07 pc 00000000004a7138  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #08 pc 00000000004a7d4c  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #09 pc 00000000004a8934  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #10 pc 0000000000601904  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #11 pc 0000000000615cd4  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/lib/arm64/libunity.so (BuildId: 58c4416265a9495b)
05-13 10:35:14.027 26023 26045 E CRASH   : #12 pc 000000000000430c  /data/app/com.UnityTechnologies.com.unity.template.urpblank-KJ_9V9jr1KDZTayNFGuYCA==/oat/arm64/base.odex&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뭔지는 자세히 모르겠지만 libunity.so가 눈에 띄고, 유니티짱 모델의 툰 쉐이더가 Experimental이라 너무 의심이 가서 1차로 유니티짱의 모델을 빼고 실행해보니 정상적으로 실행이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 libunity.so 관련 크래시에 대해서 찾아보니 Vulkan 그래픽스 API 때문에 발생하는 에러라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(다른 사람들은 Admob과 Firebase하고 그래픽스 API가 충돌된다고 하는데 쉐이더는 둘째치고 이런 서드파티 SDK가 충돌나는건 왜그런지 모르겠다..)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;해결방법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. &lt;/b&gt;&lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;Edit&lt;/code&gt; -&amp;nbsp;&lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;Project Settings&lt;/code&gt; -&amp;nbsp;&lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;Player&lt;/code&gt; -&amp;nbsp; &lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;Other Settings&lt;/code&gt; -&amp;nbsp;&lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;Rendering&lt;/code&gt; 카테고리에서 &lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;Auto Graphics API&lt;/code&gt;를 해제한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2.&lt;/b&gt; 해제를 하게되면 Graphics APIs를 설정할 수 있게 되는데, Default로 &lt;span style=&quot;color: #0593d3;&quot;&gt;Vulkan, OpenGLES3&lt;/span&gt; 순서로 설정되어 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3.&lt;/b&gt; 이 순서를 &lt;span style=&quot;color: #0593d3;&quot;&gt;OpenGLES3, Vulkan&lt;/span&gt; 순서로 변경하거나 &lt;span style=&quot;color: #0593d3;&quot;&gt;Vulkan을 삭제&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Develoment/Unity issue</category>
      <category>Android</category>
      <category>Error</category>
      <category>Unity</category>
      <author>Seo_re:</author>
      <guid isPermaLink="true">https://srdeveloper.tistory.com/144</guid>
      <comments>https://srdeveloper.tistory.com/144#entry144comment</comments>
      <pubDate>Sun, 2 Jun 2024 17:12:26 +0900</pubDate>
    </item>
    <item>
      <title>[언리얼] VRM Spring bone 적용하기</title>
      <link>https://srdeveloper.tistory.com/143</link>
      <description>&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;언리얼에서 VRM 아바타의 Spring bone을 애니메이션 블루프린트에서 사용할 수 있는데, 방법은 아래와 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-03-10 175711.png&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dlo1kK/btsFHtgZv6K/3Cs6ok4HmzXJ8ZDYXDxZEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dlo1kK/btsFHtgZv6K/3Cs6ok4HmzXJ8ZDYXDxZEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dlo1kK/btsFHtgZv6K/3Cs6ok4HmzXJ8ZDYXDxZEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdlo1kK%2FbtsFHtgZv6K%2F3Cs6ok4HmzXJ8ZDYXDxZEK%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;1000&quot; height=&quot;470&quot; data-filename=&quot;스크린샷 2024-03-10 175711.png&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VrmSpringBone이라는 노드를 연결해서 Ouput Pose 노드에 연결하면 헤어라던지, 옷이라던지 Spring bone에 적용되어있는 본이 움직이는것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 위와 같이 노드를 적용했음에도 움직이지 않으면 Spring bone 데이터가 없는것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언리얼에서 VRM을 임포트하면 같이 생성되는 에셋 중, meta 파일이 존재할 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-03-09 143108.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;262&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/woMor/btsFIvZKe6f/W9U3aCasXlTuTcGnriPG9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/woMor/btsFIvZKe6f/W9U3aCasXlTuTcGnriPG9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/woMor/btsFIvZKe6f/W9U3aCasXlTuTcGnriPG9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwoMor%2FbtsFIvZKe6f%2FW9U3aCasXlTuTcGnriPG9k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;727&quot; height=&quot;262&quot; data-filename=&quot;스크린샷 2024-03-09 143108.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;262&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;meta 파일을 열어보면 Rendering 카테고리에 &lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;VRMSpring Meta&lt;/code&gt;가 있는데 Array element를 확인해보면 0으로 표시된 것을 확인할 수 있을것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VRM 아바타에 Spring bone을 사용하고 싶으면 여기에 데이터가 들어가 있어야 정상적으로 작동한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언리얼에서 Array element로 추가해줄 수도 있는거 같긴 하지만(직접 해보지는 않음), 필자는 유니티에서 작업하는게 더 수월하다고 판단하여 유니티에서의 해결방법을 서술한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;해결방법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 유니티에서 익스포트한 VRM 에셋을 유니티로 임포트&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VRM 에셋을 임포트한 뒤, 아바타의 프리팹을 씬에 로드한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 아바타의 하이어라키를 확인해보면 &lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;Secondary&lt;/code&gt;게임오브젝트를 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-03-11 181536.png&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;336&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r1XTR/btsFGC6zVwC/cv0rasRPXQpma4ll3rN2y0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r1XTR/btsFGC6zVwC/cv0rasRPXQpma4ll3rN2y0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r1XTR/btsFGC6zVwC/cv0rasRPXQpma4ll3rN2y0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr1XTR%2FbtsFGC6zVwC%2Fcv0rasRPXQpma4ll3rN2y0%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;500&quot; height=&quot;336&quot; data-filename=&quot;스크린샷 2024-03-11 181536.png&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;336&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;2. VRM Spring Bone 컴포넌트 설정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;Secondary&lt;/code&gt;를 클릭한 뒤, 인스펙터창을 확인해보면 &lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;VRM Spring Bone&lt;/code&gt;컴포넌트를 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 컴포넌트에서 &lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;Root Bones&lt;/code&gt;에 Spring Bone을 적용할 본의 루트를 넣어주면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-03-11 181524.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;875&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Xv76z/btsFHmPzSKH/h3mCtWwQ2fnf2Y8OqCWTK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Xv76z/btsFHmPzSKH/h3mCtWwQ2fnf2Y8OqCWTK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Xv76z/btsFHmPzSKH/h3mCtWwQ2fnf2Y8OqCWTK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXv76z%2FbtsFHmPzSKH%2Fh3mCtWwQ2fnf2Y8OqCWTK1%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;719&quot; height=&quot;875&quot; data-filename=&quot;스크린샷 2024-03-11 181524.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;875&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;※ 헤어가 움직이면서 몸통을 뚫는 현상은 Collider 카테고리를 설정해주면 된다.&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;3. 설정한 아바타를 다시 Export해준 뒤, 언리얼로 Import한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언리얼로 임포트한 뒤, meta 파일을 열어서 &lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;VRMSpring Meta&lt;/code&gt;의 데이터를 확인해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-03-11 182505.png&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmgJLA/btsFJBZwaSM/LGPT6ELSRhvkSs1QkzSvXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmgJLA/btsFJBZwaSM/LGPT6ELSRhvkSs1QkzSvXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmgJLA/btsFJBZwaSM/LGPT6ELSRhvkSs1QkzSvXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmgJLA%2FbtsFJBZwaSM%2FLGPT6ELSRhvkSs1QkzSvXk%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;700&quot; height=&quot;258&quot; data-filename=&quot;스크린샷 2024-03-11 182505.png&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;258&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 &lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;VRMSpring Meta&lt;/code&gt; 항목에 Array elements에 데이터가 들어가있는 것을 확인할 수 있다.&lt;/p&gt;
&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: #0593d3;&quot;&gt;+) 위와 같이 했는데도 Spring bone이 작동하지 않는 경우&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;애니메이션 블루프린트 파일을 열어서 VrmSpringBone노드를 클릭해서 Detail을 확인하면 Vrm Meta Object가 비어있을 수 있기 때문에 확인 후, Meta 파일을 설정해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-03-11 182901.png&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;712&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QXo0P/btsFI5fDPXi/kXfsuAqcjWk3TDW9OBhpK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QXo0P/btsFI5fDPXi/kXfsuAqcjWk3TDW9OBhpK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QXo0P/btsFI5fDPXi/kXfsuAqcjWk3TDW9OBhpK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQXo0P%2FbtsFI5fDPXi%2FkXfsuAqcjWk3TDW9OBhpK0%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;678&quot; height=&quot;712&quot; data-filename=&quot;스크린샷 2024-03-11 182901.png&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;712&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;결과&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;03084-ezgif.com-video-to-gif-converter.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjBVGp/btsFGVY9xP5/WObcUPN8z2FiNCBGbR6J6K/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjBVGp/btsFGVY9xP5/WObcUPN8z2FiNCBGbR6J6K/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjBVGp/btsFGVY9xP5/WObcUPN8z2FiNCBGbR6J6K/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bjBVGp/btsFGVY9xP5/WObcUPN8z2FiNCBGbR6J6K/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;338&quot; data-filename=&quot;03084-ezgif.com-video-to-gif-converter.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Develoment/Unreal</category>
      <category>Unreal</category>
      <category>VRM</category>
      <author>Seo_re:</author>
      <guid isPermaLink="true">https://srdeveloper.tistory.com/143</guid>
      <comments>https://srdeveloper.tistory.com/143#entry143comment</comments>
      <pubDate>Mon, 11 Mar 2024 18:48:18 +0900</pubDate>
    </item>
    <item>
      <title>[언리얼] 애니메이션 리타게팅 시, 루트 모션이 적용되는 문제</title>
      <link>https://srdeveloper.tistory.com/142</link>
      <description>&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;원인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리타게터 파일의 Root 체인의 옵션이 제대로 설정되어 있지 않을 때, 이런 현상이 일어난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;해결 방법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리타게터 파일을 열어서 Root 체인을 눌러서 디테일 창을 확인한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-03-08 194552.png&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;1113&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bN73dz/btsFDA8YsBk/1k0w7GWzQ0y0vKQo9APoA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bN73dz/btsFDA8YsBk/1k0w7GWzQ0y0vKQo9APoA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bN73dz/btsFDA8YsBk/1k0w7GWzQ0y0vKQo9APoA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbN73dz%2FbtsFDA8YsBk%2F1k0w7GWzQ0y0vKQo9APoA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;716&quot; height=&quot;1113&quot; data-filename=&quot;스크린샷 2024-03-08 194552.png&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;1113&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디테일 창에서 &lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;Translation Mode&lt;/code&gt;가 &lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;None&lt;/code&gt;으로 되어있을건데, &lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;Globally Scaled&lt;/code&gt;로 설정해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;결과&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;03083-ezgif.com-video-to-gif-converter.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVMOvX/btsFEOMBaPq/4haQbp4cxokpLYRk7ZFSK0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVMOvX/btsFEOMBaPq/4haQbp4cxokpLYRk7ZFSK0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVMOvX/btsFEOMBaPq/4haQbp4cxokpLYRk7ZFSK0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cVMOvX/btsFEOMBaPq/4haQbp4cxokpLYRk7ZFSK0/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;698&quot; height=&quot;338&quot; data-filename=&quot;03083-ezgif.com-video-to-gif-converter.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 캐릭터가 &lt;span style=&quot;color: #ef5369;&quot;&gt;Translation Mode가 None인 상태로 리타게팅&lt;/span&gt; 했을 경우, 아래 캐릭터가 &lt;span style=&quot;color: #ef5369;&quot;&gt;Translation Mode가 Globally Scaled 상태로 리타게팅&lt;/span&gt; 했을 경우의 애니메이션 시퀀스이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Develoment/Unreal</category>
      <category>Unreal</category>
      <author>Seo_re:</author>
      <guid isPermaLink="true">https://srdeveloper.tistory.com/142</guid>
      <comments>https://srdeveloper.tistory.com/142#entry142comment</comments>
      <pubDate>Sun, 10 Mar 2024 15:18:57 +0900</pubDate>
    </item>
    <item>
      <title>[언리얼] 애니메이션 Foot IK 적용 안되는 문제</title>
      <link>https://srdeveloper.tistory.com/141</link>
      <description>&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;※ 리타게터 수정 방법은 다음 포스팅 참고&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1709890141414&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[언리얼] VRM 리타게터 수정하기&quot; data-og-description=&quot;VRM을 언리얼로 Import하면 리타게터가 자동으로 생성되지만 데이터가 일부 손실된다. 그렇기 때문에 언리얼 Third person template의 애니메이션이 정상적으로 리타게팅 되지 않는다. 위와 같이 리타게&quot; data-og-host=&quot;srdeveloper.tistory.com&quot; data-og-source-url=&quot;https://srdeveloper.tistory.com/140&quot; data-og-url=&quot;https://srdeveloper.tistory.com/140&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/4nhMm/hyVugNLAHK/SWffcmkrruOfbnizqVyp50/img.gif?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/hGAqT/hyVxpvwsqN/5FCEpj4VMwoIlbZxHwnRj0/img.gif?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/bvXShG/hyVujwXkrv/GXazFivacr6RMDTNAxgAu0/img.png?width=803&amp;amp;height=464&amp;amp;face=0_0_803_464&quot;&gt;&lt;a href=&quot;https://srdeveloper.tistory.com/140&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://srdeveloper.tistory.com/140&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/4nhMm/hyVugNLAHK/SWffcmkrruOfbnizqVyp50/img.gif?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/hGAqT/hyVxpvwsqN/5FCEpj4VMwoIlbZxHwnRj0/img.gif?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/bvXShG/hyVujwXkrv/GXazFivacr6RMDTNAxgAu0/img.png?width=803&amp;amp;height=464&amp;amp;face=0_0_803_464');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[언리얼] VRM 리타게터 수정하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;VRM을 언리얼로 Import하면 리타게터가 자동으로 생성되지만 데이터가 일부 손실된다. 그렇기 때문에 언리얼 Third person template의 애니메이션이 정상적으로 리타게팅 되지 않는다. 위와 같이 리타게&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;srdeveloper.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;※ 해당 포스팅에 사용하는 Foot IK 관련 Control Rig는 기존 Third person template에 존재하는 Mannequin Control Rig를 복사해서 사용했으므로 VRM 대상으로 하는 Foot IK는 Mannequin Control Rig를 복사해서 사용하기 바람.&lt;/p&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;애니메이션을 리타게팅하여 적용했을 때, Foot IK가 적용이 되지 않아 다리가 바닥에 붙어버리는 문제가 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;0308-ezgif.com-video-to-gif-converter (1).gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xxkLX/btsFGlJfAPF/oSVESxsbH9Amr7oslWTjE0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xxkLX/btsFGlJfAPF/oSVESxsbH9Amr7oslWTjE0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xxkLX/btsFGlJfAPF/oSVESxsbH9Amr7oslWTjE0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/xxkLX/btsFGlJfAPF/oSVESxsbH9Amr7oslWTjE0/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;680&quot; height=&quot;338&quot; data-filename=&quot;0308-ezgif.com-video-to-gif-converter (1).gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 리타게터에 IK 관련 체인이 설정되어 있지 않기 때문이다. Mannequin 기준으로 IK 본을 가져와 Control Rig에서 IK 조절을 하는데, 해당 본이 정상적으로 리타게팅이 되지 않았으니 바닥에 다리가 붙어버리게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;원인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 언급했다시피, 애니메이션 시퀀스파일이나 리타게터 파일을 열어서 IK 본을 한번 확인해볼 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;03081-ezgif.com-video-to-gif-converter.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjM8sn/btsFFmIVmmb/HiYvYTbj5DSGZGGqWCM2g1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjM8sn/btsFFmIVmmb/HiYvYTbj5DSGZGGqWCM2g1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjM8sn/btsFFmIVmmb/HiYvYTbj5DSGZGGqWCM2g1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bjM8sn/btsFFmIVmmb/HiYvYTbj5DSGZGGqWCM2g1/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;683&quot; height=&quot;338&quot; data-filename=&quot;03081-ezgif.com-video-to-gif-converter.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애니메이션 시퀀스나 리타게터 파일을 열어서 애니메이션을 실행시킨 다음, 스켈레톤 트리에서 IK_foot 관련 본을 눌러보면 위와같이 본의 실시간 위치를 확인할 수 있는데, 제자리에 고정되어 있는것을 확인할 수 있다.&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;해결방법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. IK Rig 파일에 체인 생성 및 리타게터 소스체인 설정&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;2. Translation Mode 설정&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;스크린샷 2024-03-08 185104.png&quot; data-origin-width=&quot;1275&quot; data-origin-height=&quot;1123&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHubFa/btsFCyX7BRa/E19xKYWsRYdXiQz2soWjB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHubFa/btsFCyX7BRa/E19xKYWsRYdXiQz2soWjB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHubFa/btsFCyX7BRa/E19xKYWsRYdXiQz2soWjB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHubFa%2FbtsFCyX7BRa%2FE19xKYWsRYdXiQz2soWjB1%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;736&quot; height=&quot;1123&quot; data-filename=&quot;스크린샷 2024-03-08 185104.png&quot; data-origin-width=&quot;1275&quot; data-origin-height=&quot;1123&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리타게터에서 소스체인 설정 후, 해당 타겟 체인을 클릭해서 디테일 창을 확인해보면 &lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;Translation Mode&lt;/code&gt;라는 항목이 존재하는데 해당 항목으로 &lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;Absolute&lt;/code&gt;로 설정해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 설정을 한 뒤, 리타게터에서 IK_foot 본을 확인해보면 정상적으로 본의 위치가 변경되는 것을 눈으로 확인할 수있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;결과&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;03082-ezgif.com-video-to-gif-converter.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2Anrg/btsFFXPr0X2/QnACNVhguMlMscw7Nixpek/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2Anrg/btsFFXPr0X2/QnACNVhguMlMscw7Nixpek/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2Anrg/btsFFXPr0X2/QnACNVhguMlMscw7Nixpek/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/2Anrg/btsFFXPr0X2/QnACNVhguMlMscw7Nixpek/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;728&quot; height=&quot;338&quot; data-filename=&quot;03082-ezgif.com-video-to-gif-converter.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;338&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;※ 혹시나 다리의 애니메이션이 어색해보일 경우(다리를 크게 찢어서 달린다던지..), 위에서 설정했던 리타게터 창의 디테일 창에서 &lt;b&gt;Translation Alpha&lt;/b&gt; 옵션을 조절하여 적당한 위치를 잡아주면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0593d3;&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;b&gt;애니메이션 시퀀스 키값 변경 방법은 아래 영상 참고&lt;/b&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;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=Kc05p207wao&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/doJ9Qx/hyVuqbMNze/wwv4nr5DbkVDSqihetEjCk/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;Unreal Mannequin Feet Not Moving on Custom Animations - How to Fix&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/Kc05p207wao&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Develoment/Unreal</category>
      <category>Unreal</category>
      <author>Seo_re:</author>
      <guid isPermaLink="true">https://srdeveloper.tistory.com/141</guid>
      <comments>https://srdeveloper.tistory.com/141#entry141comment</comments>
      <pubDate>Sat, 9 Mar 2024 15:20:25 +0900</pubDate>
    </item>
    <item>
      <title>[언리얼] VRM 리타게터 수정하기</title>
      <link>https://srdeveloper.tistory.com/140</link>
      <description>&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;VRM을 언리얼로 Import하면 리타게터가 자동으로 생성되지만 데이터가 일부 손실된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 언리얼 Third person template의 애니메이션이 정상적으로 리타게팅 되지 않는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;0308-ezgif.com-video-to-gif-converter (1).gif&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGxpzR/btsFCwy00Kf/8QeCntltEAVZYlVMwr35t1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGxpzR/btsFCwy00Kf/8QeCntltEAVZYlVMwr35t1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGxpzR/btsFCwy00Kf/8QeCntltEAVZYlVMwr35t1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bGxpzR/btsFCwy00Kf/8QeCntltEAVZYlVMwr35t1/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;800&quot; height=&quot;450&quot; data-filename=&quot;0308-ezgif.com-video-to-gif-converter (1).gif&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;450&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;이 현상은 단순히 IK Rig 파일에 해당 체인이 존재하지 않아서 발생하는 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;해결방법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VRM을 언리얼로 임포트하면 같이 생성되는 IK Rig 파일이 있을건데 열어서 체인을 생성해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 Mannequin 모델의 애니메이션을 리타게팅할 것이므로, Mannequin의 IK Rig파일의 체인 목록과 비교한 뒤, 없는 부분을 추가해서&amp;nbsp;&lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;Start bone&lt;/code&gt;과 &lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;End bone&lt;/code&gt;을 설정해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 체인 생성&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-03-08 170419.png&quot; data-origin-width=&quot;557&quot; data-origin-height=&quot;236&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuUyrg/btsFEOFtD3D/hgpsWNswDebsUJIaGDB9CK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuUyrg/btsFEOFtD3D/hgpsWNswDebsUJIaGDB9CK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuUyrg/btsFEOFtD3D/hgpsWNswDebsUJIaGDB9CK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuUyrg%2FbtsFEOFtD3D%2FhgpsWNswDebsUJIaGDB9CK%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;236&quot; data-filename=&quot;스크린샷 2024-03-08 170419.png&quot; data-origin-width=&quot;557&quot; data-origin-height=&quot;236&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IK Rig파일을 열어서&amp;nbsp;&lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;Add New Chain&lt;/code&gt;버튼을 눌러서 체인을 생성해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필자의 기준으로는 다리가 없었으므로 RightLeg와 LeftLeg 체인을 생성해서 본을 설정해줬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 본 설정&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-03-08 171741.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;89&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bg0gML/btsFF0d6JIq/KWxuG6yvO6KkkPjlSKJzhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bg0gML/btsFF0d6JIq/KWxuG6yvO6KkkPjlSKJzhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bg0gML/btsFF0d6JIq/KWxuG6yvO6KkkPjlSKJzhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg0gML%2FbtsFF0d6JIq%2FKWxuG6yvO6KkkPjlSKJzhk%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;1169&quot; height=&quot;89&quot; data-filename=&quot;스크린샷 2024-03-08 171741.png&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;89&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은 아마 VRM 모델마다 다를거기 때문에 각자 모델을 확인한 뒤, 다리 시작부 부터 발 까지 설정해준뒤 저장하자.&lt;/p&gt;
&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-03-08 172546.png&quot; data-origin-width=&quot;803&quot; data-origin-height=&quot;464&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/79N0J/btsFD6ffaRZ/c7qsht1H9bswzwKgjVIPXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/79N0J/btsFD6ffaRZ/c7qsht1H9bswzwKgjVIPXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/79N0J/btsFD6ffaRZ/c7qsht1H9bswzwKgjVIPXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F79N0J%2FbtsFD6ffaRZ%2Fc7qsht1H9bswzwKgjVIPXk%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;590&quot; height=&quot;464&quot; data-filename=&quot;스크린샷 2024-03-08 172546.png&quot; data-origin-width=&quot;803&quot; data-origin-height=&quot;464&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리타게터를 보면 위와 같이 타겟 체인이 생겨있고 소스 체인에는 None으로 표시되어 있다.&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;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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;03081-ezgif.com-video-to-gif-converter (2).gif&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTrZD4/btsFB7sKIhq/Y4dZxAbs81WZxV8D75MmSK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTrZD4/btsFB7sKIhq/Y4dZxAbs81WZxV8D75MmSK/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTrZD4/btsFB7sKIhq/Y4dZxAbs81WZxV8D75MmSK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bTrZD4/btsFB7sKIhq/Y4dZxAbs81WZxV8D75MmSK/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;800&quot; height=&quot;450&quot; data-filename=&quot;03081-ezgif.com-video-to-gif-converter (2).gif&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;450&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Develoment/Unreal</category>
      <category>Unreal</category>
      <category>VRM</category>
      <author>Seo_re:</author>
      <guid isPermaLink="true">https://srdeveloper.tistory.com/140</guid>
      <comments>https://srdeveloper.tistory.com/140#entry140comment</comments>
      <pubDate>Fri, 8 Mar 2024 17:45:40 +0900</pubDate>
    </item>
    <item>
      <title>[언리얼] VRM 임포트한 모델의 BlendShape가 오작동하는 경우</title>
      <link>https://srdeveloper.tistory.com/139</link>
      <description>&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;유니티에서 Export한 VRM을 언리얼로 Import 했을 때, BlendShape가 비정상적으로 작동하는 에러가 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BlendShape를 조절하면 모델에 변화는 일어나는데 해당 키에 해당하는 Vertex가 앞뒤로만 움직이는 기현상이 발생했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;01.png&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;501&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uTRXT/btsFB2KWjqd/Qku0XqMMkxKYM63v3FOXdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uTRXT/btsFB2KWjqd/Qku0XqMMkxKYM63v3FOXdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uTRXT/btsFB2KWjqd/Qku0XqMMkxKYM63v3FOXdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuTRXT%2FbtsFB2KWjqd%2FQku0XqMMkxKYM63v3FOXdk%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;1000&quot; height=&quot;501&quot; data-filename=&quot;01.png&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;501&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 사진과 같이 오작동이 일어난다. VertCount 수가 잡히는거 보면 데이터도 잡혀있기 때문에 혹시 몰라 Mesh를 확인해봤지만..&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;02.png&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;517&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csp7ke/btsFEZzd6rA/AUFs7ELDEs9fISZgFfZY4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csp7ke/btsFEZzd6rA/AUFs7ELDEs9fISZgFfZY4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csp7ke/btsFEZzd6rA/AUFs7ELDEs9fISZgFfZY4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcsp7ke%2FbtsFEZzd6rA%2FAUFs7ELDEs9fISZgFfZY4K%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;1000&quot; height=&quot;517&quot; data-filename=&quot;02.png&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;517&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Mesh역시 이상없이 잡혀있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UniVRM의 다른 최신버전을 구해서 Export하면 정상적으로 움직이긴했지만, 언리얼로 Import하면 쉐이더가 맛이 가버려서 다른방법을 찾아봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;- 해결방법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방법은 최신버전을 버리는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VRM을 처음다뤄봐서 일단 최신버전만 구성해서 데이터를 Export했더니 최신버전에서 문제가 있는모양이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;● &lt;b&gt;유니티 버전 : 2019.4 LTS&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;● &lt;b&gt;UniVRM : 0.99 이하&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 버전으로 맞춘 뒤, VRM Export한 데이터를 언리얼로 Import하여 BlendShape를 조절하면 정상적으로 작동한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;03.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;516&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfVmCd/btsFBbVFT6t/jEuIzKXwUmVrx6clX4ppTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfVmCd/btsFBbVFT6t/jEuIzKXwUmVrx6clX4ppTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfVmCd/btsFBbVFT6t/jEuIzKXwUmVrx6clX4ppTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfVmCd%2FbtsFBbVFT6t%2FjEuIzKXwUmVrx6clX4ppTK%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;800&quot; height=&quot;516&quot; data-filename=&quot;03.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;516&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;UniVRM v0.99 Github : &lt;a href=&quot;https://github.com/vrm-c/UniVRM/releases/tag/v0.99.0&quot;&gt;Releases &amp;middot; vrm-c/UniVRM (github.com)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1709826182218&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Release v0.99.0 &amp;middot; vrm-c/UniVRM&quot; data-og-description=&quot;Unity-2019.4 の最終版です。 次から、最低バージョンを Unity-2020.3 に上げる予定です。 リリース前の動作チェックが Unity-2020.3 になります。 Download for Unity-2019.4.LTS or later UniVRM-0.99.0_f9ee.unitypackage &quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/vrm-c/UniVRM/releases/tag/v0.99.0&quot; data-og-url=&quot;https://github.com/vrm-c/UniVRM/releases/tag/v0.99.0&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dfBhEm/hyVujKnL76/AAnRnKKFBGr1q0bdJNvvKk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/vrm-c/UniVRM/releases/tag/v0.99.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/vrm-c/UniVRM/releases/tag/v0.99.0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dfBhEm/hyVujKnL76/AAnRnKKFBGr1q0bdJNvvKk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Release v0.99.0 &amp;middot; vrm-c/UniVRM&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Unity-2019.4 の最終版です。 次から、最低バージョンを Unity-2020.3 に上げる予定です。 リリース前の動作チェックが Unity-2020.3 になります。 Download for Unity-2019.4.LTS or later UniVRM-0.99.0_f9ee.unitypackage&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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>Develoment/Unreal</category>
      <category>Unreal</category>
      <category>VRM</category>
      <author>Seo_re:</author>
      <guid isPermaLink="true">https://srdeveloper.tistory.com/139</guid>
      <comments>https://srdeveloper.tistory.com/139#entry139comment</comments>
      <pubDate>Fri, 8 Mar 2024 01:00:13 +0900</pubDate>
    </item>
    <item>
      <title>명령패턴 실행취소 기능</title>
      <link>https://srdeveloper.tistory.com/138</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;※ 명령패턴 설명&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1709020032875&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;명령 패턴 (Command pattern)&quot; data-og-description=&quot;1. 명령패턴 (Command pattern) 명령(이동, 점프 등)에 대한 함수를 클래스로 래핑하여 해당 클래스를 객체화 한 것이다. 사용자(캐릭터)를 명령에 대한 매개변수로 만들어 요청을 대기시키거나 로깅&quot; data-og-host=&quot;srdeveloper.tistory.com&quot; data-og-source-url=&quot;https://srdeveloper.tistory.com/137&quot; data-og-url=&quot;https://srdeveloper.tistory.com/137&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dHa8QL/hyVqrnrgO9/3n9GM88jYzdwcEv4I42un1/img.png?width=536&amp;amp;height=332&amp;amp;face=0_0_536_332,https://scrap.kakaocdn.net/dn/bfmTf9/hyVqpC97SS/yyMKG1mzwOlIJZSWOqFs8K/img.png?width=536&amp;amp;height=332&amp;amp;face=0_0_536_332,https://scrap.kakaocdn.net/dn/C0sJs/hyVqoqJXG6/PVD6PJyGEzBIR4Gp9ml6g1/img.png?width=536&amp;amp;height=332&amp;amp;face=0_0_536_332&quot;&gt;&lt;a href=&quot;https://srdeveloper.tistory.com/137&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://srdeveloper.tistory.com/137&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dHa8QL/hyVqrnrgO9/3n9GM88jYzdwcEv4I42un1/img.png?width=536&amp;amp;height=332&amp;amp;face=0_0_536_332,https://scrap.kakaocdn.net/dn/bfmTf9/hyVqpC97SS/yyMKG1mzwOlIJZSWOqFs8K/img.png?width=536&amp;amp;height=332&amp;amp;face=0_0_536_332,https://scrap.kakaocdn.net/dn/C0sJs/hyVqoqJXG6/PVD6PJyGEzBIR4Gp9ml6g1/img.png?width=536&amp;amp;height=332&amp;amp;face=0_0_536_332');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;명령 패턴 (Command pattern)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. 명령패턴 (Command pattern) 명령(이동, 점프 등)에 대한 함수를 클래스로 래핑하여 해당 클래스를 객체화 한 것이다. 사용자(캐릭터)를 명령에 대한 매개변수로 만들어 요청을 대기시키거나 로깅&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;srdeveloper.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;h3 data-ke-size=&quot;size23&quot;&gt;1. 실행 취소 기능&lt;/h3&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;1433&quot; data-origin-height=&quot;428&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GJHhg/btsFhTVqXNS/9G28VjSJYwKIo4NkI6gqXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GJHhg/btsFhTVqXNS/9G28VjSJYwKIo4NkI6gqXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GJHhg/btsFhTVqXNS/9G28VjSJYwKIo4NkI6gqXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGJHhg%2FbtsFhTVqXNS%2F9G28VjSJYwKIo4NkI6gqXk%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;1433&quot; height=&quot;428&quot; data-origin-width=&quot;1433&quot; data-origin-height=&quot;428&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 Command 객체에 대한 List를 만들고 추가 명령이 생성되면 List의 맨 끝에 추가한 뒤, 현재 명령으로 기억하면 된다. Undo의 기능만 넣게되면 현재명령은 지워주고 현재 명령을 이전 명령으로 위치를 잡아주면 되고, Redo 기능을 같이 추가하게되면 실행 취소 전의 명령은 그대로 살려주면 될것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 예시 코드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2-1) Command(추상 클래스)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1709018964945&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public abstract class Command
{
    protected int direction;
    protected Actor actor;

    public abstract void Execute(Actor actor);
    public abstract void ExecuteAxis(Actor actor);
    public abstract void Undo();
}&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;2-2) VerticalCommand(Command 상속)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1709018999054&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using UnityEngine;

public class VerticalCommand : Command
{
    public VerticalCommand(Actor actor, int direction)
    {
        this.actor = actor;
        this.direction = direction;
    }
    public override void Execute(Actor actor)
    {
        
    }

    public override void ExecuteAxis(Actor actor)
    {
        actor.MoveTo(new Vector2(0, direction));
    }

    public override void Undo()
    {
        actor.MoveTo(new Vector2(0, -direction));
    }
}&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;2-3) HorizontalCommand(Command 상속)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1709019028406&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using UnityEngine;

public class HorizontalCommand : Command
{
    public HorizontalCommand(Actor actor, int direction)
    {
        this.actor = actor;
        this.direction = direction;
    }
    public override void Execute(Actor actor)
    {
        
    }

    public override void ExecuteAxis(Actor actor)
    {
        actor.MoveTo(new Vector2(direction, 0));
    }

    public override void Undo()
    {
        actor.MoveTo(new Vector2(-direction, 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;2-4) Actor&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1709019064778&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using UnityEngine;

public class Actor : MonoBehaviour
{
    private Rigidbody2D rb;

    private void Start()
    {
        rb = GetComponent&amp;lt;Rigidbody2D&amp;gt;();
    }

    public void MoveTo(Vector2 pos)
    {
        rb.MovePosition(rb.position + pos);
    }
}&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;2-5) InputHandler&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1709019091687&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System.Collections.Generic;
using UnityEngine;

public class InputHandler : MonoBehaviour
{
    [SerializeField]
    private Actor targetActor;

    private List&amp;lt;Command&amp;gt; commands = new List&amp;lt;Command&amp;gt;();
    private int executionIndex = -1;

    private void Update()
    {
        Command targetCommand = HandleInput();
        if(targetCommand != null &amp;amp;&amp;amp; targetActor != null)
        {
            commands.Add(targetCommand);
            executionIndex++;

            targetCommand.ExecuteAxis(targetActor);
        }
    }

    private Command HandleInput()
    {
        if (Input.GetKeyDown(KeyCode.W))
        {
            return new VerticalCommand(targetActor, 1);
        }
        else if (Input.GetKeyDown(KeyCode.S))
        {
            return new VerticalCommand(targetActor, - 1);
        }
        else if (Input.GetKeyDown(KeyCode.A))
        {
            return new HorizontalCommand(targetActor, - 1);
        }
        else if (Input.GetKeyDown(KeyCode.D))
        {
            return new HorizontalCommand(targetActor,1);
        }
        else if(executionIndex &amp;gt;= 0 &amp;amp;&amp;amp; Input.GetKey(KeyCode.LeftControl) &amp;amp;&amp;amp; Input.GetKeyDown(KeyCode.X))
        {
            commands[executionIndex].Undo();
            commands.RemoveAt(executionIndex);
            executionIndex--;
        }

        return null;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;※ 위 코드는 Undo의 기능만 구현해서 짠 코드이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;※ 생성자에 Actor를 인자로 받는 이유는 플레이어만이 아닌 다른 캐릭터에 대한 실행취소도 포함하기 위함이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;※ 앞선 커맨트 패턴의 게시글의 코드를 재활용해서 짠 코드이므로 Actor에 붙어있는 Rigidbody의 GravityScale의 값을 0으로 설정해야 정상적으로 작동 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 실행 확인&lt;/h3&gt;

            &lt;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
                &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&gt;
            &lt;/figure&gt;
        
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Stack/DesignPattern</category>
      <category>디자인패턴</category>
      <category>명령패턴</category>
      <author>Seo_re:</author>
      <guid isPermaLink="true">https://srdeveloper.tistory.com/138</guid>
      <comments>https://srdeveloper.tistory.com/138#entry138comment</comments>
      <pubDate>Tue, 27 Feb 2024 16:47:44 +0900</pubDate>
    </item>
    <item>
      <title>명령 패턴 (Command pattern)</title>
      <link>https://srdeveloper.tistory.com/137</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 명령패턴 (Command pattern)&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 명령패턴 예시 구조 및 코드&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;536&quot; data-origin-height=&quot;332&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKd1Jj/btsFfUztYF1/mcWTa6JKJazDUCMo0aT7p1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKd1Jj/btsFfUztYF1/mcWTa6JKJazDUCMo0aT7p1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKd1Jj/btsFfUztYF1/mcWTa6JKJazDUCMo0aT7p1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKd1Jj%2FbtsFfUztYF1%2FmcWTa6JKJazDUCMo0aT7p1%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;384&quot; height=&quot;238&quot; data-origin-width=&quot;536&quot; data-origin-height=&quot;332&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;InputHandler 클래스에서 틱마다 키 입력을 받을 수 있는 로직을 구성하고, 점프키에 해당하는 조건문이 통과하게 되면 JumpCommand 객체를 반환하고 반환된 Command 객체에 Actor 객체를 매개변수를 넘겨서 Command의 Execute 함수에서 Actor의 Jump함수를 호출해주는 구조이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2-1) Command(추상 클래스)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1708689280647&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public abstract class Command
{
    public abstract void Execute(Actor actor);
}&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;2-2) JumpCommand(Command 상속)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1708689335042&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class JumpCommand : Command
{
    public override void Execute(Actor actor)
    {
        actor.Jump();
    }
}&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;2-3) Actor&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1708689371798&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using UnityEngine;

public class Actor : MonoBehaviour
{
    private Rigidbody2D rb;

    private void Start()
    {
        rb = GetComponent&amp;lt;Rigidbody2D&amp;gt;();
    }

    public void Jump()
    {
        rb.AddForce(Vector2.up * 5f, ForceMode2D.Impulse);
    }
}&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;2-4) InputHandler&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1708689226762&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using UnityEngine;

public class InputHandler : MonoBehaviour
{
    [SerializeField]
    private Actor targetActor;

    private Command jumpCommand = new JumpCommand();

    private void Update()
    {
        Command targetCommand = HandleInput();
        if(targetCommand != null &amp;amp;&amp;amp; targetActor != null)
        {
            targetCommand.Execute(targetActor);
        }
    }

    private Command HandleInput()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            return jumpCommand;
        }

        return null;
    }
}&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;각 명령(Command)에 대한 객체를 생성함으로써 직접적으로 함수를 호출하는 방식 대신, 한 겹 우회하는 계층을 만들어 입력 키의 교체가 가능하게 되었고, 각 명령 객체의 Execute에 Actor를 인수로 받게 함으로써 플레이어 캐릭터만이 아닌 여러 NPC, 몬스터 등의 캐릭터도 조작이 가능할 수 있도록 구성되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;※ 키 변경의 경우, 멤버 변수의 객체를 교환함으로써 키 변경이 가능하다는걸 알려주는건 이해하는데, 이게 과연 효율적인가 싶은 의문이 든다. 차라리 키 변경은 Command 객체를 교체하는것이 아닌 키를 변수로 둬서 키 값을 교체하는게 더 효율적일거같은 생각이 든다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Stack/DesignPattern</category>
      <category>디자인패턴</category>
      <category>명령패턴</category>
      <author>Seo_re:</author>
      <guid isPermaLink="true">https://srdeveloper.tistory.com/137</guid>
      <comments>https://srdeveloper.tistory.com/137#entry137comment</comments>
      <pubDate>Fri, 23 Feb 2024 21:19:56 +0900</pubDate>
    </item>
    <item>
      <title>[Git] 로컬 저장소에 있는 데이터 깃허브에 Push하기</title>
      <link>https://srdeveloper.tistory.com/136</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;※ 해당 포스팅은 GitBash를 통해 하는 방법이므로 PC에 GitBash가 설치되어있지 않으면 설치하고 진행할 것.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 깃허브 Repository 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1-1) 깃허브에 들어가서 Repositoriy를 만들어 준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-01-22 132505.png&quot; data-origin-width=&quot;1082&quot; data-origin-height=&quot;1272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chKUzK/btsDKzXE5jW/UBKcheTk7SdlVl9LkuTkI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chKUzK/btsDKzXE5jW/UBKcheTk7SdlVl9LkuTkI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chKUzK/btsDKzXE5jW/UBKcheTk7SdlVl9LkuTkI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchKUzK%2FbtsDKzXE5jW%2FUBKcheTk7SdlVl9LkuTkI1%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;500&quot; height=&quot;1272&quot; data-filename=&quot;스크린샷 2024-01-22 132505.png&quot; data-origin-width=&quot;1082&quot; data-origin-height=&quot;1272&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt; ※ Repository 정보 입력시 Initialize this repository with 부분은 따로 건드리지 않고 Create repository 버튼을 눌러 생성해야한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt; ※ 만약 Initialize this repository with에 정보를 입력하게 되면 생성과 동시에 origin/main 브랜치로 커밋이 올라가기 때문에 추가적인 처리를 해줘야 한다. (혹시나 정보를 입력해 origin/main 브랜치가 생성된 경우 해결 방법은 하단에 기술해놓음)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. Local Repository를 깃허브에 푸시&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2-1) Local repository에 만들어 놓은 폴더에 들어가&amp;nbsp;&lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;우클릭&lt;/code&gt; -&amp;nbsp;&lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;Open git bash here&lt;/code&gt;을 눌러 cmd창을 열어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2-2) cmd창이 열리면&lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;git remote add origin&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;https://github.com/계정이름/레포지토리이름.git&lt;/code&gt;을 입력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력한 뒤, GUI툴에 확인해보면 다음과 같이 원격이 활성화된걸 볼 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-01-22 135251.png&quot; data-origin-width=&quot;250&quot; data-origin-height=&quot;138&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1zmsW/btsDKcn5y6C/WZKiFREGTurnKF36Oz6Ah1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1zmsW/btsDKcn5y6C/WZKiFREGTurnKF36Oz6Ah1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1zmsW/btsDKcn5y6C/WZKiFREGTurnKF36Oz6Ah1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1zmsW%2FbtsDKcn5y6C%2FWZKiFREGTurnKF36Oz6Ah1%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;250&quot; height=&quot;138&quot; data-filename=&quot;스크린샷 2024-01-22 135251.png&quot; data-origin-width=&quot;250&quot; data-origin-height=&quot;138&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;2-3) 여기서부턴 GUI툴을 통해서 원격에 Push를 해줘도 되는거같은데, GUI툴을 사용하지 않고 CLI로 &lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;git push -u origin 브랜치명&lt;/code&gt;을 입력하면 Local repository를 원격에 Push하는걸 볼 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-01-22 135831.png&quot; data-origin-width=&quot;695&quot; data-origin-height=&quot;255&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GJr8K/btsDNqzdh5J/Gz43OyNHDVIuk82OgcjLY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GJr8K/btsDNqzdh5J/Gz43OyNHDVIuk82OgcjLY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GJr8K/btsDNqzdh5J/Gz43OyNHDVIuk82OgcjLY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGJr8K%2FbtsDNqzdh5J%2FGz43OyNHDVIuk82OgcjLY1%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;695&quot; height=&quot;255&quot; data-filename=&quot;스크린샷 2024-01-22 135831.png&quot; data-origin-width=&quot;695&quot; data-origin-height=&quot;255&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369; text-align: start;&quot;&gt; ※ 필자의 경우 Local repository를 생성하면 기본 브랜치 명이 master로 되어있어서 위와 같이 입력함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;3. 깃허브 Repository에서 확인해보기&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;3-1) 정상적으로 처리가 됐다면 다음과 같이 원격 저장소에서 확인이 가능하다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-01-22 140155.png&quot; data-origin-width=&quot;1386&quot; data-origin-height=&quot;963&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLG5za/btsDLtwbYv8/QWCkuW7AF8dJZqbWPda681/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLG5za/btsDLtwbYv8/QWCkuW7AF8dJZqbWPda681/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLG5za/btsDLtwbYv8/QWCkuW7AF8dJZqbWPda681/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLG5za%2FbtsDLtwbYv8%2FQWCkuW7AF8dJZqbWPda681%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;703&quot; height=&quot;488&quot; data-filename=&quot;스크린샷 2024-01-22 140155.png&quot; data-origin-width=&quot;1386&quot; data-origin-height=&quot;963&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;번외) Initialize this repository with에 정보를 입력하여 원격 저장소에 브랜치가 생성되어버린 경우&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이 경우에도 위 같은 방법으로 Local repository 브랜치를 Push할 수는 있지만 원격에서는 2개의 브랜치가 존재하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이렇게 될 경우, 어차피 사용하는 브랜치는 현재 Local에서 사용하고 있는 브랜치이므로 원격에 생성된 브랜치를 삭제해줘야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 깃허브 Repository에 들어가서 Setting에 들어간다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled-1.png&quot; data-origin-width=&quot;1189&quot; data-origin-height=&quot;135&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deeEi7/btsDLrZseiF/ukGQQht6Z4KHIIo5sFOkVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deeEi7/btsDLrZseiF/ukGQQht6Z4KHIIo5sFOkVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deeEi7/btsDLrZseiF/ukGQQht6Z4KHIIo5sFOkVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeeEi7%2FbtsDLrZseiF%2FukGQQht6Z4KHIIo5sFOkVK%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;728&quot; height=&quot;135&quot; data-filename=&quot;Untitled-1.png&quot; data-origin-width=&quot;1189&quot; data-origin-height=&quot;135&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;2) General페이지에서 Default branch를 Local repository에서 push한 브랜치로 변경해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-01-22 141457.png&quot; data-origin-width=&quot;1174&quot; data-origin-height=&quot;251&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lLPeQ/btsDQSBYOlS/kN5CF1zmpnMOQ7I3NyaIkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lLPeQ/btsDQSBYOlS/kN5CF1zmpnMOQ7I3NyaIkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lLPeQ/btsDQSBYOlS/kN5CF1zmpnMOQ7I3NyaIkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlLPeQ%2FbtsDQSBYOlS%2FkN5CF1zmpnMOQ7I3NyaIkk%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;729&quot; height=&quot;156&quot; data-filename=&quot;스크린샷 2024-01-22 141457.png&quot; data-origin-width=&quot;1174&quot; data-origin-height=&quot;251&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt; ※ 위 과정을 거치지 않고 Default branch로 설정된 브랜치를 삭제하려고하면 에러 발생&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;3) gitbash 창에서 &lt;code style=&quot;color: #ef5369; background-color: #d5d5d5;&quot;&gt;git push origin --delete 삭제할 브랜치명&lt;/code&gt;을 입력해주면 삭제가 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-01-22 141744.png&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FAFqU/btsDQdl7egC/Y2pYoUFznqEfi5AuWWJ6D0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FAFqU/btsDQdl7egC/Y2pYoUFznqEfi5AuWWJ6D0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FAFqU/btsDQdl7egC/Y2pYoUFznqEfi5AuWWJ6D0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFAFqU%2FbtsDQdl7egC%2FY2pYoUFznqEfi5AuWWJ6D0%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;657&quot; height=&quot;106&quot; data-filename=&quot;스크린샷 2024-01-22 141744.png&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;106&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Develoment/Git</category>
      <category>Git</category>
      <category>github</category>
      <author>Seo_re:</author>
      <guid isPermaLink="true">https://srdeveloper.tistory.com/136</guid>
      <comments>https://srdeveloper.tistory.com/136#entry136comment</comments>
      <pubDate>Mon, 22 Jan 2024 14:27:01 +0900</pubDate>
    </item>
  </channel>
</rss>