<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>bruiser_gd.log</title>
        <link>https://velog.io/</link>
        <description>RPG 기획자 지망생</description>
        <lastBuildDate>Wed, 11 Dec 2024 09:02:45 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. bruiser_gd.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/bruiser_gd" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[UE4 - Creating an ARPG #6,7 - Melee Combo Attacks ]]></title>
            <link>https://velog.io/@bruiser_gd/UE4-Creating-an-ARPG-6-Melee-Combo-Attacks</link>
            <guid>https://velog.io/@bruiser_gd/UE4-Creating-an-ARPG-6-Melee-Combo-Attacks</guid>
            <pubDate>Wed, 11 Dec 2024 09:02:45 GMT</pubDate>
            <description><![CDATA[<h2 id="todays-lesson-melee-combo-attacks">Today&#39;s Lesson: Melee Combo Attacks</h2>
<blockquote>
<p><strong>Summary</strong><br></p>
<ul>
<li>How to add second and third combo attacks that only activate a short time after the previous attack input.<br></li>
<li>Adding combos for heavy attacks, adjusting delay time ranges and fixing most issues and bugs! this also allows you to mix between attack types during a combo.</li>
</ul>
</blockquote>
<p><a href="https://www.youtube.com/watch?v=YxIQ20FsYUg&amp;list=PLlswSOADCx3dZuEIYN7dxAwYSKIwNIIC-&amp;index=7&amp;ab_channel=AstrumSensei">AstrumSensei</a></p>
<hr>
<h3 id="✅-animation-import-from-mixamo">✅ Animation Import from Mixamo</h3>
<p><strong>◼️ Second,Third Light Attack Animation</strong></p>
<ul>
<li><p>Second Light Attack &rarr; Light_Attack_2
<code>검색어: Sword and Shield Slash</code></p>
</li>
<li><p>Third Light Attack &rarr; Light_Attack_3
<code>검색어: Standing Melee Attack 360</code></p>
</li>
<li><p>Second Heavy Attack &rarr; Heavy_Attack_2
<code>검색어: Great Sword Slash</code></p>
</li>
<li><p>Third Heavy Attack &rarr; Heavy_Attack_3
<code>검색어: Great Sword Kick</code></p>
</li>
<li><p>Create Anim Montage
<img src="https://velog.velcdn.com/images/bruiser_gd/post/38d8f80c-f59a-41b3-9bfb-a575aaf5743d/image.png" alt=""></p>
</li>
</ul>
<h3 id="✅-anim-notify">✅ Anim Notify</h3>
<p><strong>◼️ 공격 중 움직임 제어</strong></p>
<ul>
<li>Anim Notify - Disable Movement, Enable Movement
<code>Skeleton Notify 이용</code>
- Light_Attack_2_Montage
- Light_Attack_3_Montage
- Heavy_Attack_2_Montage
- Heavy_Attack_3_Montage</li>
</ul>
<h3 id="✅-light-attack-logic">✅ Light Attack Logic</h3>
<p><strong>◼️ Combat Graph</strong>
In Character BP &lt;BP_Base&gt;</p>
<ul>
<li>Input Action Light Attack &rarr; Do Once
<code>노드가 처음 걸릴 때만 출력이 발동하지만, 리셋 가능합니다</code>
<code>공격 입력 후  특정 시간이 지난 후에 다시 작동하도록 하는 역할</code>
<img src="https://velog.velcdn.com/images/bruiser_gd/post/54206bd7-59fe-4ca5-b595-fc96f7d76730/image.png" alt=""></li>
<li>New Variable: AttackCount
(Int, 0)
<code>현재 몇 번째 LightAttack인지 나타내는 변수</code></li>
<li>Play Montage - Montage to Play &rarr; Select Node
- Option0: Light_Attack_1
- Option0: Light_Attack_2
- Option0: Light_Attack_3
- Index: AttackCount &rarr; %(3)
<code>AttackCount를 3으로 나눈 나머지 값을 Index로 사용</code>
<img src="https://velog.velcdn.com/images/bruiser_gd/post/d0d57125-1291-4009-9ec1-34295b3ff3bc/image.png" alt=""></li>
<li>Switch On Int
- Selection: AttackCount &rarr; %(3)
<code>AttackCount를 3으로 나눈 나머지 값을 Selection으로 사용</code>
<img src="https://velog.velcdn.com/images/bruiser_gd/post/d889dc22-70b9-46c8-9b80-5fd7b720a37a/image.png" alt=""></li>
</ul>
<p><strong>◼️ Switch Case: 0</strong>
<code>첫 번째 Light Attack</code></p>
<ul>
<li>Increment Int
- Attack Count
<code>현재 Attack Count에 +1</code></li>
<li>Delay
<code>현재 재생 중인 몽타주의 재생 시간에 맞춰서 설정</code></li>
<li>Sequence
<code>Then 0: Dealy-Duration 이후 DoOnce-Reset 입력에 연결하여 다음 공격 로직 실행 가능하도록 함</code>
<code>Then 1: Delay 이후 Attack Count를 0으로 초기화시킴</code></li>
<li>Delay
<code>Duration 이후 Attack Count 초기화 로직</code></li>
<li>Branch - AttackCount &lt;=1 ?
True &rarr; Set AttackCount 0
<code>현재 AttackCount 값이 1 이하인 경우에만 0으로 초기화</code>
<code>&#39;AttackCount 값이 1 이하?&#39;  다음 공격이 진행 중이 아니라는 의미</code></li>
</ul>
<p><strong>◼️ Switch Case: 1</strong>
<code>두 번째 Light Attack</code></p>
<ul>
<li>Increment Int
- Attack Count</li>
<li>Delay</li>
<li>Sequence
<code>Then 0: DoOnce-Reset에 연결</code></li>
<li>Delay</li>
<li>Set AttackCount 0
<code>다음 공격이 끝이기 때문에 Light Attack 3와 다르게 Branch 로직 없음</code></li>
</ul>
<p><strong>◼️ Switch Case: 2</strong>
<code>세 번째 Light Attack</code></p>
<ul>
<li>Set AttackCount 0</li>
<li>Delay
<code>다음 콤보 공격이 존재하지 않기 때문에 AttackCount만 초기화 시킴</code>
<code>공격할 동안은 입력을 받지 않도록 하고, DoOnce-Reset 입력에 연결</code></li>
</ul>
<p><img src="https://velog.velcdn.com/images/bruiser_gd/post/5e751b58-4851-4495-a529-650df035abfe/image.png" alt=""></p>
<h3 id="✅-heavy-attack-logic">✅ Heavy Attack Logic</h3>
<p><strong>◼️ Combat Graph</strong></p>
<ul>
<li>Light Attack과 똑같은 로직으로 구현</li>
<li>AttackCount를 공유함으로써, 콤보를 섞어서 사용 가능하게 함</li>
</ul>
<h3 id="✅-result">✅ Result</h3>
<ul>
<li>Light Attack 1
<img src="https://velog.velcdn.com/images/bruiser_gd/post/437b5535-dbac-4d77-8719-877492676f6c/image.png" alt=""></li>
<li>Heavy Attack 2
<img src="https://velog.velcdn.com/images/bruiser_gd/post/6dd79c6c-7e4b-4369-8174-2b09dfff8fa1/image.png" alt=""></li>
<li>Light Attack 3
<img src="https://velog.velcdn.com/images/bruiser_gd/post/a6deb4bd-1052-4d8a-bf3e-561ad17d7c0f/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[UE4 - Creating an ARPG #5 - Light and Heavy Melee Attacks]]></title>
            <link>https://velog.io/@bruiser_gd/UE4-Creating-an-ARPG-5-Light-and-Heavy-Melee-Attacks</link>
            <guid>https://velog.io/@bruiser_gd/UE4-Creating-an-ARPG-5-Light-and-Heavy-Melee-Attacks</guid>
            <pubDate>Tue, 10 Dec 2024 14:15:10 GMT</pubDate>
            <description><![CDATA[<h2 id="todays-lesson-light-and-heavy-melee-attacks">Today&#39;s Lesson: Light and Heavy Melee Attacks</h2>
<blockquote>
<p><strong>Summary</strong><br>
Adding light and heavy attacks based on two different inputs. similar to Dark Souls, God of War and other action RPG and melee games.</p>
</blockquote>
<p><a href="https://www.youtube.com/watch?v=HOw9mmXFtVY&amp;list=PLlswSOADCx3dZuEIYN7dxAwYSKIwNIIC-&amp;index=6&amp;ab_channel=AstrumSensei">AstrumSensei</a></p>
<hr>
<h3 id="✅-settings">✅ Settings</h3>
<p><strong>◼️ Inputs for Attacking</strong>
In Project Settings - Inputs</p>
<ul>
<li>Light Attack
- Key: Left Mouse Button</li>
<li>Heavy Attack
- Key: Right Mouse Button
<img src="https://velog.velcdn.com/images/bruiser_gd/post/f8dede65-c0fc-495d-b8b2-b218c963b650/image.png" alt=""></li>
</ul>
<h3 id="✅-animation-assets">✅ Animation Assets</h3>
<p>__◼️ Attack Animation Import From Mixamo __</p>
<ul>
<li>Light Attack
<code>검색어: Sword and Shield Slash</code></li>
<li>Heavy Attack
<code>검색어: Great Sword Slash</code></li>
<li>Create Anim Montage
<code>Anim Notify 사용하기 위함</code></li>
<li>Rename 원본 Animation, Montage
Light_Attack_1(Montage), Heavy_Attack_1(Montage)
<img src="https://velog.velcdn.com/images/bruiser_gd/post/329577b0-608b-4c32-aeb0-c042f6470e67/image.png" alt=""></li>
</ul>
<h3 id="✅-draw-weapon-logic">✅ Draw Weapon Logic</h3>
<p>__◼️ BP Interface __
In BP Interface &lt;BPInterface_CharacterActions&gt;</p>
<ul>
<li>Add New Function: WeaponOn</li>
<li>New Input: Drawn
Boolean, False
<img src="https://velog.velcdn.com/images/bruiser_gd/post/4c39cd56-0e57-4e23-900d-0ad7c0824706/image.png" alt=""></li>
</ul>
<p><strong>◼️ Combat Graph</strong>
In Character BP &lt;BP_Base&gt; - Combat Graph</p>
<ul>
<li>기존 Draw Weapon Logic 매크로로 접기: Draw Weapon M</li>
<li>Event Weapon On &rarr; Draw Weapon M
<img src="https://velog.velcdn.com/images/bruiser_gd/post/0f4d5fde-f56b-454f-9978-c6d41309e467/image.png" alt=""></li>
</ul>
<h3 id="✅-light-attack-logic">✅ Light Attack Logic</h3>
<p>__◼️ Combat Graph  __
In Character BP &lt;BP_Base&gt; - Combat Graph</p>
<ul>
<li>약공격 애니메이션 실행
Input Action Light Attack
Branch(WeaponDrawn)
True &rarr; Light Attack Anim Play
False &rarr; Draw Macro &rarr; Light Attack Anim Play
- Play Rate: 1.6
<code>코멘트 생성: Light Attack</code>
<img src="https://velog.velcdn.com/images/bruiser_gd/post/baffbca3-5cc0-4bdf-8078-612e6e221f0b/image.png" alt=""></li>
</ul>
<h3 id="✅-heavy-attack-logic">✅ Heavy Attack Logic</h3>
<p>__◼️ Combat Graph  __
In Character BP &lt;BP_Base&gt; - Combat Graph</p>
<ul>
<li>강공격 애니메이션 실행
Input Action Heavy Attack
Branch(WeaponDrawn)
True &rarr; Heavy Attack Anim Play
False &rarr; Draw Macro &rarr; Heavy Attack Anim Play
- Play Rate: 1.0
<code>코멘트 생성: Heavy Attack</code>
<img src="https://velog.velcdn.com/images/bruiser_gd/post/4e365e9f-9f61-4805-9911-b6b3e56a0539/image.png" alt=""></li>
</ul>
<h3 id="✅-enabledisable-movement">✅ Enable/Disable Movement</h3>
<p>__◼️ BP Interface __
In BP Interface &lt;BPInterface_CharacterActions&gt;</p>
<ul>
<li>Add New Function: Movement</li>
<li>New Input: On/Off
Boolean, True</li>
</ul>
<p>__◼️ Movement Graph  __</p>
<ul>
<li>New Variable: MovementOn
Boolean, True
<code>움직임 제어 변수</code></li>
<li>MovementOn == True &rarr; 움직임 가능
<img src="https://velog.velcdn.com/images/bruiser_gd/post/da8fc04f-5283-46be-a619-8a1a1a99f50a/image.png" alt=""></li>
<li>Event Movement &rarr; Set MovementOn</li>
</ul>
<p><strong>◼️ Animation Notify 생성</strong>
In Anim Montage(Light Attack)</p>
<ul>
<li>New Notify: DisableMovement</li>
<li>New Notify: EnableMovement
<img src="https://velog.velcdn.com/images/bruiser_gd/post/667c6ccf-55b2-4414-8fe2-20690f24d2a3/image.png" alt=""></li>
</ul>
<p>In Anim Montage(Light Attack)</p>
<ul>
<li>New Notify -Skeleton Notify: DisableMovement</li>
<li>New Notify -Skeleton Notify: EnableMovement
<img src="https://velog.velcdn.com/images/bruiser_gd/post/d3f6b313-8934-4ad2-a72a-964e35a332cc/image.png" alt=""></li>
</ul>
<p>__◼️ Animation Notify, BP Interface 이용하여 Movement 제어 __
In Anim BP &lt;AnimBP_Paladin&gt;</p>
<ul>
<li>New Graph: NotifiersGraph</li>
<li>AnimNotify_EnableMovement &rarr; Movement(Message)
- On/Off: True</li>
<li>AnimNotify_DisableMovement &rarr; Movement(Message)
- On/Off: False
<img src="https://velog.velcdn.com/images/bruiser_gd/post/e55fd21b-c963-45f5-8119-65bcadd18748/image.png" alt=""></li>
</ul>
<h3 id="✅-result">✅ Result</h3>
<ul>
<li>Light Attack + Disable/Enable Movement
<img src="https://velog.velcdn.com/images/bruiser_gd/post/966d762f-1830-4cb7-b6c3-cb49597c49bd/image.png" alt=""></li>
<li>Heavy Attack + Disable/Enable Movement
<img src="https://velog.velcdn.com/images/bruiser_gd/post/b01c9de8-fe5b-4f99-8488-42860c85d6b6/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[UE4 - Creating an ARPG #4 - Equip and Sheath Sword]]></title>
            <link>https://velog.io/@bruiser_gd/UE4-Creating-an-ARPG-4-Equip-and-Sheath-Sword</link>
            <guid>https://velog.io/@bruiser_gd/UE4-Creating-an-ARPG-4-Equip-and-Sheath-Sword</guid>
            <pubDate>Mon, 09 Dec 2024 15:18:21 GMT</pubDate>
            <description><![CDATA[<h2 id="todays-lesson-equip-and-sheath-sword">Today&#39;s Lesson: Equip and Sheath Sword</h2>
<blockquote>
<p><strong>Summary</strong><br>
Add a sword that we can Draw and Sheath using an input button.
We also blend the equip animation with all of the lower body movement animations.</p>
</blockquote>
<p><a href="https://www.youtube.com/watch?v=48Lg6at7dmA&amp;list=PLlswSOADCx3dZuEIYN7dxAwYSKIwNIIC-&amp;index=5&amp;ab_channel=AstrumSensei">AstrumSensei</a></p>
<hr>
<h3 id="✅-assets">✅ Assets</h3>
<p><strong>◼️ Animation - Equip Sword</strong>
In Folder &lt;Combat&gt;</p>
<ul>
<li>Import Animation: Equip_Over_Shoulder
&rarr; Create Anim Montage
<img src="https://velog.velcdn.com/images/bruiser_gd/post/5a6b92a2-9dd9-4f73-998e-80d415aad3ec/image.png" alt=""></li>
</ul>
<p><strong>◼️ Sword Asset</strong>
In Folder &lt;Weapons&gt;</p>
<ul>
<li>기존 Sword Asset 복제</li>
<li>SK_Blade_HeroSword11 &rarr; SwordOfNobles
<img src="https://velog.velcdn.com/images/bruiser_gd/post/509c54e3-f39d-4477-896f-6b4467bafc0a/image.png" alt=""></li>
</ul>
<p><strong>◼️ Sword BP</strong></p>
<ul>
<li>Add Component: Skeletal Mesh</li>
<li>Mesh - Skeletal Mesh: SwordOfNobles</li>
</ul>
<h3 id="✅-project-settings">✅ Project Settings</h3>
<p><strong>◼️ Draw Weapon 입력</strong>
In Project Settings - Inputs</p>
<ul>
<li>Add Action Mapping
- Name: Draw Weapon
- Key: 1
<img src="https://velog.velcdn.com/images/bruiser_gd/post/95eff8ed-750b-4b5b-8090-f47fb0d6be0d/image.png" alt=""></li>
</ul>
<h3 id="✅-socket">✅ Socket</h3>
<p><strong>◼️ Weapon  Socket 추가</strong>
In Character Skeleton</p>
<ul>
<li>Left Shoulder &rarr; WeaponSheath1</li>
<li>Right Hand &rarr; RightHandWeapon
<code>Preview Asset을 이용하여 각 Socket의 Transform, Rotation, Scale 조정</code></li>
</ul>
<p><strong>◼️ Weapon의 부모 Component 추가</strong>
In Character BP &lt;BP_Base&gt;</p>
<ul>
<li>Add Component: Mesh &rarr; Scene  &lt;WeaponSheath1&gt;
- Parent Socket: WeaponSheath1</li>
<li>Add Component: &lt;WeaponSheath1&gt; &rarr; Skeletal Mesh &lt;SwordOfNobles&gt;</li>
</ul>
<ul>
<li>Add Component: Mesh &rarr; Scene  &lt;WeaponInHand&gt;
- Parent Socket: RightHandWeapon</li>
<li>Add Component: &lt;WeaponInHand&gt; &rarr; Skeletal Mesh &lt;SwordOfNobles&gt;</li>
</ul>
<h3 id="✅-equip-and-sheath-logic">✅ Equip and Sheath Logic</h3>
<p><strong>◼️ Combat Graph</strong>
In Character BP &lt;BP_Base&gt;
Add New Graph: Combat Graph</p>
<ul>
<li>New Variable: WeaponDrawn
- Type: Boolean
- Default: False</li>
<li>New Node: Input Action Draw Weapon
<code>Draw Weapon 입력 시 WeaponDrawn 값 반전</code></li>
<li>Branch(WeaponDrawn)
<img src="https://velog.velcdn.com/images/bruiser_gd/post/91ed78c4-b032-4554-9a29-7ee06775f9a8/image.png" alt=""></li>
</ul>
<p><strong>◼️ Draw Weapon Logic</strong></p>
<ul>
<li>Branch(WeaponDrawn) == True &rarr; Play Montage
- Anim Montage: Equip_Over_Shoulder
<code>상반신/하반신 따로 애니메이션 플레이를 하기 위해 사용</code>
<code>e.g. Walking Anim With Equipping Sword Anim</code></li>
<li>Delay
- Duration: 0.8
<code>손이 칼에 닿는 타이밍에 Sword Component의 어태치를 바꾸기 위함</code></li>
<li>Attach Component to Component
- Target: SwordOfNobles Component
- Parent: WeaponInHand Component
<code>Parent로 Mesh Component도 가능</code>
- Socket Name: RightHandWeapon
- Location/Rotation/Scale Rule: <u>Snap to Target</u>
<code>이 옵션을 선택하면, 무기가 Socket의 로컬 좌표에 맞춰 부착됩니다.
무기는 Socket의 위치와 회전값에 정확하게 맞춰지며, 애니메이션이나 캐릭터의 이동에 따라 무기도 그에 맞춰 자연스럽게 함께 움직입니다.</code>
<img src="https://velog.velcdn.com/images/bruiser_gd/post/1f8a0da1-1f27-4912-8628-60469aaf21ae/image.png" alt=""></li>
<li>MoveComponentTo(보간)
<code>부착된 무기가 시간에 걸쳐 특정 위치로 이동하도록 만들기 위함</code>
<img src="https://velog.velcdn.com/images/bruiser_gd/post/5b06d361-3449-48c0-93b2-04b92fe080bd/image.png" alt=""></li>
</ul>
<p><strong>◼️ Sheath Weapon Logic</strong></p>
<ul>
<li>Branch(WeaponDrawn) == False</li>
<li>WeaponInHand Comp &rarr; WeaponSheath1 Comp</li>
<li>Socket Name: RightHandWeapon &rarr; WeaponSheath1
<img src="https://velog.velcdn.com/images/bruiser_gd/post/39a2f1fe-2a77-4d69-88d8-3f3db8020b68/image.png" alt=""></li>
</ul>
<p><strong>◼️ Animation Speed 2배</strong></p>
<ul>
<li>Play Anim Montage - In Play Rate: 1.0 &rarr; 2.0</li>
<li>Delay - Duration: 0.8 &rarr; 0.4</li>
</ul>
<blockquote>
<p><strong>Play Montage, Play Anim Montage 비교</strong><br>
<strong>핵심 차이점</strong></p>
<ul>
<li>Play Montage는 Skeletal Mesh Component에 직접 애니메이션을 재생</li>
<li>Play Anim Montage는 Character의 AnimInstance에 의해 애니메이션 몽타주를 재생 <br>
<strong>요약</strong></li>
<li>Play Montage는 더 단순한 방식으로, 특정 Skeletal Mesh에 애니메이션 몽타주를 재생하고, 캐릭터 관련 상태나 애니메이션 시스템에 의존하지 않습니다.</li>
<li>Play Anim Montage는 캐릭터의 AnimInstance를 통해 애니메이션을 관리하고, 캐릭터의 상태와 관련된 추가적인 처리가 필요할 때 사용됩니다.</li>
</ul>
</blockquote>
<h3 id="✅-animation">✅ Animation</h3>
<p>__◼️ 상반신 하반신 따로 Animation 재생 __
In Anim Montage &lt;Euip_Over_Shoulder_Montage&gt;</p>
<ul>
<li>슬롯 매니저</li>
<li>슬롯 추가 및 설정: UpperBody
<img src="https://velog.velcdn.com/images/bruiser_gd/post/4d89b44f-2cb4-48a3-b45b-e6c828c2f464/image.png" alt=""></li>
</ul>
<p>In Anim BP &lt;AnimBP_Paladin&gt; - Anim Graph</p>
<ul>
<li>기존의 Slot &#39;DefaultSlot&#39; &rarr; 캐시 포즈 새로 저장
&lt;Default Pose&gt;</li>
<li>Use cached pose &#39;DefaultPose&#39; &rarr; Slot &#39;UpperBody&#39;</li>
<li>Layered blend per bone(본마다 레이어로 블렌딩)
- Base Pose: &#39;Default Pose&#39;
- Blend Poses0: &#39;Default Group&#39;그룹의 &#39;UpperBody&#39; 슬롯 
- 브랜치 필터 - 배열 엘리먼트 추가
<img src="https://velog.velcdn.com/images/bruiser_gd/post/db745209-2b55-40e0-9e3f-32d22d8df66d/image.png" alt="">
- Bone name: Spine
<img src="https://velog.velcdn.com/images/bruiser_gd/post/9757b7f9-86e9-4a7a-a2b6-3981caccfa9a/image.png" alt=""></li>
</ul>
<h3 id="✅-result">✅ Result</h3>
<ul>
<li>웅크림/걷기/뛰기/스프린트 애니메이션과 동시에 equip/sheath 가능
<img src="https://velog.velcdn.com/images/bruiser_gd/post/b35e28f0-6d6c-4aca-b882-30118fce6f94/image.png" alt="">
<img src="https://velog.velcdn.com/images/bruiser_gd/post/9361e8fe-0373-495a-87e7-48004cdc97ca/image.png" alt="">
<img src="https://velog.velcdn.com/images/bruiser_gd/post/45b7c549-eb62-461f-b9d0-1c4e678be8d6/image.png" alt="">
<img src="https://velog.velcdn.com/images/bruiser_gd/post/de209267-07f6-4d5b-8b93-fcaf48545c83/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[UE4 - Creating a RPG #39 - Creating Inventory Pickup Items]]></title>
            <link>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-39-Creating-Inventory-Pickup-Items</link>
            <guid>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-39-Creating-Inventory-Pickup-Items</guid>
            <pubDate>Thu, 05 Dec 2024 13:55:05 GMT</pubDate>
            <description><![CDATA[<h2 id="todays-lesson-creating-inventory-pickup-items">Today&#39;s Lesson: Creating Inventory Pickup Items</h2>
<blockquote>
<p><strong>Summary</strong><br></p>
</blockquote>
<ol>
<li>We show you how you can create a simple pickup item that will work with your inventory system.<br></li>
<li>Create the collectable pickup blueprint along with the code which checks to see which slots are free in your inventory.<br>
<a href="https://www.youtube.com/watch?v=hfe49BDzotI&amp;list=PLL0cLF8gjBpqA8DcrhL_O9kD4jsUqhDR6&amp;index=40&amp;ab_channel=VirtusLearningHub">Virtus Learning Hub</a></li>
</ol>
<hr>
<h3 id="✅-pick-up-items">✅ Pick up Items</h3>
<p><strong>◼️ Actor Blueprint &lt;WoodPickup&gt;</strong></p>
<ul>
<li>Add Component: Static Mesh
- 적절한 Static Mesh 선택
- Collision Preset - No Collision</li>
<li>Level에 Actor 배치</li>
<li>Add Component: BoxCollision</li>
</ul>
<p><strong>◼️ WoodPickup Logic</strong></p>
<ul>
<li>Box &rarr; On Component Begin Overlap</li>
</ul>
<p>...</p>
<p><img src="https://velog.velcdn.com/images/bruiser_gd/post/4e30bb51-50c7-4118-8da7-6df3464b9be3/image.png" alt=""></p>
<p><code>강의 내용처럼 블루프린트가 복잡해지지 않으려면, Item Slot을 관리하는 변수를 배열로 구현할 필요성을 느낌.</code></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[UE4 - Creating a RPG #38 - Inventory Item Slot/Icon/Image]]></title>
            <link>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-38-Inventory-Item-SlotIconImage</link>
            <guid>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-38-Inventory-Item-SlotIconImage</guid>
            <pubDate>Thu, 05 Dec 2024 11:18:12 GMT</pubDate>
            <description><![CDATA[<h2 id="todays-lesson-inventory-item-sloticonimage">Today&#39;s Lesson: Inventory Item Slot/Icon/Image</h2>
<blockquote>
<p><strong>Summary</strong><br></p>
</blockquote>
<ol>
<li>We take a look at how we can setup the slots for our inventory system, we cover placing the images, anchoring them and setting the variables we&#39;ll be using to link the functionality to.<br></li>
<li>We take a look at how we can add inventory icon images into our RPG game inside of Unreal Engine 4 by creating a content binding which links our slot variables to our newly imported textures for the icons.<br>
<a href="https://www.youtube.com/watch?v=hfe49BDzotI&amp;list=PLL0cLF8gjBpqA8DcrhL_O9kD4jsUqhDR6&amp;index=40&amp;ab_channel=VirtusLearningHub">Virtus Learning Hub</a></li>
</ol>
<hr>
<h3 id="✅-inventory-slot-ui">✅ Inventory Slot UI</h3>
<p><strong>◼️ Inventory Slot</strong>
In Widget BP &lt;Inventory&gt;</p>
<ul>
<li>Image(BagIcon1)
- Image: BagIcon</li>
<li>Bag Icon 2~8 추가 생성
<img src="https://velog.velcdn.com/images/bruiser_gd/post/282416cf-58d2-4404-a26a-fb2155867151/image.png" alt=""></li>
</ul>
<p><strong>◼️ 인벤토리 아이템 변수</strong>
In &lt;ThirdPersonGameMode&gt;</p>
<ul>
<li>New Variables: InventoryItem1~8
- Type: Integer
- Default Value: 0<h3 id="✅-inventory-slot-logic">✅ Inventory Slot Logic</h3>
<strong>◼️ 변수에 따라 아이콘 변환</strong></li>
<li>BagIcon1~8 - Brush - 바인딩 생성</li>
<li>Icon별 숫자에 따라 ThirdPersonGameMode에서 저장되어 있는 Inventory Item N 을 이용</li>
<li>Switch on Int 노드로 변환 아이콘 결정
<img src="https://velog.velcdn.com/images/bruiser_gd/post/901b1cbe-99f3-482c-9d69-5226cbc0cd60/image.png" alt=""></li>
<li>아이콘별로 구현: Inventory Item N 부분만 아이콘 숫자에 맞게 수정
<img src="https://velog.velcdn.com/images/bruiser_gd/post/e9a2138f-8814-491f-9dd3-d3215e97298d/image.png" alt=""></li>
</ul>
<h3 id="✅-result">✅ Result</h3>
<ul>
<li>Inventory Item UI
테스트를 위해 GameMode의 슬롯별 기본값 임시 변경 0&rarr;1,2,3
<img src="https://velog.velcdn.com/images/bruiser_gd/post/5cdd795c-6247-49f9-8be5-c87555cd87d7/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[UE4 - Creating a RPG #37 - Displaying Inventory UI ]]></title>
            <link>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-37-Displaying-Inventory-UI</link>
            <guid>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-37-Displaying-Inventory-UI</guid>
            <pubDate>Wed, 04 Dec 2024 13:49:41 GMT</pubDate>
            <description><![CDATA[<h2 id="todays-lesson-displaying-inventory-ui">Today&#39;s Lesson: Displaying Inventory UI</h2>
<blockquote>
<p><strong>Summary</strong><br></p>
</blockquote>
<ol>
<li>We take a look at how we can import our inventory UI into Unreal Engine 4 and display it on the screen.<br></li>
<li>We also go over how we can get the player to open the bag using the &#39;B&#39; keybinding.<br>
<a href="https://www.youtube.com/watch?v=z2BCGT93Bb4&amp;list=PLL0cLF8gjBpqA8DcrhL_O9kD4jsUqhDR6&amp;index=39">Virtus Learning Hub</a></li>
</ol>
<hr>
<h3 id="✅-inventory-ui">✅ Inventory UI</h3>
<p><strong>◼️ Inventory Widget</strong></p>
<ul>
<li>New Widget BP: Inventory</li>
<li>Image(BagBG)</li>
<li>Button(CloseButton)
- OnClicked &rarr; Remove from Parent
- 마우스 커서 보이지 않게 처리
<img src="https://velog.velcdn.com/images/bruiser_gd/post/581dca41-d287-435e-a06f-525dd5290644/image.png" alt=""></li>
</ul>
<h3 id="✅-inventory-생성-로직">✅ Inventory 생성 로직</h3>
<p><strong>◼️ 버튼 입력</strong>
In Project Settings - Inputs - Action Mappings</p>
<ul>
<li>OpenBag
Key: B</li>
</ul>
<p>In Character BP &lt;MagicCharacter/SwordCharacter&gt;</p>
<ul>
<li>입력 액션 B &rarr; Inventory 위젯 생성 &rarr; 마우스 커서 보임 처리
<img src="https://velog.velcdn.com/images/bruiser_gd/post/fc11a877-b274-4869-bbac-9e5a1b3fc9bd/image.png" alt=""></li>
</ul>
<h3 id="✅-result">✅ Result</h3>
<ul>
<li>Inventory Open
<img src="https://velog.velcdn.com/images/bruiser_gd/post/b2f1aac8-33c8-433e-97c8-e58342d91b40/image.png" alt=""></li>
<li>Inventory Close
<img src="https://velog.velcdn.com/images/bruiser_gd/post/a4bcf098-26b2-4113-9b43-cebbd21aac84/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[UE4 - Creating a RPG #36 - 3D UI Class Select]]></title>
            <link>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-36-3D-UI-Class-Select</link>
            <guid>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-36-3D-UI-Class-Select</guid>
            <pubDate>Wed, 04 Dec 2024 13:03:54 GMT</pubDate>
            <description><![CDATA[<h2 id="todays-lesson-3d-ui-class-select">Today&#39;s Lesson: 3D UI Class Select</h2>
<blockquote>
<p><strong>Summary</strong><br></p>
</blockquote>
<ol>
<li>We take a look at how we can render our characters in 3D onto our class selection screen.<br></li>
<li>We go over placing the recording actor into our level and setting up the material that&#39;ll convert and place it onto our UI.<br>
<a href="https://www.youtube.com/watch?v=Lh4EwokaLtM&amp;list=PLL0cLF8gjBpqA8DcrhL_O9kD4jsUqhDR6&amp;index=38">Virtus Learning Hub</a></li>
</ol>
<hr>
<h3 id="✅-3d-ui">✅ 3D UI</h3>
<p><strong>◼️ 캐릭터를 이용해 UI 만들기</strong></p>
<ul>
<li>New Actor BP &lt;RecordingActor&gt;</li>
<li>Add Component: Skeletal Mesh
Skeletal Mesh, Animation 설정
<code>Magic Character, Sword Character</code></li>
<li>Add Component: Camera
<img src="https://velog.velcdn.com/images/bruiser_gd/post/ae6ee48d-36ba-40c5-bd53-06de4e0f59b7/image.png" alt=""></li>
<li>Add Component: Scene Capture Component 2D
- Scene Capture - Texture Target: 새 에셋 생성 - 렌더 타겟
&lt;CharacterRender&gt;
- size x: 2048
- size y: 1024
<img src="https://velog.velcdn.com/images/bruiser_gd/post/9482711b-8944-4a08-aff7-46d645141610/image.png" alt=""></li>
<li>Render Target 우클릭 - Create Material</li>
<li>Blend Mode: Translucent(투명한)</li>
<li>Alpha &rarr; 1 minus &rarr; Opacity</li>
<li>RGB &rarr; Emissive Color</li>
</ul>
<h3 id="✅-위젯에-표시">✅ 위젯에 표시</h3>
<p><strong>◼️ 위젯에서 Character Render Material 이용</strong>
In Widget BP &lt;Class_Select&gt;</p>
<ul>
<li>Image
- Image: CharacterRenderMat
- 경고 메시지 클릭 후 컴파일
<img src="https://velog.velcdn.com/images/bruiser_gd/post/983e6e8a-cea3-4163-85da-8be34aa57dac/image.png" alt=""></li>
<li>Recording Actor 레벨에 배치
- Location 조정으로 뒷 배경이 보이지 않도록 함
<img src="https://velog.velcdn.com/images/bruiser_gd/post/9c1654f0-4949-4b03-952c-939ed1407bdb/image.png" alt=""></li>
</ul>
<h3 id="✅-위젯-수정">✅ 위젯 수정</h3>
<ul>
<li>텍스트 추가 및 위치 조정
<img src="https://velog.velcdn.com/images/bruiser_gd/post/437d542a-0239-41f5-8d30-060a29c6f656/image.png" alt=""></li>
<li>Background Blur
<code>흐림 처리.</code>
- Z order: -1</li>
<li>Button
- Normal/Hovered/Pressed Image 설정</li>
</ul>
<h3 id="✅-result">✅ Result</h3>
<ul>
<li>3D UI
<img src="https://velog.velcdn.com/images/bruiser_gd/post/c0b19545-4917-46a5-91be-4e898c24d188/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[UE4 - Creating a RPG #35 - Looting Coins]]></title>
            <link>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-35-Looting-Coins</link>
            <guid>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-35-Looting-Coins</guid>
            <pubDate>Wed, 04 Dec 2024 08:56:34 GMT</pubDate>
            <description><![CDATA[<h2 id="todays-lesson-looting-coins">Today&#39;s Lesson: Looting Coins</h2>
<blockquote>
<p><strong>Summary</strong><br></p>
</blockquote>
<ol>
<li>We take a look at how we can make the engine generate a random amount of coins when the player collects a loot bag and add it to their current balance.<br></li>
<li>We also go over how we can display that random value on the screen as a variable.<br>
<a href="https://www.youtube.com/watch?v=j3bOILNh7zk&amp;list=PLL0cLF8gjBpqA8DcrhL_O9kD4jsUqhDR6&amp;index=37">Virtus Learning Hub</a></li>
</ol>
<hr>
<h3 id="✅-클래스별-재화-획득">✅ 클래스별 재화 획득</h3>
<p>__◼️ 재화 관리를 위한 클래스 구분 __
In &lt;ThirdPersonGameMode&gt;</p>
<ul>
<li>New Variable: ClassSelected
- Type: Integer, Default Value: 0</li>
<li>New Variable: AmountFound
- Type: Integer, Default Value: 0</li>
</ul>
<p>In Widget BP &lt;Class_Select&gt;</p>
<ul>
<li>Select Magic Character 이후
ThirdPersonGameMode의 ClassSelected 1로 설정</li>
<li>Select Sword Character 이후
ThirdPersonGameMode의 ClassSelected 2로 설정
<img src="https://velog.velcdn.com/images/bruiser_gd/post/67a87c0a-d021-44d6-ab30-ba184ab360fa/image.png" alt=""></li>
</ul>
<p>__◼️ 클래스별 재화 획득 로직  __
In  &lt;LootBagWidget&gt;</p>
<ul>
<li>Construct Event
<code>Create Widget을 통해 매번 새로운 위젯 인스턴스가 생성되고, 각각의 인스턴스는 고유한 Counstruct Event를 실행한다</code></li>
<li>게임 모드의 AmountFound 변수를 매번 랜덤하게 설정</li>
<li>게임 모드의 ClassSelected 변수가
- 1인 경우 Magic Character의 Currency를
- 2인 경우 Sword Character의 Currency를
AmountFound 값만큼 더한 뒤 다시 저장
<img src="https://velog.velcdn.com/images/bruiser_gd/post/5788ca56-6fda-4ebd-b4c0-7e346e1b117a/image.png" alt=""></li>
</ul>
<h3 id="✅-ui">✅ UI</h3>
<p>__◼️ 재화 개수 표시  __</p>
<ul>
<li>CoinsNumber - 바인딩 생성
<img src="https://velog.velcdn.com/images/bruiser_gd/post/f1a18110-9a1b-4b40-8639-caa39a3d30ee/image.png" alt=""></li>
</ul>
<h3 id="✅-result">✅ Result</h3>
<ul>
<li>재화 획득
<img src="https://velog.velcdn.com/images/bruiser_gd/post/34cc14d3-a1b0-486e-8eda-399c89ad8e1e/image.png" alt=""></li>
<li>재화 합산: 22 + 24
<img src="https://velog.velcdn.com/images/bruiser_gd/post/c5fa4c17-eb17-440e-acf3-ca003e0af2f7/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[UE4 - Creating a RPG #34 - Loot Screen Widget]]></title>
            <link>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-34-Loot-Screen-Widget</link>
            <guid>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-34-Loot-Screen-Widget</guid>
            <pubDate>Wed, 04 Dec 2024 07:55:15 GMT</pubDate>
            <description><![CDATA[<h2 id="todays-lesson-loot-screen-widget">Today&#39;s Lesson: Loot Screen Widget</h2>
<blockquote>
<p><strong>Summary</strong><br></p>
</blockquote>
<ol>
<li>We take a look at how we can start to create our loot screen that pops up when the player walks over a loot bag. <br></li>
<li>The loot bag will allow the player to find coins and items they&#39;ll use later on in the game.<br>
<a href="https://www.youtube.com/watch?v=gBrOxp3a0hI&amp;list=PLL0cLF8gjBpqA8DcrhL_O9kD4jsUqhDR6&amp;index=36">Virtus Learning Hub</a></li>
</ol>
<hr>
<h3 id="✅-lootbag-ui">✅ LootBag UI</h3>
<p>__◼️ LootBag 위젯 __</p>
<ul>
<li>Create Widget BP &lt;LootBagWidget&gt;</li>
<li>Image(LootBag Background)
- Image: LootBG</li>
<li>Button(Close)
- Normal - Image: Close_Normal
- Hovered - Image: Close_Rollover
- Pressed - Image: Close_Normal</li>
<li>Image(Currency Icon)
- Image: Coins</li>
<li>Text(Currency Icon)</li>
</ul>
<p>__◼️ 창 닫기 기능 __</p>
<ul>
<li>CloseButton &rarr; OnClicked Event</li>
<li>Remove from Parent</li>
</ul>
<h3 id="✅-lootbag-logic">✅ LootBag Logic</h3>
<p>__◼️ 창 열기 __
In Actor BP &lt;LootPickup&gt;</p>
<ul>
<li>위젯 생성: Create Widget &rarr; Add to Viewport</li>
<li>게임 일시 정지: Set Game Paused(True)</li>
<li>마우스 커서 보임: As Player Controller &rarr; Set Show Mosue Cursor(True)
<img src="https://velog.velcdn.com/images/bruiser_gd/post/eec89027-0dbf-42a3-8443-1c019326233b/image.png" alt=""></li>
</ul>
<p>__◼️ 창 닫기 추가 기능 __
In CloseButton - OnClicked Event</p>
<ul>
<li>게임 일시 정지: Set Game Paused(False)</li>
<li>마우스 커서 보임: As Player Controller &rarr; Set Show Mosue Cursor (False)</li>
</ul>
<h3 id="✅-result">✅ Result</h3>
<ul>
<li>LootBag 열기
<img src="https://velog.velcdn.com/images/bruiser_gd/post/9d5935c6-6d37-40d1-97ab-475b0a761edb/image.png" alt="">
<img src="https://velog.velcdn.com/images/bruiser_gd/post/435f42f2-e975-4df4-978c-23edc182c71c/image.png" alt=""></li>
<li>LootBag 닫기
<img src="https://velog.velcdn.com/images/bruiser_gd/post/80a25164-d818-4d6a-94ce-5377d2986665/image.png" alt="">
<img src="https://velog.velcdn.com/images/bruiser_gd/post/ef30f33a-643a-4745-951b-96f93b204ce4/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[UE4 - Creating a RPG #33 - Game Currency]]></title>
            <link>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-33-Game-Currency</link>
            <guid>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-33-Game-Currency</guid>
            <pubDate>Tue, 03 Dec 2024 09:28:31 GMT</pubDate>
            <description><![CDATA[<h2 id="todays-lesson-game-currency">Today&#39;s Lesson: Game Currency</h2>
<blockquote>
<p><strong>Summary</strong><br></p>
</blockquote>
<ol>
<li>we take a look at how we can create a simple currency system for our role playing game (RPG) within Unreal Engine 4.<br></li>
<li>We show you how to create the variables for the currency and then display it on the UI using content bindings.<br>
<a href="https://www.youtube.com/watch?v=00MfxV4fEnI&amp;list=PLL0cLF8gjBpqA8DcrhL_O9kD4jsUqhDR6&amp;index=35">Virtus Learning Hub</a></li>
</ol>
<hr>
<h3 id="✅-variables">✅ Variables</h3>
<p>__◼️ Currency 관련 변수 생성 __
In Character Blueprint &lt;Magic Character/Swrod Character&gt;</p>
<ul>
<li>New Variable: Currency
- Type: Integer
- Default Value: 0</li>
</ul>
<h3 id="✅-ui">✅ UI</h3>
<p>__◼️ Currency UI 생성 __
In Widget Blueprint &lt;RPGHUD/MeleeHUD&gt;</p>
<ul>
<li>Text(Currency_Value)</li>
<li>Image(Currency_Image)
<img src="https://velog.velcdn.com/images/bruiser_gd/post/0c5af829-6295-4444-af5b-b79d8b173828/image.png" alt=""></li>
<li>Text - 바인딩 생성
- As Magic Character &rarr; Get Currency &rarr; ToText
- Minimum Integral Digits: 3
<img src="https://velog.velcdn.com/images/bruiser_gd/post/fe2af74d-8aed-4510-967d-bd38af9dc5e0/image.png" alt=""></li>
</ul>
<h3 id="✅-result">✅ Result</h3>
<ul>
<li>Magic Character - Currency
<img src="https://velog.velcdn.com/images/bruiser_gd/post/bdb0f46c-fee5-4d80-a8f4-bb34cb5bdc71/image.png" alt=""></li>
<li>Sword Character - Currency
<img src="https://velog.velcdn.com/images/bruiser_gd/post/0e1ab072-6999-4f9d-a95c-83a966d61f69/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[UE4 - Creating a RPG #32 - Level Up Popup]]></title>
            <link>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-32-Level-Up-Popup</link>
            <guid>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-32-Level-Up-Popup</guid>
            <pubDate>Tue, 03 Dec 2024 07:57:25 GMT</pubDate>
            <description><![CDATA[<h2 id="todays-lesson-level-up-popup">Today&#39;s Lesson: Level Up Popup</h2>
<blockquote>
<p><strong>Summary</strong><br></p>
</blockquote>
<ol>
<li>We take a look at how we can make a popup message display on the player&#39;s screen when they level up.<br></li>
<li>We go over creating the animation and the logic to place it on the screen.<br>
<a href="https://www.youtube.com/watch?v=GaypvTrTaBk&amp;list=PLL0cLF8gjBpqA8DcrhL_O9kD4jsUqhDR6&amp;index=34">Virtus Learning Hub</a></li>
</ol>
<hr>
<h3 id="✅-ui-애니메이션-생성">✅ UI, 애니메이션 생성</h3>
<p>__◼️ 팝업 블루프린트 __</p>
<ul>
<li>Create Widget Blueprint &lt;LevelUp&gt;</li>
<li>Image(Background) 추가
- Brush - Image: LevelPopup</li>
<li>Text(Level) 추가
<img src="https://velog.velcdn.com/images/bruiser_gd/post/13a72cda-4f2e-40aa-97bb-8fbdff5cf22e/image.png" alt=""></li>
<li>Fade In/Out Animation을 위해 알파 기본값 0으로 설정</li>
</ul>
<p>__◼️ 팝업 애니메이션 __</p>
<ul>
<li>대상 추가 Background, Level</li>
<li>Background - Color and Opacity 트랙 추가
- 0초 Opacity 0
- 1초 Opacity 1
- 1.5초 Opacity 1
- 2.5초 Opacity 0</li>
<li>Level 에도 동일한 트랙 추가</li>
</ul>
<p>__◼️ 팝업 로직 __</p>
<ul>
<li>Construct Event</li>
<li>Play Animation
- In Animation: Get FadeInOut
<img src="https://velog.velcdn.com/images/bruiser_gd/post/98155968-7881-4bfb-ac51-17a424b1c43a/image.png" alt=""></li>
</ul>
<h3 id="✅-기존-로직에-추가">✅ 기존 로직에 추가</h3>
<p>__◼️ 위젯 생성 시점 __
In Character Blueprint &lt;SimpleAI&gt;</p>
<ul>
<li>Death Function에서 LevelUp한 경우에 애니메이션 재생
<img src="https://velog.velcdn.com/images/bruiser_gd/post/03dedad5-9204-4bb6-8ff1-8fdb2e52249c/image.png" alt=""></li>
</ul>
<p>__◼️ 레벨업 데이터 연동 __</p>
<ul>
<li>Level - Text 바인딩 생성</li>
<li>As ThirdPersonGameMode &rarr; Get Level &rarr; ToText
- Minimum Integral Digits: 2
<img src="https://velog.velcdn.com/images/bruiser_gd/post/6f2fa691-2da0-4e54-b374-4e2855cf52e3/image.png" alt=""></li>
</ul>
<h3 id="✅-result">✅ Result</h3>
<ul>
<li>Level Up 시점에 Popup 생성
<img src="https://velog.velcdn.com/images/bruiser_gd/post/e6104516-c6ed-44cc-ba72-0395817486ca/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[UE4 - Creating a RPG #31 - Saving Player XP]]></title>
            <link>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-30-Saving-Player-XP</link>
            <guid>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-30-Saving-Player-XP</guid>
            <pubDate>Mon, 02 Dec 2024 15:22:29 GMT</pubDate>
            <description><![CDATA[<h2 id="todays-lesson-saving-player-xp">Today&#39;s Lesson: Saving Player XP</h2>
<blockquote>
<p><strong>Summary</strong><br></p>
</blockquote>
<ol>
<li>We take a look at how we can save the player&#39;s XP and current level to a permanent file, that way when they open/close the game they&#39;ll jump back to the amount of XP they last had.<br></li>
<li>We go over creating the save game blueprint along with all the logic and nodes required to get the system working.<br>
<a href="https://www.youtube.com/watch?v=n2A5R9hlZ-U&amp;list=PLL0cLF8gjBpqA8DcrhL_O9kD4jsUqhDR6&amp;index=332">Virtus Learning Hub</a></li>
</ol>
<hr>
<h3 id="✅-savegame-blueprint">✅ SaveGame Blueprint</h3>
<p>__◼️ xp, level 데이터를 저장할 블루프린트 생성 __
New SaveGame Blueprint &lt;RPGSaveGame&gt;</p>
<ul>
<li>New Variable: Exp (Integer, Default 0)</li>
<li>New Variable: MaxExp (Integer, Default 5)</li>
<li>New Variable: Level (Integer, Default 1)</li>
</ul>
<h3 id="✅-game-mode에서-savegame-bp-관리">✅ Game Mode에서 SaveGame BP 관리</h3>
<p>__◼️ 게임 시작 시 __
In Game Mode &lt;ThirdPersonGameMode&gt;</p>
<ul>
<li>Begin Play</li>
<li>Does Save Game Exist
<code>주어진 이름(Slot)의 세이브 게임이 있는지 확인</code>
- Slot name: XP</li>
<li>Branch - True
<code>Save된 게임 데이터가 있는 경우 Load</code>
&rarr; Load Game from Slot
- Slot name: XP</li>
<li>Load Game from Slot_Return Value 변수로 승격
SaveSubClass</li>
<li>SaveSubClass &rarr; Cast to RPGSaveGame
- RPGSaveGame의 Exp/MaxExp/Level 값을 
현재 Game Mode의 Experience/Max Experience/Level 값으로 저장
<img src="https://velog.velcdn.com/images/bruiser_gd/post/64778173-e497-487c-9af1-b787c331eabf/image.png" alt=""></li>
<li>Branch - False
<code>Save된 게임 데이터가 없는 경우 Create</code>
&rarr; Create Save Game Object
- Class: RPGSaveGame</li>
<li>Create Save Game Object_Return Value &rarr; Set SaveSubClass
-Set Save Sub Class &rarr; Save Game to Slot
<img src="https://velog.velcdn.com/images/bruiser_gd/post/3723a6c5-7bea-4b88-8db9-c72c15acd082/image.png" alt=""></li>
</ul>
<p>__◼️ 업데이트 __</p>
<ul>
<li>New Function: UpdateNumbers
Game Mode - Save Sub Class 안의 변수들을 새로운 값으로 갱신한 후
Save Game to Slot 이용
<img src="https://velog.velcdn.com/images/bruiser_gd/post/884e91ad-37ba-43f4-91d8-9ccbc232d9c8/image.png" alt=""></li>
</ul>
<p><strong>◼️ 적을 죽였을 경우 정보 갱신</strong>
In Character Blueprint &lt;SimpleAI&gt;</p>
<ul>
<li>Death Function 에서 UpdateNumbers 사용
<img src="https://velog.velcdn.com/images/bruiser_gd/post/b3571f86-676b-499b-ae92-6018e991acc5/image.png" alt=""></li>
</ul>
<h3 id="✅-result">✅ Result</h3>
<ul>
<li>게임 종료 전
<img src="https://velog.velcdn.com/images/bruiser_gd/post/811bf9dc-5742-468f-90f9-21e2728089dc/image.png" alt=""></li>
<li>게임 종료 후 로드
<img src="https://velog.velcdn.com/images/bruiser_gd/post/7009e0f6-221e-4406-8b2a-440a66ee154f/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[UE4 - Creating a RPG #30 - Player XP & Leveling]]></title>
            <link>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-28-Player-XP-Leveling</link>
            <guid>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-28-Player-XP-Leveling</guid>
            <pubDate>Mon, 02 Dec 2024 14:12:07 GMT</pubDate>
            <description><![CDATA[<h2 id="todays-lesson-player-xp--leveling">Today&#39;s Lesson: Player XP &amp; Leveling</h2>
<blockquote>
<p><strong>Summary</strong><br></p>
</blockquote>
<ol>
<li>We take a look at how we can setup a simple XP and leveling system for our role playing game (RPG) inside of Unreal Engine 4.<br></li>
<li>We go over the variables uses to create it along with the logic to progress through each of the levels by collecting the XP and exponentially increasing the difficulty of each level. <br>
<a href="https://www.youtube.com/watch?v=Q5pMmpJtdis&amp;list=PLL0cLF8gjBpqA8DcrhL_O9kD4jsUqhDR6&amp;index=32">Virtus Learning Hub</a></li>
</ol>
<hr>
<h3 id="✅-experience-level-변수-관리">✅ Experience, Level 변수 관리</h3>
<p><strong>◼️ exp, level 변수 생성</strong>
In Game Mode &lt;ThirdPersonGameMode&gt;</p>
<ul>
<li>New Variable: Experience
- Type: Integer
- Default Value: 0</li>
<li>New Variable: Max Experience
- Type: Integer
- Default Value: 5</li>
<li>New Variable: Level
- Type: Integer
- Default Value: 1</li>
</ul>
<p><strong>◼️ experience 표시</strong></p>
<ul>
<li>In Widget Blueprint &lt;MeleeHUD/RPGHUD&gt;</li>
<li>Progress - Percent - 바인딩 생성
ThirdPersonGameMode의 Exp/MaxExp &rarr; Return Value
<img src="https://velog.velcdn.com/images/bruiser_gd/post/8de90d31-d255-4d95-8427-818cbcc75718/image.png" alt=""></li>
</ul>
<p><strong>◼️ level 표시</strong></p>
<ul>
<li>Level - Text - 바인딩 생성
ThirdPersonGameMode의 Level &rarr; ToText(integer)
<code>자릿수 결정: Minimum Integer Digits, 2</code>
&rarr; Return Value
<img src="https://velog.velcdn.com/images/bruiser_gd/post/76cca47d-e38e-472f-a989-395721b075d3/image.png" alt=""></li>
</ul>
<h3 id="✅-experience-획득">✅ Experience 획득</h3>
<p>In Character Blueprint &lt;SimpleAI&gt;</p>
<ul>
<li>Death Function
적이 죽으면 exp + 1
exp &gt;= max exp 이면 Level + 1, exp 0, max exp * 2
<img src="https://velog.velcdn.com/images/bruiser_gd/post/f20fe0ce-690e-4899-8177-964ec9ec23c7/image.png" alt="">
<img src="https://velog.velcdn.com/images/bruiser_gd/post/5b252876-053b-46a0-8331-10e82686bf88/image.png" alt=""></li>
</ul>
<h3 id="✅-result">✅ Result</h3>
<ul>
<li>Magic Character Exp, Level
<img src="https://velog.velcdn.com/images/bruiser_gd/post/80aad72f-a4a0-4bd0-92ff-6ac1e5607a7a/image.png" alt=""></li>
<li>Sword Character Exp, Level
<img src="https://velog.velcdn.com/images/bruiser_gd/post/9bfa2fe1-3658-4eb2-9a9d-7fa2e0f445dd/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[UE4 - Creating a RPG #29 - Simple Quest System]]></title>
            <link>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-28-Simple-Quest-System</link>
            <guid>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-28-Simple-Quest-System</guid>
            <pubDate>Mon, 02 Dec 2024 10:34:12 GMT</pubDate>
            <description><![CDATA[<h2 id="todays-lesson-simple-quest-system">Today&#39;s Lesson: Simple Quest System</h2>
<blockquote>
<p><strong>Summary</strong><br></p>
</blockquote>
<ol>
<li>We take a look at how we can setup a simple quest system for our RPG game within Unreal Engine 4.<br></li>
<li>We cover how we can display the quest on the screen and tie it to a variable within our game mode. <br>
<a href="https://www.youtube.com/watch?v=Kj80NwyL0tA&amp;list=PLL0cLF8gjBpqA8DcrhL_O9kD4jsUqhDR6&amp;index=31">Virtus Learning Hub</a></li>
</ol>
<hr>
<h3 id="✅-hud에-퀘스트-표시">✅ HUD에 퀘스트 표시</h3>
<p>__◼️ Quest Widget __
In Widget Blueprint &lt;RPGHUD/MeleeHUD&gt;</p>
<ul>
<li>Image 추가
- Image: QuestBG</li>
<li>Text 추가
<code>퀘스트 이름</code></li>
<li>Text 추가
<code>퀘스트 내용</code>
<img src="https://velog.velcdn.com/images/bruiser_gd/post/b8aa5966-5137-4e80-aafb-09226dc13ae6/image.png" alt=""></li>
</ul>
<p>__◼️ Game Mode __
In GameMode Blueprint &lt;ThirdPersonGameMode&gt;</p>
<ul>
<li>New Variable: Quest
Type: Text</li>
</ul>
<p>__◼️ Binding __</p>
<ul>
<li>Quest Text 바인드
As Third Person Game Mode &rarr; Get Quest
<img src="https://velog.velcdn.com/images/bruiser_gd/post/a1573385-442b-4310-a2b5-7206d806df75/image.png" alt=""></li>
</ul>
<h3 id="✅-퀘스트-갱신">✅ 퀘스트 갱신</h3>
<p>__◼️ Quest Actor __</p>
<ul>
<li>New Actor Blueprint &lt;Quest1&gt;</li>
<li>Add Component: Box Collision</li>
<li>레벨에 배치</li>
</ul>
<p>__◼️ Logic __</p>
<ul>
<li>Box Collision에 Overlap된 Actor가 Character인 경우
게임 모드의 Quest 변수 내용 수정
<img src="https://velog.velcdn.com/images/bruiser_gd/post/9407009f-a3d9-4a9f-915d-98a13c76b307/image.png" alt=""></li>
</ul>
<h3 id="✅-result">✅ Result</h3>
<ul>
<li>퀘스트 기본
<img src="https://velog.velcdn.com/images/bruiser_gd/post/6ee33508-c5a2-4ed4-a6e0-2f52d9225e69/image.png" alt=""></li>
<li>퀘스트 갱신
<img src="https://velog.velcdn.com/images/bruiser_gd/post/1fbce1ea-d64c-4952-9c99-959a5d3e0047/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[UE4 - Creating a RPG #28 -
Character Selection Screen]]></title>
            <link>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-27-Character-Selection-Screen</link>
            <guid>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-27-Character-Selection-Screen</guid>
            <pubDate>Sun, 01 Dec 2024 16:12:24 GMT</pubDate>
            <description><![CDATA[<h2 id="todays-lesson-character-selection-screen">Today&#39;s Lesson: Character Selection Screen</h2>
<blockquote>
<p><strong>Summary</strong><br></p>
</blockquote>
<ol>
<li>We take a look at how we can setup a character selection screen that will allow the player to choose to use either the magic or sword based character. <br></li>
<li>We cover all the blueprints required to set this screen up.<br>
<a href="https://www.youtube.com/watch?v=axKnZxyNSp8&amp;list=PLL0cLF8gjBpqA8DcrhL_O9kD4jsUqhDR6&amp;index=30">Virtus Learning Hub</a></li>
</ol>
<hr>
<h3 id="✅-캐릭터-선택창">✅ 캐릭터 선택창</h3>
<p>__◼️ 월드 세팅 __</p>
<ul>
<li>World Settings - Game Mode
Default Pawn Class: None
<code>선택을 통해 기본 캐릭터를 정하기 위함</code></li>
</ul>
<p>__◼️ 위젯 블루프린트 __</p>
<ul>
<li>Create Widget Blueprint &lt;Class_Select&gt;</li>
<li>버튼/텍스트 2개 추가
<code>캐릭터 선택용 버튼</code>
<img src="https://velog.velcdn.com/images/bruiser_gd/post/da527ceb-4e52-4eea-af8e-4e0e9afa711d/image.png" alt=""></li>
</ul>
<h3 id="✅-레벨에-캐릭터-소환">✅ 레벨에 캐릭터 소환</h3>
<p>__◼️ 버튼 클릭 함수 추가 __</p>
<ul>
<li>Magic_Character 버튼 - On Clicked</li>
<li>Spawn Actor from Class
- Class: MagicCharacter
- Transform: Make Transform
- Collision Handling Override: Always Spawn, Ignore Collisions</li>
<li>Is Valid
- Input Object: Return Value</li>
<li>Get Player Controller &rarr; Possess
- In Pawn: Return Value
<img src="https://velog.velcdn.com/images/bruiser_gd/post/70f28ef6-968f-4ce7-b366-800a11631f1a/image.png" alt=""></li>
<li>Sword_Character 버튼 - On Clicked
<code>//위와 동일하게 구현</code></li>
</ul>
<p>__◼️ 레벨 블루프린트 로직 __</p>
<ul>
<li>Event BeiginPlay</li>
<li>Construct from Class
- Class: Class_Select</li>
<li>Add to Viewport</li>
</ul>
<h3 id="✅-세부-로직">✅ 세부 로직</h3>
<p>__◼️ 캐릭터 선택 후 UI 제거 __
In Widget Blueprint &lt;Class_Select&gt;
Possess를 통한 컨트롤러를 지정된 폰으로 어태치 이후</p>
<ul>
<li>Remove from Parent
<img src="https://velog.velcdn.com/images/bruiser_gd/post/df72957d-b7e0-435b-9a0e-6d5868cd7361/image.png" alt=""></li>
</ul>
<p><strong>◼️ 마우스 커서</strong></p>
<ul>
<li>Contruect Event를 통한 마우스 보임 처리
<img src="https://velog.velcdn.com/images/bruiser_gd/post/6b04dbb5-8610-465d-a163-0d8955434abb/image.png" alt=""></li>
<li>Remove Parent 이후 마우스 보이지 않음 처리
<img src="https://velog.velcdn.com/images/bruiser_gd/post/3d0fac63-d92d-49df-9889-024eb0dee734/image.png" alt=""></li>
</ul>
<p><strong>◼️ UI 배경</strong></p>
<ul>
<li>이미지
<img src="https://velog.velcdn.com/images/bruiser_gd/post/07617ba2-325f-4e65-abd4-8821ae04a2b3/image.png" alt=""></li>
</ul>
<h3 id="✅-result">✅ Result</h3>
<ul>
<li>캐릭터 선택 창
<img src="https://velog.velcdn.com/images/bruiser_gd/post/752170c9-4b68-418f-9f47-ec003d35a0ba/image.png" alt=""></li>
<li>선택 캐릭터로 시작
<img src="https://velog.velcdn.com/images/bruiser_gd/post/e1f8bcc9-98d7-4681-8e3f-7174103fa305/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[UE4 - Creating a RPG #27 -
Magic While Moving]]></title>
            <link>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-26-Magic-While-Moving</link>
            <guid>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-26-Magic-While-Moving</guid>
            <pubDate>Sat, 30 Nov 2024 16:16:51 GMT</pubDate>
            <description><![CDATA[<h2 id="todays-lesson-magic-while-moving">Today&#39;s Lesson: Magic While Moving</h2>
<blockquote>
<p><strong>Summary</strong><br></p>
</blockquote>
<ol>
<li>We take a look at how we can use layered animations to allow our players to use their magic abilities whilst moving. <br></li>
<li>We do this by mixing the bottom half of the walk/run blendspace and the top half of the spell casting animations.<br>
<a href="https://www.youtube.com/watch?v=uCLXSBuG40U&amp;list=PLL0cLF8gjBpqA8DcrhL_O9kD4jsUqhDR6&amp;index=29">Virtus Learning Hub</a></li>
</ol>
<hr>
<h3 id="✅-layered-animation">✅ Layered Animation</h3>
<p>In Animation Blueprint &lt;Eve_BP&gt;
*<em>◼️ Ability1  *</em>
In Casting1H State</p>
<ul>
<li>Layered blend per bone
- Base Pose: Eve_BS
- Blend Poses0:  Ability1 Anim</li>
<li>Details - Layer Setup
- Branch Filters - Add Array Element
- Bone name: Spine2
- Blend Depth: 1
- Mesh Space Rotation Blend: True
<img src="https://velog.velcdn.com/images/bruiser_gd/post/04e196d9-0b5a-42dd-8d42-0a6bf6ba3a53/image.png" alt=""></li>
</ul>
<p>*<em>◼️ Ability2  *</em>
동일</p>
<h3 id="✅-움직임-제어-로직-수정">✅ 움직임 제어 로직 수정</h3>
<p>In Character Blueprint &lt;MagicCharacter&gt;</p>
<ul>
<li>Disable Movement 삭제</li>
<li>Stop Movement Immediately 삭제</li>
<li>Set Movement Mode 삭제</li>
</ul>
<h3 id="✅-result">✅ Result</h3>
<ul>
<li>Ability1 while moving
<img src="https://velog.velcdn.com/images/bruiser_gd/post/519bdcb4-4ffd-4020-8f4d-bb2f2f28a7d0/image.png" alt=""></li>
<li>Ability2 while moving
<img src="https://velog.velcdn.com/images/bruiser_gd/post/54103fb3-752f-4c5b-a312-017966d48766/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[UE4 - Creating a RPG #26 -
Jump Animations]]></title>
            <link>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-25-Jump-Animations</link>
            <guid>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-25-Jump-Animations</guid>
            <pubDate>Sat, 30 Nov 2024 15:14:59 GMT</pubDate>
            <description><![CDATA[<h2 id="todays-lesson-jump-animations">Today&#39;s Lesson: Jump Animations</h2>
<blockquote>
<p><strong>Summary</strong><br></p>
</blockquote>
<ol>
<li>We take a look at how we can setup a jump animation for both our characters within Unreal Engine 4.<br></li>
<li>We go over setting up the animation state along with the transitional rules to tell the engine when to go into the jumping state.<br>
<a href="https://www.youtube.com/watch?v=D98B0KJN1oI&amp;list=PLL0cLF8gjBpqA8DcrhL_O9kD4jsUqhDR6&amp;index=28">Virtus Learning Hub</a></li>
</ol>
<hr>
<h3 id="✅-jump-animation-rule">✅ Jump Animation, Rule</h3>
<p>*<em>◼️ 캐릭터가 점프 상태인지 체크하는 변수  *</em>
In Animation Blueprint &lt;Sword_AnimBP&gt;
In Event Graph</p>
<ul>
<li>As Sword Charcter &rarr; Get Character Movement Component</li>
<li>Character Movement &rarr; Is Falling</li>
<li>New Variable: IsFalling
Type: Boolean, Default Value: False</li>
<li>Is Falling &rarr; Set IsFalling
<img src="https://velog.velcdn.com/images/bruiser_gd/post/2087a441-965d-42ca-94eb-7b268ac7ae01/image.png" alt=""></li>
</ul>
<p>*<em>◼️ Jump State, Transition rule *</em>
In AnimGraph - State Machine</p>
<ul>
<li>New State: Jump
- Idle, Movement와 연결
<img src="https://velog.velcdn.com/images/bruiser_gd/post/27703d34-fc9c-4732-af1a-bb787e22226e/image.png" alt=""></li>
<li>Jump State - 애니메이션 결정</li>
<li>Transition Rule
- Idle/Movement &rarr; Jump: IsFalling == True
- Jump &rarr; Idle/Movement: IsFalling == False</li>
</ul>
<h3 id="✅-magic-character-jump">✅ Magic Character Jump</h3>
<p>위의 내용과 동일</p>
<h3 id="✅-result">✅ Result</h3>
<ul>
<li>Sword Character Jump
<img src="https://velog.velcdn.com/images/bruiser_gd/post/6c561c32-ff69-4888-b873-c5b688efae73/image.png" alt=""></li>
<li>Magic Character Jump
<img src="https://velog.velcdn.com/images/bruiser_gd/post/126a6a9c-bdb0-4f99-b101-69492b3a0d35/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[UE4 - Creating a RPG #25 -
Melee Combat While Moving]]></title>
            <link>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-25-Melee-Combat-While-Moving</link>
            <guid>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-25-Melee-Combat-While-Moving</guid>
            <pubDate>Fri, 29 Nov 2024 18:42:49 GMT</pubDate>
            <description><![CDATA[<h2 id="todays-lesson-melee-combat-while-moving">Today&#39;s Lesson: Melee Combat While Moving</h2>
<blockquote>
<p><strong>Summary</strong><br></p>
</blockquote>
<ol>
<li>We take a look at how we can use layered animations to blend the walking animation and the melee attack animation. This allows the player to move while attacking.<br>
<a href="https://www.youtube.com/watch?v=21826RLD3L8&amp;list=PLL0cLF8gjBpqA8DcrhL_O9kD4jsUqhDR6&amp;index=27">Virtus Learning Hub</a></li>
</ol>
<hr>
<h3 id="✅-animation-처리">✅ Animation 처리</h3>
<p>*<em>◼️ Animation Blending *</em>
In Animation Blueprint &lt;Sword_AnimBP&gt;
In Sword Attack State</p>
<ul>
<li>layered blend per bone
- Base Pose: Walk_Run_BS
- Blend Poses0: slash animation
<img src="https://velog.velcdn.com/images/bruiser_gd/post/e5e7a54f-93de-458c-a6de-5a98462f693d/image.png" alt=""></li>
<li>layered blend per bone - Details
- Config - Layer Setup - Add Array Element
<code>상하체 구별을 위함</code>
- Bone name: Spine1
- Blend Depth: 1</li>
<li>Bone name 참조
<img src="https://velog.velcdn.com/images/bruiser_gd/post/6346d260-cd83-40c5-be8b-dee5081e90a5/image.png" alt=""></li>
</ul>
<h3 id="✅-logic-처리">✅ Logic 처리</h3>
<p><strong>◼️ Melee Combat 로직 수정</strong>
In Character Blueprint &lt;SwordCharacter&gt;</p>
<ul>
<li>이동 불가 관련 삭제
<img src="https://velog.velcdn.com/images/bruiser_gd/post/8d4059e5-2f24-4a03-8c23-c70f30b86e3f/image.png" alt=""></li>
<li>이동을 다시 가능하게 하는 부분 삭제
<img src="https://velog.velcdn.com/images/bruiser_gd/post/9d57463e-42ca-4a22-8e23-4976aae0c573/image.png" alt=""></li>
</ul>
<h3 id="✅-result">✅ Result</h3>
<ul>
<li>이동 중 공격 가능
<img src="https://velog.velcdn.com/images/bruiser_gd/post/55f56c4f-fe38-474d-bfc2-056206917ac9/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[UE4 - Creating a RPG #24 -
Smart Random AI Roaming]]></title>
            <link>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-23-Smart-Random-AI-Roaming</link>
            <guid>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-23-Smart-Random-AI-Roaming</guid>
            <pubDate>Thu, 28 Nov 2024 11:59:26 GMT</pubDate>
            <description><![CDATA[<h2 id="todays-lesson-smart-random-ai-roaming">Today&#39;s Lesson: Smart Random AI Roaming</h2>
<blockquote>
<p><strong>Summary</strong><br></p>
</blockquote>
<ol>
<li>We take a look at how we can setup smart AI roaming with our enemy AI within Unreal Engine 4.<br></li>
<li>We move them to a random point within the reachable level, making them run around until the find the player.<br></li>
<li>We cover all the blueprints to setup this script.<br>
<a href="https://www.youtube.com/watch?v=z4CP2WsLxas&amp;list=PLL0cLF8gjBpqA8DcrhL_O9kD4jsUqhDR6&amp;index=26">Virtus Learning Hub</a></li>
</ol>
<hr>
<h3 id="✅-random-point로-ai-이동시키기">✅ Random Point로 AI 이동시키기</h3>
<p><strong>◼️ 블루프린트를 이용해 로직 구현</strong>
In Character Blueprint &lt;SimpleAI&gt;</p>
<ul>
<li>New Variable: IsMoving
Type: Boolean, Default Value: False
AI가 이동 중인지 알려주는 변수</li>
<li>Event  Tick &rarr; Delay(duration: 2.0)
2초마다 로직 실행</li>
<li>IsMoving 변수가 False인 경우
GetRandomReachablePointInRadius를 통해 Random Location을 생성하여</li>
<li>AI Move To를 통해 AI를 이동시킴</li>
<li>완료 후 IsMoving 변수를 다시 False로 설정
<img src="https://velog.velcdn.com/images/bruiser_gd/post/5e8bc6ef-0a6c-48ae-a59d-2d6e8e9e9745/image.png" alt=""></li>
</ul>
<h3 id="✅-플레이어를-무한히-쫓아가는-ai">✅ 플레이어를 무한히 쫓아가는 AI</h3>
<p><strong>◼️ Loop를 이용해 구현</strong>
<img src="https://velog.velcdn.com/images/bruiser_gd/post/b2fba617-980f-42cd-a855-daf25dba9443/image.png" alt=""></p>
<h3 id="✅-result">✅ Result</h3>
<ul>
<li>Random Point로 AI 이동
<img src="https://velog.velcdn.com/images/bruiser_gd/post/bc00de66-9aba-4b91-9c21-e660ac7efd91/image.png" alt=""></li>
<li>무한히 쫓아오는 AI
<img src="https://velog.velcdn.com/images/bruiser_gd/post/055369e2-95f8-443b-afd4-844f3f9e0245/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[UE4 - Creating a RPG #23 -Moving AI Enemies]]></title>
            <link>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-23-Moving-AI-Enemies</link>
            <guid>https://velog.io/@bruiser_gd/UE4-Creating-a-RPG-23-Moving-AI-Enemies</guid>
            <pubDate>Thu, 28 Nov 2024 10:45:30 GMT</pubDate>
            <description><![CDATA[<h2 id="todays-lesson-moving-ai-enemies">Today&#39;s Lesson: Moving AI Enemies</h2>
<blockquote>
<p><strong>Summary</strong><br></p>
</blockquote>
<ol>
<li>We take a look at how we can make our enemy AI move within our level using Unreal Engine 4.<br></li>
<li>We also go over how we can set the navigation boundaries for the enemy bots and the code used to control their movement.<br>
<a href="https://www.youtube.com/watch?v=4Iz4o9xuHKI&amp;list=PLL0cLF8gjBpqA8DcrhL_O9kD4jsUqhDR6&amp;index=25">Virtus Learning Hub</a></li>
</ol>
<hr>
<h3 id="✅-navigation-mesh">✅ Navigation Mesh</h3>
<p>*<em>◼️ Level 에서 Navigation 가능 영역 설정 *</em></p>
<ul>
<li>액터 배치 - 볼륨 - Nav Mesh Bounds Volume
레벨에 배치</li>
<li>P 입력을 통해 Navigation 표시 가능
<img src="https://velog.velcdn.com/images/bruiser_gd/post/1b94ff76-41dd-4765-a4eb-868770db4165/image.png" alt=""></li>
</ul>
<h3 id="✅-pawn-sensing">✅ Pawn Sensing</h3>
<p><strong>◼️ AI 반응 컴포넌트</strong>
In Character Blueprint &lt;SimpleAI&gt;</p>
<ul>
<li>Add Component: PawnSensing</li>
<li>AI 속성
<img src="https://velog.velcdn.com/images/bruiser_gd/post/959ab61a-f269-44c9-b1ad-40796f268bfd/image.png" alt=""></li>
<li>On See Pawn Event</li>
<li>Cast to Character
- Object: Pawn
<code>Magic Character, Sword Character 둘 다 Character Parent의 자식</code></li>
<li>AI Move To
- Pawn: Self
- Target Actor: As Character</li>
</ul>
<blockquote>
<p><strong>AI의 Parent도 Character인데, 플레이어 캐릭터에만 반응하는 이유?</strong>
PawnSensing Component의
AI - Only Sense Players 값이 True이기 때문.</p>
</blockquote>
<h3 id="✅-result">✅ Result</h3>
<ul>
<li>플레이어를 쫓아오는 AI
<img src="https://velog.velcdn.com/images/bruiser_gd/post/af89517d-a474-4d7d-81b7-6508bcf0e366/image.png" alt=""></li>
</ul>
]]></description>
        </item>
    </channel>
</rss>