<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>시나브로</title>
    <link>https://eu4ng.tistory.com/</link>
    <description>시나브로 쌓여가는 IT 지식</description>
    <language>ko</language>
    <pubDate>Fri, 26 Jun 2026 12:46:44 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Eu4ng</managingEditor>
    <item>
      <title>[UML] 구조체 표현</title>
      <link>https://eu4ng.tistory.com/145</link>
      <description>&lt;div class=&quot;markdown-body&quot;&gt;
&lt;h1&gt;Person 구조체&lt;/h1&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;code&gt;struct Person{
    char name[50];
    int age;
    float salary;
};&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;UML 클래스 다이어그램&lt;/h1&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;162&quot; data-origin-height=&quot;123&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5ccm4/btrUaqji084/KN22WYG0s9VIvmTiPWJUZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5ccm4/btrUaqji084/KN22WYG0s9VIvmTiPWJUZ0/img.png&quot; data-alt=&quot;UML 구조체 클래스 다이어그램&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5ccm4/btrUaqji084/KN22WYG0s9VIvmTiPWJUZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5ccm4%2FbtrUaqji084%2FKN22WYG0s9VIvmTiPWJUZ0%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;162&quot; height=&quot;123&quot; data-origin-width=&quot;162&quot; data-origin-height=&quot;123&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;UML 구조체 클래스 다이어그램&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;/div&gt;</description>
      <category>프로그래밍 공부/UML</category>
      <author>Eu4ng</author>
      <guid isPermaLink="true">https://eu4ng.tistory.com/145</guid>
      <comments>https://eu4ng.tistory.com/145#entry145comment</comments>
      <pubDate>Tue, 20 Dec 2022 17:51:51 +0900</pubDate>
    </item>
    <item>
      <title>[OpenGL] Types of Light</title>
      <link>https://eu4ng.tistory.com/122</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;3. Spot Light&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 2개의 원뿔 형태의 조명을 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;( 조명이 비추는 곳의 외곽은 살짝 흐려보이는 효과를 주기 위해)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- inner angle과 outer angle로 원뿔의 범위 조정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1107&quot; data-origin-height=&quot;621&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w83jm/btrQm9TdHFK/s85qGx7UXCAqOGI2xxP8t1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w83jm/btrQm9TdHFK/s85qGx7UXCAqOGI2xxP8t1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w83jm/btrQm9TdHFK/s85qGx7UXCAqOGI2xxP8t1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw83jm%2FbtrQm9TdHFK%2Fs85qGx7UXCAqOGI2xxP8t1%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;1107&quot; height=&quot;621&quot; data-origin-width=&quot;1107&quot; data-origin-height=&quot;621&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>OpenGL</category>
      <author>Eu4ng</author>
      <guid isPermaLink="true">https://eu4ng.tistory.com/122</guid>
      <comments>https://eu4ng.tistory.com/122#entry122comment</comments>
      <pubDate>Fri, 4 Nov 2022 12:35:05 +0900</pubDate>
    </item>
    <item>
      <title>[언리얼] 총알 관통 시스템</title>
      <link>https://eu4ng.tistory.com/107</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;기본적인 아이디어는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 총알에 에너지를 설정한 뒤, 충돌한 물체의 Physic Mat에 따라 에너지 손실이 일어나며 에너지 손실이 0 이하가 되면 Destroy Actor 실행&lt;/p&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. 오버랩 이벤트로 감지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금껏 총알과 스켈레탈 메시간의 데미지 구현은 충돌(Hit) 이벤트로 해두었는데,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ignore Actor를 이용하여 총알과 충돌한 스켈레탈 메시 양쪽에 설정을 해두어도 충돌 이후에는 더이상 날아가지 않고 허공에 고정되어 있다. 이에 대한 해결법은 아직 모르겠지만 일단 히트 이벤트 대신 오버랩 이벤트로 변경하여 진행하도록 하였다.&lt;/p&gt;
&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;CustomWeapon의 오브젝트 타입을 WorldDynamic에서 PhysicsBody로 변경하였고, PhysicsBody에 대해 Block으로 되어 있던 것을 Overlap으로 변경하였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;306&quot; data-origin-height=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/elsLTc/btrO0pb5GyC/sCbuCYwxkiOqckTil2Lc21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/elsLTc/btrO0pb5GyC/sCbuCYwxkiOqckTil2Lc21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/elsLTc/btrO0pb5GyC/sCbuCYwxkiOqckTil2Lc21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FelsLTc%2FbtrO0pb5GyC%2FsCbuCYwxkiOqckTil2Lc21%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;306&quot; height=&quot;580&quot; data-origin-width=&quot;306&quot; data-origin-height=&quot;580&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. 오버랩 된 액터를 통과하는 중에 경우에 따라 오버랩 이벤트가 여러 번 발생하는 경우가 있다&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;- 총알에 액터 변수(OverlappedActor)를 설정한 뒤, 오버랩 이벤트 발생 시 오버랩 된 액터와 액터 변수를 비교하여 동일한 경우는 무시하고, 다른 경우에는 액터 변수에 오버랩 된 액터를 저장한 뒤 오버랩 이벤트를 시작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;767&quot; data-origin-height=&quot;293&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkHGNp/btrOD5enLNs/RM1tPesH2IZYLBxnSwlh91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkHGNp/btrOD5enLNs/RM1tPesH2IZYLBxnSwlh91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkHGNp/btrOD5enLNs/RM1tPesH2IZYLBxnSwlh91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkHGNp%2FbtrOD5enLNs%2FRM1tPesH2IZYLBxnSwlh91%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;767&quot; height=&quot;293&quot; data-origin-width=&quot;767&quot; data-origin-height=&quot;293&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방법을 통해 오버랩 이벤트는 액터 당 한 번의 오버랩 이벤트만 발생하게 되었고, 총알 관통 시스템 로직이 잘 동작하였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 우려사항으로 나중에 도탄과 같은 시스템을 구현할 때, 이전에 총알을 맞은 액터가 또다시 총알을 맞았을 경우에는 무시가 될 수도 있다는 점인데 다른 방법이 있는지 고민 중이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 도탄이라는 것도 결국 다른 물체(액터)에 맞고 팅겨나가는 것이므로 이 방법으로도 가능할 것 같기는 하다&lt;/p&gt;</description>
      <category>언리얼 엔진</category>
      <author>Eu4ng</author>
      <guid isPermaLink="true">https://eu4ng.tistory.com/107</guid>
      <comments>https://eu4ng.tistory.com/107#entry107comment</comments>
      <pubDate>Tue, 18 Oct 2022 22:24:35 +0900</pubDate>
    </item>
    <item>
      <title>[언리얼] 캐릭터와 무기 콜리전 세팅 / 시체산 만들기</title>
      <link>https://eu4ng.tistory.com/106</link>
      <description>&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;CustomCapsule&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;408&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PMY4I/btrOYoSZLhS/KB7RhImH345Na5AEesSPDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PMY4I/btrOYoSZLhS/KB7RhImH345Na5AEesSPDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PMY4I/btrOYoSZLhS/KB7RhImH345Na5AEesSPDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPMY4I%2FbtrOYoSZLhS%2FKB7RhImH345Na5AEesSPDK%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;445&quot; height=&quot;408&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;408&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CustomMesh&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;298&quot; data-origin-height=&quot;577&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yykge/btrOYIwEYoX/nL67006VZjWlmK1LMMXnd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yykge/btrOYIwEYoX/nL67006VZjWlmK1LMMXnd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yykge/btrOYIwEYoX/nL67006VZjWlmK1LMMXnd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fyykge%2FbtrOYIwEYoX%2FnL67006VZjWlmK1LMMXnd0%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;298&quot; height=&quot;577&quot; data-origin-width=&quot;298&quot; data-origin-height=&quot;577&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CustomWeapon&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;306&quot; data-origin-height=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxNc7d/btrO0piQAKB/kXYpM0KedEv6tdEnxoW3e0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxNc7d/btrO0piQAKB/kXYpM0KedEv6tdEnxoW3e0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxNc7d/btrO0piQAKB/kXYpM0KedEv6tdEnxoW3e0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxNc7d%2FbtrO0piQAKB%2FkXYpM0KedEv6tdEnxoW3e0%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;306&quot; height=&quot;580&quot; data-origin-width=&quot;306&quot; data-origin-height=&quot;580&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로써 일반적인 충돌들은 캡슐 컴포넌트가 담당하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무기와 스켈레탈 메시와의 충돌은 WorldDynamic과 &lt;span&gt;PhysicsBody간에 일어난다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;* 좀비들이 죽지 않은 상태에서 어떠한 행동을 할때는 캡슐 컴포넌트로만 충돌을 취급하되, 메시들간의 오버랩은 허용하여 주먹질이나 발길질 등의 공격은 감지할 수 있도록 하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 메시들간의 충돌을 허용하면 비비면서 팅겨나가거나 부자연스럽게 흔들리는 경우가 생긴다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;좀비들이 죽은 이후에는 래그돌 상태로 방치를 할 것인데, 좀비 시체 산을 쌓기 위해서는 메시들간의 충돌이 필요해진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그러므로 좀비들이 죽은 이후에는 먼저 캡슐 컴포넌트를 삭제하고 스켈레탈 메시의 콜리전 오브젝트를 PhysicsBody에서 WorldDynamic으로 변경한뒤, Pawn 채널에 대해 Ignore 에서 Block으로 변경한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;(Pawn 대신 PhysicsBody 채널을 Overlap에서 Block으로 바꾸어도 되긴 하지만 이 경우 시체가 부자연스럽게 발에 치이고, 시체 산 위에 올라 설 때도 많이 흔들린다)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cy0lHL/btrOZ98dLrj/RDTjvhiQ1HEGQTg9JvhQ9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cy0lHL/btrOZ98dLrj/RDTjvhiQ1HEGQTg9JvhQ9K/img.png&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;529&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.6445%; margin-right: 10px;&quot; data-widthpercent=&quot;49.22&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cy0lHL/btrOZ98dLrj/RDTjvhiQ1HEGQTg9JvhQ9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcy0lHL%2FbtrOZ98dLrj%2FRDTjvhiQ1HEGQTg9JvhQ9K%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;768&quot; height=&quot;529&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKG10k/btrOYIKk4iw/lD7kxC3owHgcsW9auw8CHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKG10k/btrOYIKk4iw/lD7kxC3owHgcsW9auw8CHK/img.png&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;500&quot; data-is-animation=&quot;false&quot; style=&quot;width: 50.1927%;&quot; data-widthpercent=&quot;50.78&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKG10k/btrOYIKk4iw/lD7kxC3owHgcsW9auw8CHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKG10k%2FbtrOYIKk4iw%2FlD7kxC3owHgcsW9auw8CHK%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;749&quot; height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;시체들이 차곡차곡 쌓이고, 그 위를 올라선 모습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>언리얼 엔진</category>
      <author>Eu4ng</author>
      <guid isPermaLink="true">https://eu4ng.tistory.com/106</guid>
      <comments>https://eu4ng.tistory.com/106#entry106comment</comments>
      <pubDate>Tue, 18 Oct 2022 19:01:53 +0900</pubDate>
    </item>
    <item>
      <title>[언리얼] 자신의 무기에 콜리전 발생하지 않게 하기</title>
      <link>https://eu4ng.tistory.com/105</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;무기 블루프린트의 Begin Play에 get owner로 무기 소유자 액터를 얻은 뒤, ignore actor when moving으로 자신의 무기에 콜리전이 발생하지 않도록 한다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;549&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5Ahes/btrO919qtOY/tIodbBESB2rMKC0HgKijF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5Ahes/btrO919qtOY/tIodbBESB2rMKC0HgKijF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5Ahes/btrO919qtOY/tIodbBESB2rMKC0HgKijF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5Ahes%2FbtrO919qtOY%2FtIodbBESB2rMKC0HgKijF1%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;549&quot; height=&quot;377&quot; data-origin-width=&quot;549&quot; data-origin-height=&quot;377&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spawn Actor를 실행할 때 Instigator를 캐릭터로 설정하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;캐릭터 &amp;gt; 무기 (Owner: 캐릭터)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무기 &amp;gt; 총알 (Owner: 무기, Instigator: 캐릭터)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Owner(캐릭터)를 cast to Pawn한 뒤, Instigator에 집어넣는다&lt;/p&gt;</description>
      <category>언리얼 엔진</category>
      <author>Eu4ng</author>
      <guid isPermaLink="true">https://eu4ng.tistory.com/105</guid>
      <comments>https://eu4ng.tistory.com/105#entry105comment</comments>
      <pubDate>Tue, 18 Oct 2022 10:50:15 +0900</pubDate>
    </item>
    <item>
      <title>[언리얼] 총알에 맞은 물체의 재질에 따라 파티클 이펙트 다르게 하기</title>
      <link>https://eu4ng.tistory.com/97</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;총알을 사람이 맞으면 피가 나고, 금속 재질의 물체에 부딪히면 스파크가 튄다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 소리 역시 다르게 나야할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 구현한 방법은 다음과 같다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 구현에 앞서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 총알의 블루프린트에서 작성한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 총알, 폭탄 등 투사체의 종류에 따라서도 반응이 달라야하므로 투사체의 블루프린트에 작성하는게 맞는 것 같다&lt;/p&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.&amp;nbsp; 피격체의 재질 판단은 Materials이 아니라 PhysicsMaterials로 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 모든 Materials 마다 설정을 개별적으로 넣어주는 것은 비효율적일 것이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- PhysicasMaterials의 용도는 다양하겠지만 여기서는 머터리얼의 그룹화 느낌으로만 사용한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2022/10/18 수정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 현재 구현 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. On Component Hit 이벤트 발생 시 Hit (히트 구조체)를 얻을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Break Hit Result를 통해 부딪힌 물체의 Phys Mat을 얻을 수 있는데 기본 설정으로는 아무 정보도 얻을 수 없고, 콜리전 컴포넌트의 &lt;b&gt;디테일 &amp;gt; 콜리전 &amp;gt; 고급 &amp;gt; 이동 시 머터리얼 반환&lt;/b&gt;에 체크가 필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 부딪힌 물체의 Phys Mat의 종류에 따라 Spawn Emitter at Location에서 적절한 파티클을 선택해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;336&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btPSfq/btrOTuFZub4/CgffYJnkrivY7T09wyXc71/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btPSfq/btrOTuFZub4/CgffYJnkrivY7T09wyXc71/img.jpg&quot; data-alt=&quot;https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/Physics/PhysicalMaterials/Reference/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btPSfq/btrOTuFZub4/CgffYJnkrivY7T09wyXc71/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtPSfq%2FbtrOTuFZub4%2FCgffYJnkrivY7T09wyXc71%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;336&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;336&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/Physics/PhysicalMaterials/Reference/&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 내가 모르는 방법이 더 있을 것 같지만 현재로서는 위의 Switch 방식으로 구현하기에는 너무 번거로울 것 같고 최적화에는 좋을 것 같지만 아직 프로토타입을 만드는 중이므로 기존의 { 피지컬 머터리얼 : 파티클 시스템 } 맵 자료형을 이용하여 매칭 시켜주겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 파티클 이펙트의 방향 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총알이 날아온 방향을 향해 파티클 이펙트가 형성되어야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hit 구조체에서 Trace Start - Trace End 로 총알이 날아온 방향 (총알이 향하는 방향 x)을 구하고 Z축과 정렬한 로테이터를 넣어주면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1060&quot; data-origin-height=&quot;584&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z7wXq/btrOX39BR6W/uWGBSjVaHkX1ZycvTXlf30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z7wXq/btrOX39BR6W/uWGBSjVaHkX1ZycvTXlf30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z7wXq/btrOX39BR6W/uWGBSjVaHkX1ZycvTXlf30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz7wXq%2FbtrOX39BR6W%2FuWGBSjVaHkX1ZycvTXlf30%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;1060&quot; height=&quot;584&quot; data-origin-width=&quot;1060&quot; data-origin-height=&quot;584&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1006&quot; data-origin-height=&quot;510&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgNHWL/btrO0ocLT0x/givuS7CRqBIDl5g7TZc9K0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgNHWL/btrO0ocLT0x/givuS7CRqBIDl5g7TZc9K0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgNHWL/btrO0ocLT0x/givuS7CRqBIDl5g7TZc9K0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgNHWL%2FbtrO0ocLT0x%2FgivuS7CRqBIDl5g7TZc9K0%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;1006&quot; height=&quot;510&quot; data-origin-width=&quot;1006&quot; data-origin-height=&quot;510&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 처음 구현 방법&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 구현 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. On Component Hit&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Hit Component (총알)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Other Component (피격체)&lt;/p&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. Hit Effect By Phys Mat&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Hit Component의 Location과 Rotation을 통해 총알의 위치와 진행방향을 계산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 총알로부터 LineTraceComponet를 그리고 검출 대상으로 Other Component를 선택한다. 이를 통해 Hit Location 도출&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Hit Component &amp;gt; Get Material &amp;gt; Get Physical Material로 얻어낸 Physical Material가 PhysMatArray에 속해 있는지 확인 한 후, 해당 인덱스로 ParticleArray에서 적절한 파티클 이펙트를 선택한 뒤 Spawn Emitter at Location으로 이펙트를 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(원래는 LineTraceComponent의 PhysMat을 사용하려 했으나 bReturnPhysicalMaterial을 true 설정해야 사용할 수 있는데 블루프린트에서 설정하는 법을 아직 모르겠다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hit Effect by Phys Mat&lt;/p&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMwRl0/btrODevQPw5/ST4PZONp6PwVf19FwCNrJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMwRl0/btrODevQPw5/ST4PZONp6PwVf19FwCNrJ0/img.png&quot; style=&quot;width: 47.0835%; margin-right: 10px;&quot; data-origin-width=&quot;1019&quot; data-origin-height=&quot;617&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;47.67&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMwRl0/btrODevQPw5/ST4PZONp6PwVf19FwCNrJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMwRl0%2FbtrODevQPw5%2FST4PZONp6PwVf19FwCNrJ0%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;1019&quot; height=&quot;617&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/syEm2/btrOCQoLq8I/b9Orr2x9iItWVAIttmHrx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/syEm2/btrOCQoLq8I/b9Orr2x9iItWVAIttmHrx0/img.png&quot; style=&quot;width: 51.694%;&quot; data-origin-width=&quot;1039&quot; data-origin-height=&quot;573&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;52.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/syEm2/btrOCQoLq8I/b9Orr2x9iItWVAIttmHrx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsyEm2%2FbtrOCQoLq8I%2Fb9Orr2x9iItWVAIttmHrx0%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;1039&quot; height=&quot;573&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>언리얼 엔진</category>
      <author>Eu4ng</author>
      <guid isPermaLink="true">https://eu4ng.tistory.com/97</guid>
      <comments>https://eu4ng.tistory.com/97#entry97comment</comments>
      <pubDate>Sat, 15 Oct 2022 14:19:57 +0900</pubDate>
    </item>
    <item>
      <title>[언리얼] 총알이 날아온 방향으로 피가 튀기게 하기</title>
      <link>https://eu4ng.tistory.com/95</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;* 핵심: 방향 벡터로 로테이터(Rotator) 축 정렬 / Make Rot from Z&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총알에 피격되는 순간, 총알로부터 총알의 진행방향으로 LineTrace가 생성되고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 LineTrace로부터 PhysMat 정보와 Hit Location 정보를 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PhysMat 정보를 이용하면 총알이 부딪힌 컴포넌트의 PhysMat에 따라 피, 스파크 등 이펙트를 조정할 수 있으며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 이펙트는 Spawn Emitter at Location에 Hit Location을 넣어줌으로써 피격 위치에 이펙트를 생성할 수 있다.&lt;/p&gt;
&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;총알의 진행방향과 반대 방향으로 이펙트의 Z축을 정렬하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Make Rot from Z로 로테이터 (Rotator)를 생성한 뒤 이를 Spawn Emitter at Location에 넣어주면 완성이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- GetLinePos&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1097&quot; data-origin-height=&quot;260&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDjuTf/btrOErnJywp/eeqfDhkkMRbiMRwGjahcE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDjuTf/btrOErnJywp/eeqfDhkkMRbiMRwGjahcE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDjuTf/btrOErnJywp/eeqfDhkkMRbiMRwGjahcE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDjuTf%2FbtrOErnJywp%2FeeqfDhkkMRbiMRwGjahcE0%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;1097&quot; height=&quot;260&quot; data-origin-width=&quot;1097&quot; data-origin-height=&quot;260&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1118&quot; data-origin-height=&quot;476&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bs1LMx/btrOGvwlRSZ/uHrC6BZomI4Pa5LObrM8h0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bs1LMx/btrOGvwlRSZ/uHrC6BZomI4Pa5LObrM8h0/img.png&quot; data-alt=&quot;Spawn Emitter at Location의 Rotation에 GetLinePos의 Direct Rotator 입력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bs1LMx/btrOGvwlRSZ/uHrC6BZomI4Pa5LObrM8h0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbs1LMx%2FbtrOGvwlRSZ%2FuHrC6BZomI4Pa5LObrM8h0%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;1118&quot; height=&quot;476&quot; data-origin-width=&quot;1118&quot; data-origin-height=&quot;476&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Spawn Emitter at Location의 Rotation에 GetLinePos의 Direct Rotator 입력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>언리얼 엔진</category>
      <author>Eu4ng</author>
      <guid isPermaLink="true">https://eu4ng.tistory.com/95</guid>
      <comments>https://eu4ng.tistory.com/95#entry95comment</comments>
      <pubDate>Sat, 15 Oct 2022 13:36:03 +0900</pubDate>
    </item>
    <item>
      <title>[언리얼] TPS 조준</title>
      <link>https://eu4ng.tistory.com/94</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dev-sbee.tistory.com/84?category=1219843&quot;&gt;https://dev-sbee.tistory.com/84?category=1219843&lt;/a&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;1. 카메라의 위치로부터 카메라가 바라보는 방향으로 일정 길이의 직선을 긋는다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lf2Jk/btrOEppJiHt/rAYKHtXVWZtRYtuuIq8vl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lf2Jk/btrOEppJiHt/rAYKHtXVWZtRYtuuIq8vl1/img.png&quot; data-alt=&quot;무기를 장착한 캐릭터의 카메라 컴포넌트 가져오기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lf2Jk/btrOEppJiHt/rAYKHtXVWZtRYtuuIq8vl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flf2Jk%2FbtrOEppJiHt%2FrAYKHtXVWZtRYtuuIq8vl1%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;982&quot; height=&quot;470&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;무기를 장착한 캐릭터의 카메라 컴포넌트 가져오기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1071&quot; data-origin-height=&quot;444&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDXLdV/btrOEhd9fHz/piIY3gLg54tBpIWXyEW5f1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDXLdV/btrOEhd9fHz/piIY3gLg54tBpIWXyEW5f1/img.png&quot; data-alt=&quot;카메라의 위치에서 바라보는 방향으로 일정 길이의 LineTrace를 그린다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDXLdV/btrOEhd9fHz/piIY3gLg54tBpIWXyEW5f1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDXLdV%2FbtrOEhd9fHz%2FpiIY3gLg54tBpIWXyEW5f1%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;1071&quot; height=&quot;444&quot; data-origin-width=&quot;1071&quot; data-origin-height=&quot;444&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;카메라의 위치에서 바라보는 방향으로 일정 길이의 LineTrace를 그린다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 1번에서 그은 직선에 부딪힌 물체가 있다면 부딪힌 위치를, 없다면 직선의 끝 지점을 기록한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- LineTraceHitLocation ( LineTraceByChannel &amp;gt; Break Hit Result &amp;gt; Location OR Trace End)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 부딪힌 물체가 없다면 Location = (0, 0, 0) 이다&lt;/p&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. 총구에서 LineTraceHitLocation으로의 방향 벡터를 구한뒤 이를 총알의 진행방향으로 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 방향 벡터 구하기: LineTraceHitLocation - Weapon Socket Location&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 방향 벡터를 로테이터로 변환: RotationFromXVector&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GUeHd/btrOD0KtOQv/6zY9xFfnLceeY8PKOcDqyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GUeHd/btrOD0KtOQv/6zY9xFfnLceeY8PKOcDqyK/img.png&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;284&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;54.78&quot; data-filename=&quot;edited_blob&quot; style=&quot;width: 54.1421%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GUeHd/btrOD0KtOQv/6zY9xFfnLceeY8PKOcDqyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGUeHd%2FbtrOD0KtOQv%2F6zY9xFfnLceeY8PKOcDqyK%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;300&quot; height=&quot;284&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RloH3/btrOCs2zX0Z/40EWCK40kgJoGkNzXgoaCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RloH3/btrOCs2zX0Z/40EWCK40kgJoGkNzXgoaCK/img.png&quot; data-origin-width=&quot;293&quot; data-origin-height=&quot;336&quot; data-is-animation=&quot;false&quot; style=&quot;width: 44.6951%;&quot; data-widthpercent=&quot;45.22&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RloH3/btrOCs2zX0Z/40EWCK40kgJoGkNzXgoaCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRloH3%2FbtrOCs2zX0Z%2F40EWCK40kgJoGkNzXgoaCK%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;293&quot; height=&quot;336&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;(좌) 카메라 LineTraceHit (우) 총구 LineTraceHit&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>언리얼 엔진</category>
      <author>Eu4ng</author>
      <guid isPermaLink="true">https://eu4ng.tistory.com/94</guid>
      <comments>https://eu4ng.tistory.com/94#entry94comment</comments>
      <pubDate>Sat, 15 Oct 2022 09:46:07 +0900</pubDate>
    </item>
    <item>
      <title>[언리얼] 총알과 캐릭터 간의 피격 판정</title>
      <link>https://eu4ng.tistory.com/93</link>
      <description>&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;그렇기에 세밀한 충돌이 필요한 경우를 위해 충돌 채널을 분리할 필요가 있다&lt;/p&gt;
&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;1. 총알 (SphereCollision)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 콜리전 프리셋: IgnoreOnlyPawn&lt;/p&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. 캐릭터의 캡슐 컴포넌트 (CollisionCylinder Component)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 콜리전 프리셋: Pawn&lt;/p&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. 캐릭터의 스켈레탈 메시 (SkeletalMesh Component)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 콜리전 프리셋: WorldDynamic&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총알은 Pawn을 제외한 모든 것, 즉 WorldDynamic과 충돌을 하게 되므로 캐릭터의 캡슐 컴포넌트로는 충돌이 일어나지 않고, 캐릭터의 스켈레탈 메시에는 충돌이 일어나게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가로 이 경우에는 ApplyPointDamage를 통해 피격 부위 역시 bone 이름을 통해 정확히 파악할 수 있다&lt;/p&gt;</description>
      <category>언리얼 엔진</category>
      <author>Eu4ng</author>
      <guid isPermaLink="true">https://eu4ng.tistory.com/93</guid>
      <comments>https://eu4ng.tistory.com/93#entry93comment</comments>
      <pubDate>Fri, 14 Oct 2022 15:19:59 +0900</pubDate>
    </item>
    <item>
      <title>[언리얼] 헤드샷 구현</title>
      <link>https://eu4ng.tistory.com/92</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;* PointDamage를 이용하여 데미지를 입은 오브젝트의 Bone 이름을 통해 부위별 데미지 설정이 가능하다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;875&quot; data-origin-height=&quot;348&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c5K4b4/btrOBMy6SpW/dvNJ7EDyM3MWLZ0vYX4wQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c5K4b4/btrOBMy6SpW/dvNJ7EDyM3MWLZ0vYX4wQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c5K4b4/btrOBMy6SpW/dvNJ7EDyM3MWLZ0vYX4wQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc5K4b4%2FbtrOBMy6SpW%2FdvNJ7EDyM3MWLZ0vYX4wQ1%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;875&quot; height=&quot;348&quot; data-origin-width=&quot;875&quot; data-origin-height=&quot;348&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;421&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1YlS2/btrOBMePbNK/jVoqTknbEc3qevnfYr3BlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1YlS2/btrOBMePbNK/jVoqTknbEc3qevnfYr3BlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1YlS2/btrOBMePbNK/jVoqTknbEc3qevnfYr3BlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1YlS2%2FbtrOBMePbNK%2FjVoqTknbEc3qevnfYr3BlK%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;886&quot; height=&quot;421&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;421&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>언리얼 엔진</category>
      <author>Eu4ng</author>
      <guid isPermaLink="true">https://eu4ng.tistory.com/92</guid>
      <comments>https://eu4ng.tistory.com/92#entry92comment</comments>
      <pubDate>Fri, 14 Oct 2022 15:14:10 +0900</pubDate>
    </item>
  </channel>
</rss>