<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>놀고싶다</title>
    <link>https://blob-thinking.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 3 Jul 2026 11:58:22 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Just Move</managingEditor>
    <image>
      <title>놀고싶다</title>
      <url>https://tistory1.daumcdn.net/tistory/6015303/attach/5a635c3ce6884bf39105a4b7706d50a2</url>
      <link>https://blob-thinking.tistory.com</link>
    </image>
    <item>
      <title>Gameplay Ability System - Top Down RPG / Section 9-2</title>
      <link>https://blob-thinking.tistory.com/1113</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Granting&amp;nbsp;Abilities&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 실제 Gameplay Ability를 만들 차례이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 Gameplay Ability 블루프린트를 만드는 것도 가능하지만, 프로젝트에서 사용할 모든 Ability가 공통으로 사용할 기능을 넣기 위해 GameplayAbility를 상속받는 C++ 베이스 클래스를 우선 생성해줄 것이다.&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/PnwcI/dJMcadvJzU9/UPvzO8geofsLLtJiO4rQw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PnwcI/dJMcadvJzU9/UPvzO8geofsLLtJiO4rQw0/img.png&quot; data-origin-width=&quot;1392&quot; data-origin-height=&quot;853&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.1141%; margin-right: 10px;&quot; data-widthpercent=&quot;49.69&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PnwcI/dJMcadvJzU9/UPvzO8geofsLLtJiO4rQw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPnwcI%2FdJMcadvJzU9%2FUPvzO8geofsLLtJiO4rQw0%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;1392&quot; height=&quot;853&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2qQ0J/dJMcahLK48J/eBHBEXJbKJE5kgfN8AKeq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2qQ0J/dJMcahLK48J/eBHBEXJbKJE5kgfN8AKeq0/img.png&quot; data-origin-width=&quot;1401&quot; data-origin-height=&quot;848&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.7231%;&quot; data-widthpercent=&quot;50.31&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2qQ0J/dJMcahLK48J/eBHBEXJbKJE5kgfN8AKeq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2qQ0J%2FdJMcahLK48J%2FeBHBEXJbKJE5kgfN8AKeq0%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;1401&quot; height=&quot;848&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 시작 시 캐릭터에게 Ability를 부여하는 구조를 만들 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AuraCharacterBase 클래스에 게임 시작 시 캐릭터에게 부여할 Gameplay Ability 목록을 블루프린트에서 설정할 수 있는 변수(StartupAbilities)를 추가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이 목록의 Ability들을 실제로 캐릭터에게 부여하는 AddCharacterAbilities() 함수를 생성한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1494&quot; data-origin-height=&quot;1232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l4XCA/dJMcacKwhfe/La9l1M0Tn9mB1qYrWrRoGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l4XCA/dJMcacKwhfe/La9l1M0Tn9mB1qYrWrRoGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l4XCA/dJMcacKwhfe/La9l1M0Tn9mB1qYrWrRoGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl4XCA%2FdJMcacKwhfe%2FLa9l1M0Tn9mB1qYrWrRoGK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;617&quot; height=&quot;509&quot; data-origin-width=&quot;1494&quot; data-origin-height=&quot;1232&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;Ability 기능 부여는 서버만 해야하기 때문에 가장 먼저 서버인지 검사해줄 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;238&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eQRWUv/dJMcaaMD8En/LpjVi49u8vJlmSgA77CLI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eQRWUv/dJMcaaMD8En/LpjVi49u8vJlmSgA77CLI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eQRWUv/dJMcaaMD8En/LpjVi49u8vJlmSgA77CLI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeQRWUv%2FdJMcaaMD8En%2FLpjVi49u8vJlmSgA77CLI1%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;385&quot; height=&quot;132&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;238&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;현재 Character에서 Ability를 부여하려고 하지만, 실제로 Ability를 관리하는 것은 AbilitySystemComponent이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 AbilitySystemCOmponent에게 이 Ability들을 지급하라고 요청만 해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 위한 함수를 AuraAbilitySystemComponent에서 구현해주자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1604&quot; data-origin-height=&quot;1090&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bY3uYG/dJMcagsyaz6/NMkeTMbFEayPKXx3OYN9z1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bY3uYG/dJMcagsyaz6/NMkeTMbFEayPKXx3OYN9z1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bY3uYG/dJMcagsyaz6/NMkeTMbFEayPKXx3OYN9z1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbY3uYG%2FdJMcagsyaz6%2FNMkeTMbFEayPKXx3OYN9z1%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;697&quot; height=&quot;474&quot; data-origin-width=&quot;1604&quot; data-origin-height=&quot;1090&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;반복문을 통해서 Ability Blueprint를 하나씩 가져오고, Gameplay Ability 부여를 위해서는 FGameplayAbilitySpec이 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 GiveAbility 함수를 사용하면 Ability가 부여되지만, 지금은 GiveAbilityAndAcitivateOnce 함수를 사용하여 부여 및 즉시 활성화까지해줄 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1683&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mA7DX/dJMb9971g81/ruDxRTQ2uhGvqk3XpZjpv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mA7DX/dJMb9971g81/ruDxRTQ2uhGvqk3XpZjpv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mA7DX/dJMb9971g81/ruDxRTQ2uhGvqk3XpZjpv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmA7DX%2FdJMb9971g81%2FruDxRTQ2uhGvqk3XpZjpv1%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;654&quot; height=&quot;152&quot; data-origin-width=&quot;1683&quot; data-origin-height=&quot;392&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;다시 AuraCharacterBase로 돌아가서 방금 구현한 함수를 호출해주자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 통해 Character는 Ability를 직접 부여하지않고, AbilitySystemComponent에 부여를 요청하게 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1548&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rj8f8/dJMb99Ut95S/TfvMFKPkluzkxnzpurkQa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rj8f8/dJMb99Ut95S/TfvMFKPkluzkxnzpurkQa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rj8f8/dJMb99Ut95S/TfvMFKPkluzkxnzpurkQa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frj8f8%2FdJMb99Ut95S%2FTfvMFKPkluzkxnzpurkQa1%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;1548&quot; height=&quot;324&quot; data-origin-width=&quot;1548&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로는 어디서 최종적으로 해당 함수를 호출할지이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 플레이어는 PossessedBy() 함수에서 AbilitySystem을 초기화하고, IniAbilityActorInfo 함수를 호출한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 바로 다음 줄에 AddCharacterAbilities 함수를 위치시켜주자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1521&quot; data-origin-height=&quot;944&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQVhL6/dJMcaicUfMF/6MzfdreDDKWd18K3mEP0hK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQVhL6/dJMcaicUfMF/6MzfdreDDKWd18K3mEP0hK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQVhL6/dJMcaicUfMF/6MzfdreDDKWd18K3mEP0hK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQVhL6%2FdJMcaicUfMF%2F6MzfdreDDKWd18K3mEP0hK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;646&quot; height=&quot;401&quot; data-origin-width=&quot;1521&quot; data-origin-height=&quot;944&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;이제 컴파일을 하고, 여태 작업한 C++ 클래스를 토대로 블루프린트 클래스를 생성해주자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;961&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k1wqU/dJMcaalwmI2/wZEYYm1kSINTK6wGhxiDgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k1wqU/dJMcaalwmI2/wZEYYm1kSINTK6wGhxiDgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k1wqU/dJMcaalwmI2/wZEYYm1kSINTK6wGhxiDgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk1wqU%2FdJMcaalwmI2%2FwZEYYm1kSINTK6wGhxiDgK%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;546&quot; height=&quot;579&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;961&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;그리고 해당 블루프린트에서 테스트용으로 Ability가 활성화될 때와 비활성화 될 때 간단한 문구를 출력하도록 하였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2035&quot; data-origin-height=&quot;1410&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XILnE/dJMcaff9URA/KBBbXfp5hb5mjCNRixgExK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XILnE/dJMcaff9URA/KBBbXfp5hb5mjCNRixgExK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XILnE/dJMcaff9URA/KBBbXfp5hb5mjCNRixgExK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXILnE%2FdJMcaff9URA%2FKBBbXfp5hb5mjCNRixgExK%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;784&quot; height=&quot;543&quot; data-origin-width=&quot;2035&quot; data-origin-height=&quot;1410&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;그리고 캐릭터 블루프린트로 가서 Ability를 할당하는 것도 잊지 말자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3359&quot; data-origin-height=&quot;1060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQRm6v/dJMb991i1fx/pvlTnj2v3NaSAj7qiK8J90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQRm6v/dJMb991i1fx/pvlTnj2v3NaSAj7qiK8J90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQRm6v/dJMb991i1fx/pvlTnj2v3NaSAj7qiK8J90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQRm6v%2FdJMb991i1fx%2FpvlTnj2v3NaSAj7qiK8J90%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;3359&quot; height=&quot;1060&quot; data-origin-width=&quot;3359&quot; data-origin-height=&quot;1060&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;이제 게임을 실행하면, Ability 활성화 문구만 뜨는 것을 볼 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1970&quot; data-origin-height=&quot;1138&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uwJ31/dJMcadJheod/2Vc8Hflb6X5u9TROSq2brk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uwJ31/dJMcadJheod/2Vc8Hflb6X5u9TROSq2brk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uwJ31/dJMcadJheod/2Vc8Hflb6X5u9TROSq2brk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuwJ31%2FdJMcadJheod%2F2Vc8Hflb6X5u9TROSq2brk%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;775&quot; height=&quot;448&quot; data-origin-width=&quot;1970&quot; data-origin-height=&quot;1138&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;이는 Ability가 자동 종료되지 않기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 문구 출력 후 Ability를 종료시켜주고, 다시 테스트해보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1724&quot; data-origin-height=&quot;1123&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qvgrR/dJMcab5Q8SR/RKklRstWvOTCYrO1cQ3XEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qvgrR/dJMcab5Q8SR/RKklRstWvOTCYrO1cQ3XEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qvgrR/dJMcab5Q8SR/RKklRstWvOTCYrO1cQ3XEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqvgrR%2FdJMcab5Q8SR%2FRKklRstWvOTCYrO1cQ3XEK%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;1724&quot; height=&quot;1123&quot; data-origin-width=&quot;1724&quot; data-origin-height=&quot;1123&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1984&quot; data-origin-height=&quot;1169&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OSZG4/dJMcadWTiLi/kdRitAvn6ZHOdSCLWZADWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OSZG4/dJMcadWTiLi/kdRitAvn6ZHOdSCLWZADWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OSZG4/dJMcadWTiLi/kdRitAvn6ZHOdSCLWZADWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOSZG4%2FdJMcadWTiLi%2FkdRitAvn6ZHOdSCLWZADWK%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;1984&quot; height=&quot;1169&quot; data-origin-width=&quot;1984&quot; data-origin-height=&quot;1169&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Study/[Unreal] Udemy 강의</category>
      <author>Just Move</author>
      <guid isPermaLink="true">https://blob-thinking.tistory.com/1113</guid>
      <comments>https://blob-thinking.tistory.com/1113#entry1113comment</comments>
      <pubDate>Fri, 3 Jul 2026 01:11:22 +0900</pubDate>
    </item>
    <item>
      <title>Gameplay Ability System - Top Down RPG / Section 9-1</title>
      <link>https://blob-thinking.tistory.com/1112</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;* 번역 주의&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Gameplay&amp;nbsp;Abilities&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1. Gameplay Ability란?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; GamePlay Ability는 게임에서 액터가 수행할 수 있는 행동이나 기술이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; GamePlay Ability는 UGameplayAbility를 상속한 클래스이며, 해당 Ability가 무엇을 하는지와 어떤 조건에서 사용할 수 있는지를 정의한다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2. Gameplay Ability의 특징&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;비동기적 실행&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; Gameplay Ability는 단순한 함수가 아니라 &lt;b&gt;비동기적으로 실행되는 인스턴스 객체&lt;/b&gt;이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; 특정 시점에 활성화될 수 있다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; 여러 단계(Multi-stage)의 작업(Task)을 수행할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; 이러한 작업은 일정 시간에 걸쳐 진행될 수도 있고, 그렇지 않을 수도 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;수행되는 작업&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &amp;bull; 작업은 다른 작업으로 분기할 수 있다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; 작업은 자체적으로 Gameplay Effect를 적용할 수 있다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; 이후 배우게 될 Gameplay Cue를 실행할 수도 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;조건부 실행&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &amp;bull; Gameplay Ability의 동작은 조건부일 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &amp;bull; 조건은 다음과 같은 요소를 기반으로 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1782917845650&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;플레이어 상호작용
환경과의 상호작용&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Replication과 Prediciton 지원&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &amp;bull; Gameplay Ability는 Gameplay Effect와 마찬가지로 Peplication과 Prediciton 기능을 기본적으로 지원한다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;3. Cost 와 CoolDown&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Gameaplay Ability에는 기본적으로 Cost와 Cooldown이라는 개념이 포함되어 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Cost&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Ability를 활성화하기 위해서는 필요한 Attribute Resource가 충분히 존재해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; 강의에서는 Mana를 Cost 자원으로 사용하여 구현한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; 하지만 자원(Resource)가 Mana일 필요는 없으며, 어떤 것이든 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;CoolDown&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Cooldown이 적용되면, Cooldown이 끝날 때까지 해당 Ability를 다시 활성화할 수 없다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;4. Ability Task&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Ability Task는 Gameplay Ability가 실행되는 동안 비동기 작업을 수행한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Delegate Broadcast&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Ability Task는 Delegate를 Broadcast하여 Ability의 실행 흐름에 영향을 줄 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Blurprint에서의 형태&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Ability Task는 C++ 에서 사용할 수 있고, Blueprint에서 여러 개의 출력 실행 핀을 가진 특수한 Blueprint 노드 형태로 나타난다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; 이 출력 실행 핀들은 개발자가 정의한 이벤트가 발생했을 때 Broadcast된 Delegate에 의해 실행된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; 이 구조를 사용하면 Blueprint에서 Ability 제어 흐름을 쉽게 구성할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;C++의 장점&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Ability Task가 수행하는 작업은 대부분 C++에서 처리된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; 따라서 C++의 최적화된 성능을 그대로 활용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;디자이너의 Ability 설계&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Ability Task를 만들어 대부분의 작업을 C++에서 수행하도록 만들면, Ability Blueprint에서는 Gameplay Ability의 메커니즘을 유연하게 설계할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; 또한 C++ 코드를 다룰 수 없는 디자이너도 성능을 희생하지 않고 Ability를 보다 자유롭게 제어할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;4. Ability Task&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Ability 부여&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Gameplay Ability를 사용하려면 먼저 Ability System Component에 해당 Ability를 부여해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Gameplay Ability Spec&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Ability가 부여되면, Gameplay Ability Spec이 생성된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; 이는 해당 Ability와 관련된 세부 정보를 정의한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1782919246962&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Gameplay Ability
Ability 클래스
Ability 레벨
런타임에 변경 가능한 동적 정보&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;서버에서 Ability 부여&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Ability는 일반적으로 서버에서 부여된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Ability가 부여되면 Gameplay Ability Spec이 Owning Client로 Replicate된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; 그 결과 Owning Client는 자신의 Gameplay Ability를 활성화할 수 있게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;6. Activation&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Gameplay Ability에는 Activation이라는 개념이 존재한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;활성 상태&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Ability는 한 번 Activate되면 다음 중 하나가 발생하기 전까지 활성 상태로 간주된다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1782919407946&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Ability가 종료되는 경우
Ability가 취소되는 경우&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;종료와 취소&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Ability는 스스로 종료할 수도 있고, 외부에서 취소될 수도 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7. 강의 요약&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;3577&quot; data-start=&quot;3558&quot; data-section-id=&quot;dyzp71&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Gameplay Ability&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;3577&quot; data-start=&quot;3558&quot; data-section-id=&quot;dyzp71&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Gameplay Ability는 액터가 수행할 수 있는 특정 스킬, 주문 또는 다양한 능력을 정의하는 클래스이다.&lt;/p&gt;
&lt;p data-end=&quot;3577&quot; data-start=&quot;3558&quot; data-section-id=&quot;dyzp71&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Ability를 사용하려면 Ability System Component에 먼저 부여해야 한다.&lt;/p&gt;
&lt;p data-end=&quot;3577&quot; data-start=&quot;3558&quot; data-section-id=&quot;dyzp71&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Ability는 일반적으로 서버에서 부여되며, Ability Spec이 생성되어 Owning Client로 Replicate된다.&lt;/p&gt;
&lt;p data-end=&quot;3577&quot; data-start=&quot;3558&quot; data-section-id=&quot;dyzp71&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Ability를 사용하려면 먼저 Activate해야 한다.&lt;/p&gt;
&lt;p data-end=&quot;3577&quot; data-start=&quot;3558&quot; data-section-id=&quot;dyzp71&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Activate된 Ability는 종료되거나 취소될 때까지 Active 상태를 유지한다.&lt;/p&gt;
&lt;p data-end=&quot;3577&quot; data-start=&quot;3558&quot; data-section-id=&quot;dyzp71&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Ability에는 Cost와 Cooldown 개념이 기본적으로 포함되어 있다.&lt;/p&gt;
&lt;p data-end=&quot;3577&quot; data-start=&quot;3558&quot; data-section-id=&quot;dyzp71&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Ability는 비동기적으로 실행될 수 있다.&lt;/p&gt;
&lt;p data-end=&quot;3577&quot; data-start=&quot;3558&quot; data-section-id=&quot;dyzp71&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; 여러 개의 Ability가 동시에 Active 상태일 수도 있다.&lt;/p&gt;
&lt;p data-end=&quot;3577&quot; data-start=&quot;3558&quot; data-section-id=&quot;dyzp71&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Ability는 Ability Task를 실행할 수 있다.&lt;/p&gt;
&lt;p data-end=&quot;3577&quot; data-start=&quot;3558&quot; data-section-id=&quot;dyzp71&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;4031&quot; data-start=&quot;4016&quot; data-section-id=&quot;h0ei6i&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Ability Task&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;4031&quot; data-start=&quot;4016&quot; data-section-id=&quot;h0ei6i&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; Ability Task는 비동기 작업을 수행하는 클래스이다.&lt;/p&gt;
&lt;p data-end=&quot;4031&quot; data-start=&quot;4016&quot; data-section-id=&quot;h0ei6i&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; 하나의 동작(Behavior)을 하나의 클래스로 캡슐화한다.&lt;/p&gt;
&lt;p data-end=&quot;4031&quot; data-start=&quot;4016&quot; data-section-id=&quot;h0ei6i&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;/span&gt; 각각의 Ability Task는 자신만의 특정 작업을 수행한다.&lt;/p&gt;</description>
      <category>Study/[Unreal] Udemy 강의</category>
      <author>Just Move</author>
      <guid isPermaLink="true">https://blob-thinking.tistory.com/1112</guid>
      <comments>https://blob-thinking.tistory.com/1112#entry1112comment</comments>
      <pubDate>Thu, 2 Jul 2026 00:27:10 +0900</pubDate>
    </item>
    <item>
      <title>Gameplay Ability System - Top Down RPG / Section 8-32</title>
      <link>https://blob-thinking.tistory.com/1111</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Responding&amp;nbsp;to&amp;nbsp;Attribute&amp;nbsp;Changes&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;속성(Attribute) 변경을 감지하기 위해 Callback 함수 또는 Lambda 함수를 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;AbilitySystemComponent에는 &lt;/span&gt;&lt;span&gt;GetGameplayAttributeValueChangeDelegate()&lt;/span&gt;&lt;span&gt;가 이미 구현되어 있으며, 특정 Attribute의 값이 변경되면 해당 Delegate가 자동으로 브로드캐스트된다.&lt;/span&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;span&gt;BindCallbacksToDependencies()&lt;/span&gt;&lt;span&gt; 함수에서 각 Attribute의 변경 Delegate에 Lambda를 바인딩하여 속성 변경 시 UI가 자동으로 갱신되도록 구현한다.&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;span&gt;AttributeSet&lt;/span&gt;&lt;span&gt;을 가져온 뒤, 특정 Attribute 하나만 처리하는 것이 아니라 모든 Attribute를 처리하기 위해 &lt;/span&gt;&lt;span&gt;TagToAttributes&lt;/span&gt;&lt;span&gt; Map을 &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;문으로 순회한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;반복문에서는 Map에 저장된 값을 통해 각 Attribute의 값 변경 Delegate에 Lambda를 등록한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이후 Lambda가 호출되면 GameplayTag를 통해 &lt;/span&gt;&lt;span&gt;FAuraAttributeInfo&lt;/span&gt;&lt;span&gt;를 가져오고, Attribute의 현재 값을 &lt;/span&gt;&lt;span&gt;GetNumericValue()&lt;/span&gt;&lt;span&gt;로 읽어 &lt;/span&gt;&lt;span&gt;AttributeValue&lt;/span&gt;&lt;span&gt;에 저장한 뒤, 완성된 &lt;/span&gt;&lt;span&gt;FAuraAttributeInfo&lt;/span&gt;&lt;span&gt;를 브로드캐스트하여 해당 GameplayTag를 가진 위젯이 최신 값으로 갱신하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1395&quot; data-origin-height=&quot;636&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkxORT/dJMcacXXKi6/RukCbWLJoMeqcV6ND9GWPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkxORT/dJMcacXXKi6/RukCbWLJoMeqcV6ND9GWPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkxORT/dJMcacXXKi6/RukCbWLJoMeqcV6ND9GWPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkxORT%2FdJMcacXXKi6%2FRukCbWLJoMeqcV6ND9GWPk%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;1395&quot; height=&quot;636&quot; data-origin-width=&quot;1395&quot; data-origin-height=&quot;636&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 실행하기에 앞서서, 보조 속성들도 전과 같이 동일한 작업을 해주었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1682&quot; data-origin-height=&quot;811&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c91wAq/dJMcabEJb8M/VHI35RczJfs9cYsxso7khk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c91wAq/dJMcabEJb8M/VHI35RczJfs9cYsxso7khk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c91wAq/dJMcabEJb8M/VHI35RczJfs9cYsxso7khk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc91wAq%2FdJMcabEJb8M%2FVHI35RczJfs9cYsxso7khk%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;1682&quot; height=&quot;811&quot; data-origin-width=&quot;1682&quot; data-origin-height=&quot;811&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 확인해보면 주속성과 보조속성 모두 이름과 값이 제대로 설정된 것을 볼 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1013&quot; data-origin-height=&quot;1174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dWowU1/dJMcagTCcTu/ezLK1NwJPYD31rWBybYksK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dWowU1/dJMcagTCcTu/ezLK1NwJPYD31rWBybYksK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dWowU1/dJMcagTCcTu/ezLK1NwJPYD31rWBybYksK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdWowU1%2FdJMcagTCcTu%2FezLK1NwJPYD31rWBybYksK%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;562&quot; height=&quot;651&quot; data-origin-width=&quot;1013&quot; data-origin-height=&quot;1174&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;테스트를 위해서 테스트용 박스에 기존 모디파이어를 지우고 단순히 Strength 수치만 15더하도록 설정하였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2558&quot; data-origin-height=&quot;1021&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4krjU/dJMcaaluHA4/5KM6KhDVjNmufXgde7TiX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4krjU/dJMcaaluHA4/5KM6KhDVjNmufXgde7TiX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4krjU/dJMcaaluHA4/5KM6KhDVjNmufXgde7TiX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4krjU%2FdJMcaaluHA4%2F5KM6KhDVjNmufXgde7TiX0%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;2558&quot; height=&quot;1021&quot; data-origin-width=&quot;2558&quot; data-origin-height=&quot;1021&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;이제 직접 확인해보면, 무사히 Strength에 +15가 된 값이 UI이 반영된 것을 볼 수 있다.&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/dR4VIX/dJMcai4SehF/qtDO8o2ud9axnxSpJF841k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dR4VIX/dJMcai4SehF/qtDO8o2ud9axnxSpJF841k/img.png&quot; data-origin-width=&quot;1884&quot; data-origin-height=&quot;1163&quot; data-is-animation=&quot;false&quot; style=&quot;width: 50.5991%; margin-right: 10px;&quot; data-widthpercent=&quot;51.19&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dR4VIX/dJMcai4SehF/qtDO8o2ud9axnxSpJF841k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdR4VIX%2FdJMcai4SehF%2FqtDO8o2ud9axnxSpJF841k%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;1884&quot; height=&quot;1163&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C0zuZ/dJMcaiw75Z8/KFKLcC9NNHwo44yIHx6zGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C0zuZ/dJMcaiw75Z8/KFKLcC9NNHwo44yIHx6zGK/img.png&quot; data-origin-width=&quot;1793&quot; data-origin-height=&quot;1161&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.2381%;&quot; data-widthpercent=&quot;48.81&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C0zuZ/dJMcaiw75Z8/KFKLcC9NNHwo44yIHx6zGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC0zuZ%2FdJMcaiw75Z8%2FKFKLcC9NNHwo44yIHx6zGK%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;1793&quot; height=&quot;1161&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 방식으로 구현은 성공했지만, 현재 AttributeValue 값을 브로드캐스트하는 내용의 세 줄의 코드가 두 군데에서 반복된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 이를 함수 하나로 묶어주고 마무리해주었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1560&quot; data-origin-height=&quot;308&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/P72eY/dJMcagF7NHv/TsaHn7chA2gRVmbdjkHoa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/P72eY/dJMcagF7NHv/TsaHn7chA2gRVmbdjkHoa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/P72eY/dJMcagF7NHv/TsaHn7chA2gRVmbdjkHoa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FP72eY%2FdJMcagF7NHv%2FTsaHn7chA2gRVmbdjkHoa1%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;1560&quot; height=&quot;308&quot; data-origin-width=&quot;1560&quot; data-origin-height=&quot;308&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BindCallbackToPependencies 함수의 경우, 기존에 AS를 캡쳐했으나 이제 필요없어졌으므로 삭제해주자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1443&quot; data-origin-height=&quot;995&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IHCNR/dJMcahdVNJ5/4IGIFHGHanfnzyAUJuykkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IHCNR/dJMcahdVNJ5/4IGIFHGHanfnzyAUJuykkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IHCNR/dJMcahdVNJ5/4IGIFHGHanfnzyAUJuykkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIHCNR%2FdJMcahdVNJ5%2F4IGIFHGHanfnzyAUJuykkK%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;1443&quot; height=&quot;995&quot; data-origin-width=&quot;1443&quot; data-origin-height=&quot;995&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Study/[Unreal] Udemy 강의</category>
      <author>Just Move</author>
      <guid isPermaLink="true">https://blob-thinking.tistory.com/1111</guid>
      <comments>https://blob-thinking.tistory.com/1111#entry1111comment</comments>
      <pubDate>Wed, 1 Jul 2026 01:31:30 +0900</pubDate>
    </item>
    <item>
      <title>Gameplay Ability System - Top Down RPG / Section 8-31</title>
      <link>https://blob-thinking.tistory.com/1110</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Mapping&amp;nbsp;Tags&amp;nbsp;to&amp;nbsp;Attributes&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재는 Strength 속성만 처리 중이며, 기존 방식을 따르면 속성마다 동일한 작업을 반복해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 위젯 컨트롤러에서는 속성이 몇 개인지, 이름이 무엇인지 신경 쓰지 않고 모든 숙성을 자동으로 순회하며 브로드캐스트하는 구조를 만들 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 위해서 Map 자료 구조를 활용할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키는 GameplayTag로, 값은 GameplayAttribute가 되도록 매핑한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Attribute Set에는 각 속성에 접근할 수 있는 Attribute Accessor가 존재하고, 이 함수들이 GameplayAttribute를 반환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이러면 함수 자체를 연결해서 저장해야하는 상황이지만, 함수는 일반 값처럼 저장할 수 없기 때문에 Delegate를 활용해줄 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 값이 필요하므로, 반환값이 있는 Delegate를 활용한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1263&quot; data-origin-height=&quot;817&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dfsNwe/dJMcagTAuks/m9eOlzWv7gboHjSi4uuNM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dfsNwe/dJMcagTAuks/m9eOlzWv7gboHjSi4uuNM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dfsNwe/dJMcagTAuks/m9eOlzWv7gboHjSi4uuNM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdfsNwe%2FdJMcagTAuks%2Fm9eOlzWv7gboHjSi4uuNM0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;609&quot; height=&quot;394&quot; data-origin-width=&quot;1263&quot; data-origin-height=&quot;817&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;그리고 Delegate 타입을 참고하여, Map 또한 이어서 작성해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1670&quot; data-origin-height=&quot;598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brYcgz/dJMcahkHN4d/TXX9yntFjN4iHkyebozl0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brYcgz/dJMcahkHN4d/TXX9yntFjN4iHkyebozl0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brYcgz/dJMcahkHN4d/TXX9yntFjN4iHkyebozl0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrYcgz%2FdJMcahkHN4d%2FTXX9yntFjN4iHkyebozl0K%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;1670&quot; height=&quot;598&quot; data-origin-width=&quot;1670&quot; data-origin-height=&quot;598&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;이제 생성자에서 Map에 값을 넣어주자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 테스트로 Strength와 Intelligence만 할당하였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1321&quot; data-origin-height=&quot;507&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B89OD/dJMcafNXPYd/7nUc9pLcQE7b42vFkHBDTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B89OD/dJMcafNXPYd/7nUc9pLcQE7b42vFkHBDTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B89OD/dJMcafNXPYd/7nUc9pLcQE7b42vFkHBDTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB89OD%2FdJMcafNXPYd%2F7nUc9pLcQE7b42vFkHBDTk%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;675&quot; height=&quot;259&quot; data-origin-width=&quot;1321&quot; data-origin-height=&quot;507&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;이제 위젯컨트롤러로 가서 해당 Map을 순회할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 Key는 GameplayTag고, Value는 Delegate를 통해 호출된 값이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Delegat에는 FGameplayAttribute 핸들이 있는 것이기 때문에, GetNumericValue 함수를 통해 실제 Float 값을 꺼내준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;566&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mcMu6/dJMcabSdJPC/CKfgMTGoqXIOSnnFN2S5Lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mcMu6/dJMcabSdJPC/CKfgMTGoqXIOSnnFN2S5Lk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mcMu6/dJMcabSdJPC/CKfgMTGoqXIOSnnFN2S5Lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmcMu6%2FdJMcabSdJPC%2FCKfgMTGoqXIOSnnFN2S5Lk%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;708&quot; height=&quot;332&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;566&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;이 상태로 컴파일을 해보면 정상적으로 Strength와 Intelligence 값이 할당된 것을 볼 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;1151&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvUJDM/dJMcadJdLrQ/1oIXLKGichfWYeCwUfnJ40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvUJDM/dJMcadJdLrQ/1oIXLKGichfWYeCwUfnJ40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvUJDM/dJMcadJdLrQ/1oIXLKGichfWYeCwUfnJ40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvUJDM%2FdJMcadJdLrQ%2F1oIXLKGichfWYeCwUfnJ40%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;595&quot; height=&quot;704&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;1151&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 따지고 보면 현재도 위치가 다를 뿐, 코드가 여전히 비효율적이고 반복되는 과정을 작성해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 Delegate를 없애고, 정적 함수 자체를 Map에 바로 넣을 수 있는지 확인해볼 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 쓰는 것은 Attribute Accessor 함수이며, 이 함수들은 입력값이 없고 FGameplayAttribute를 반환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 함수 시그니처는 FGameplayAttribute()로 동일하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 이 시그니처를 가진 함수들을 저장하는 함수 포인터 타입을 하나 정의하면, 모든 Accessor 함수를 동일한 타입으로 관리하고 Map에 저장할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;259&quot; data-start=&quot;205&quot; data-ke-size=&quot;size16&quot;&gt;그리고 추가로 BindStatic() 함수의 내부를 보면 매우 복잡한 템플릿 타입이 등장한다.&lt;/p&gt;
&lt;p data-end=&quot;343&quot; data-start=&quot;261&quot; data-ke-size=&quot;size16&quot;&gt;이 타입은 정적 함수를 Delegate에 바인딩하기 위한 내부 구조이며, 내부적으로 정적 함수의 주소를 저장하기 위해 함수 포인터 타입을 사용한다.&lt;/p&gt;
&lt;p data-end=&quot;397&quot; data-start=&quot;345&quot; data-ke-size=&quot;size16&quot;&gt;해당 템플릿 전체를 완전히 이해할 필요는 없지만, 중요한 것은 내부에서 무엇을 사용하는지이다.&lt;/p&gt;
&lt;p data-end=&quot;470&quot; data-start=&quot;399&quot; data-ke-size=&quot;size16&quot;&gt;우리가 필요한 것은 결국 GetStrengthAttribute() 같은 정적 함수의 주소를 저장할 수 있는 함수 포인터이다.&lt;/p&gt;
&lt;p data-end=&quot;580&quot; data-start=&quot;472&quot; data-ke-size=&quot;size16&quot;&gt;TBaseStaticDelegateInstance 내부에는 이 함수 포인터 타입을 나타내는 FFuncPtr가 정의되어 있으므로, 해당 타입을 Map의 Value 타입으로 활용할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1908&quot; data-origin-height=&quot;564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4GLwI/dJMcadP0M2f/mtsTCWcmtw4wy60ga2t26k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4GLwI/dJMcadP0M2f/mtsTCWcmtw4wy60ga2t26k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4GLwI/dJMcadP0M2f/mtsTCWcmtw4wy60ga2t26k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4GLwI%2FdJMcadP0M2f%2FmtsTCWcmtw4wy60ga2t26k%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;1908&quot; height=&quot;564&quot; data-origin-width=&quot;1908&quot; data-origin-height=&quot;564&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;그럼 이제 생성자 코드에서 Attribute Accessor 함수를 통해 간단하게 코드를 개선할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1409&quot; data-origin-height=&quot;353&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkHz0k/dJMb991fw3e/eUW4jxlAm3aoOLqYREJWQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkHz0k/dJMb991fw3e/eUW4jxlAm3aoOLqYREJWQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkHz0k/dJMb991fw3e/eUW4jxlAm3aoOLqYREJWQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkHz0k%2FdJMb991fw3e%2FeUW4jxlAm3aoOLqYREJWQK%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;692&quot; height=&quot;173&quot; data-origin-width=&quot;1409&quot; data-origin-height=&quot;353&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위젯에서도 코드를 수정해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에는 Pair.Value가 Delegate였기 때문에 실행을 위해서 Execute() 함수를 사용했지만, 이제는 바로 Pair.Value()을 사용한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1219&quot; data-origin-height=&quot;545&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cs9OYP/dJMcabY4NPl/WXKD4KrGHesY7UCgWvWBbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cs9OYP/dJMcabY4NPl/WXKD4KrGHesY7UCgWvWBbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cs9OYP/dJMcabY4NPl/WXKD4KrGHesY7UCgWvWBbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcs9OYP%2FdJMcabY4NPl%2FWXKD4KrGHesY7UCgWvWBbK%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;692&quot; height=&quot;309&quot; data-origin-width=&quot;1219&quot; data-origin-height=&quot;545&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;추가적으로 auto에서 Value 값을 보면 FGameplayAttribute(*)()라고 뜨는 것을 볼 수 있다.&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/5MUP3/dJMcajo7JLn/tRjAKFttuuO7ef6Ch1ZVUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5MUP3/dJMcajo7JLn/tRjAKFttuuO7ef6Ch1ZVUk/img.png&quot; data-origin-width=&quot;1215&quot; data-origin-height=&quot;603&quot; data-is-animation=&quot;false&quot; width=&quot;763&quot; height=&quot;379&quot; style=&quot;width: 29.6512%; margin-right: 10px;&quot; data-widthpercent=&quot;30&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5MUP3/dJMcajo7JLn/tRjAKFttuuO7ef6Ch1ZVUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5MUP3%2FdJMcajo7JLn%2FtRjAKFttuuO7ef6Ch1ZVUk%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;1215&quot; height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LO2y7/dJMcafUHmNc/VAsHNX2P01LaeD2VHNHdv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LO2y7/dJMcafUHmNc/VAsHNX2P01LaeD2VHNHdv0/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1575&quot; data-origin-height=&quot;335&quot; data-filename=&quot;10.png&quot; style=&quot;width: 69.186%;&quot; data-widthpercent=&quot;70&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LO2y7/dJMcafUHmNc/VAsHNX2P01LaeD2VHNHdv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLO2y7%2FdJMcafUHmNc%2FVAsHNX2P01LaeD2VHNHdv0%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;1575&quot; height=&quot;335&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 사용하는 것이 typedef를 활용한 별칭 만들기이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 typdef로는 오직 하나의 함수 시그니처만 표현할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1782677553953&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;typedef FGameplayAttribute(*FAttributeFuncPtr)();
반환값 FGameplayAttribute, 입력 값 없음인 함수만 가능&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 어떤 함수 시그니처든 받을 수 있도록 using과 template를 활용한 형태를 만들어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;T에 원하는 함수 시그니처를 넣으면, 그 함수 포인터 타입으로 사용이 가능하여 확장성이 뛰어나다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 Map의 Value로 쓸 FGameplayAttribute()를 사용할 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1667&quot; data-origin-height=&quot;702&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b134ZO/dJMcagMRL8T/4UCOH0DiLCr2MJGWRhM6Vk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b134ZO/dJMcagMRL8T/4UCOH0DiLCr2MJGWRhM6Vk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b134ZO/dJMcagMRL8T/4UCOH0DiLCr2MJGWRhM6Vk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb134ZO%2FdJMcagMRL8T%2F4UCOH0DiLCr2MJGWRhM6Vk%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;1667&quot; height=&quot;702&quot; data-origin-width=&quot;1667&quot; data-origin-height=&quot;702&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 속성 추가가 기존에 비해 매우 간단해졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나머지 주요 속성들도 마저 작성해주자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1389&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7Fqhm/dJMcad3yuZA/KisENXpZZyzvJxTGJYBdM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7Fqhm/dJMcad3yuZA/KisENXpZZyzvJxTGJYBdM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7Fqhm/dJMcad3yuZA/KisENXpZZyzvJxTGJYBdM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7Fqhm%2FdJMcad3yuZA%2FKisENXpZZyzvJxTGJYBdM0%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;741&quot; height=&quot;211&quot; data-origin-width=&quot;1389&quot; data-origin-height=&quot;395&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 초기값을 브로드캐스트하는 것은 모두 구현한 상태이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 속성 값이 변경되었을 때 UI를 자동 갱신하는 것에 대해서는 아직 불가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 다음 강의를 통해 Attribute 값 변경을 감지하고, 변경된 속성만 브로드캐스트하여 UI를 실시간 업데이트하는 방법을 다룬다.&lt;/p&gt;</description>
      <category>Study/[Unreal] Udemy 강의</category>
      <author>Just Move</author>
      <guid isPermaLink="true">https://blob-thinking.tistory.com/1110</guid>
      <comments>https://blob-thinking.tistory.com/1110#entry1110comment</comments>
      <pubDate>Mon, 29 Jun 2026 05:17:43 +0900</pubDate>
    </item>
    <item>
      <title>The Relic First Guardian - Release Date Announcement Trailer</title>
      <link>https://blob-thinking.tistory.com/1109</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;트레일러 영상 링크 : &lt;a href=&quot;https://www.youtube.com/watch?v=wi6pFZK33l8&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=wi6pFZK33l8&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=wi6pFZK33l8&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/cvWhAD/dJMb9eforCr/Kz3ZnYDrdk5exV0bNepcFK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/lDXxm/dJMb9b32qJa/VLh0ugRrCnKuhKYzrcftF0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/qjPda/dJMb9eforCq/wjoSCtu6QZfHq2MIsGD5Y1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;The Relic First Guardian release date announcement trailer&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/wi6pFZK33l8&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;background-color: #ffffff; color: #333333; text-align: start; border-collapse: collapse; width: 100%; height: 132px;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 99.8837%; height: 17px;&quot; colspan=&quot;2&quot;&gt;&lt;b&gt;The&amp;nbsp;Relic&amp;nbsp;First&amp;nbsp;Guardian&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2558%; height: 21px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;발매 예정일&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.6279%; height: 21px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2026년 7월 31일&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2558%; height: 21px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;장르&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.6279%; height: 21px;&quot;&gt;오픈월드 액션 RPG&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2558%; height: 21px;&quot;&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;&lt;b&gt;개발사&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.6279%; height: 21px;&quot;&gt;Project Cloud Games&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2558%; height: 21px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;출시 플랫폼&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.6279%; height: 21px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PC, PS5&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2558%; height: 21px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #953b34; text-align: start;&quot;&gt;참고 사이트&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.6279%; height: 21px;&quot;&gt;&lt;a href=&quot;https://store.steampowered.com/app/2827820/The_Relic_First_Guardian/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://store.steampowered.com/app/2827820/The_Relic_First_Guardian/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 99.8837%; height: 10px;&quot; colspan=&quot;2&quot;&gt;&lt;span&gt;아쿠아맨, 캡틴 마블 등 헐리우드 영화 및 콜 오브 듀티 시네마틱 등 CG/VFX 경험이 뛰어난 박인혁 CEO의 신생 개발사 신작이다. &lt;br /&gt;영상에서만 느낄 수 있는 현장감을 게임으로 전달하고 싶어 직접 게임 개발사를 만든 것으로 알고 있다.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;공개된 영상을 보면 다크 소울의 느낌이 많이 나며, 패링과 같은 요소로 인해 소울라이크라고 생각하기 쉽다. &lt;br /&gt;하지만 화려한 이펙트 효과와 스타일리시한 액션을 강조한 액션 RPG을 지향하는 게임이다.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;게임 제목처럼 Relic이 핵심 소재이며, 사람들의 기억을 모아 나가는 스토리와 한국 설화를 다크 판타지로 재해석한 세계관이 특징이다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;근래에 다크 판타지와 소울라이크 풍의 게임이 많이 나오고 있다고 느낀 만큼, 처음에는 또 비슷한 장르라는 생각에 아쉬움이 있었다.&lt;br /&gt;하지만 해당 게임에 대해 알아보면서 Relic이라는 소재를 통한 전체적인 스토리텔링 방식이 상당히 인상 깊었다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;단순히 NPC의 이야기만 다루는 것이 아니라, 맵 곳곳의 다양한 환경 오브젝트와 70여 종의 보스까지 각자의 이야기를 담아 전달한다는 점에서 큰 매력을 느꼈다.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;다만 이처럼 다양한 요소에 각자의 이야기가 담긴 만큼, 플레이어가 모든 이야기를 접하기에는 다소 버겁게 느껴질 수도 있다고 생각한다. &lt;br /&gt;이러한 이야기들이 플레이 과정에서 얼마나 자연스럽게 전달될 지 구체적인 체험 방식이 기대되는 게임이다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/etq3tb/dJMcafHaEmp/kQEeUAqvUFEMRkACHEBfB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/etq3tb/dJMcafHaEmp/kQEeUAqvUFEMRkACHEBfB1/img.png&quot; data-alt=&quot;게임 배경&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/etq3tb/dJMcafHaEmp/kQEeUAqvUFEMRkACHEBfB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fetq3tb%2FdJMcafHaEmp%2FkQEeUAqvUFEMRkACHEBfB1%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;3840&quot; height=&quot;2160&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;게임 배경&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oKNFR/dJMcadvGePd/24NxbbvOoIHZGkPbFEudL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oKNFR/dJMcadvGePd/24NxbbvOoIHZGkPbFEudL1/img.png&quot; data-alt=&quot;패링&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oKNFR/dJMcadvGePd/24NxbbvOoIHZGkPbFEudL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoKNFR%2FdJMcadvGePd%2F24NxbbvOoIHZGkPbFEudL1%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;3840&quot; height=&quot;2160&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;패링&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3U2fx/dJMcabEHvxr/ELwvEKsAasRLJCqmXaMSSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3U2fx/dJMcabEHvxr/ELwvEKsAasRLJCqmXaMSSk/img.png&quot; data-alt=&quot;화려한 이펙트 1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3U2fx/dJMcabEHvxr/ELwvEKsAasRLJCqmXaMSSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd3U2fx%2FdJMcabEHvxr%2FELwvEKsAasRLJCqmXaMSSk%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;3840&quot; height=&quot;2160&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;화려한 이펙트 1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/unq2L/dJMcahkHIet/ZQHvLkkRoJtkr5QEGQMKsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/unq2L/dJMcahkHIet/ZQHvLkkRoJtkr5QEGQMKsk/img.png&quot; data-alt=&quot;화려한 이펙트 2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/unq2L/dJMcahkHIet/ZQHvLkkRoJtkr5QEGQMKsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Funq2L%2FdJMcahkHIet%2FZQHvLkkRoJtkr5QEGQMKsk%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;3840&quot; height=&quot;2160&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;화려한 이펙트 2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>게임/신작 &amp;amp; 기대작</category>
      <author>Just Move</author>
      <guid isPermaLink="true">https://blob-thinking.tistory.com/1109</guid>
      <comments>https://blob-thinking.tistory.com/1109#entry1109comment</comments>
      <pubDate>Sun, 28 Jun 2026 22:18:43 +0900</pubDate>
    </item>
    <item>
      <title>Gameplay Ability System - Top Down RPG / Section 8-30</title>
      <link>https://blob-thinking.tistory.com/1108</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Widget&amp;nbsp;Attribute&amp;nbsp;Tags&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;속성은 여러가지가 있지만, 지금은 Strength에 대해서만 설정하여 이에 대한 텍스트와 값을 설정하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 이제 속성 정보가 들어왔을 때, 이 값이 어떤 속성인지 확인할 것이며, 이때 사용할 것이 Gaemplay Tag이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 위해 버튼이 없는 기본 Text Value Row에서 Gameplay Tag 타입의 변수를 선언하고, 해당 변수를 공개 상태로 만들어 인스턴스에서 편집이 가능하도록 해주자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2033&quot; data-origin-height=&quot;1277&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mgRdm/dJMcahdTCN0/LxqGOVXxaPb2hhQ7bBhXdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mgRdm/dJMcahdTCN0/LxqGOVXxaPb2hhQ7bBhXdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mgRdm/dJMcahdTCN0/LxqGOVXxaPb2hhQ7bBhXdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmgRdm%2FdJMcahdTCN0%2FLxqGOVXxaPb2hhQ7bBhXdK%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;2033&quot; height=&quot;1277&quot; data-origin-width=&quot;2033&quot; data-origin-height=&quot;1277&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;Attribute Menu에서 각 Row들의 이름을 알기 쉽도록 속성 명을 활용하여 바꿔줄 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이 모든 값들을 Variable로 설정해주자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2377&quot; data-origin-height=&quot;1590&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UrO6X/dJMcahdTCN3/xUsSoF8UdIDazyCemp5vu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UrO6X/dJMcahdTCN3/xUsSoF8UdIDazyCemp5vu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UrO6X/dJMcahdTCN3/xUsSoF8UdIDazyCemp5vu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUrO6X%2FdJMcahdTCN3%2FxUsSoF8UdIDazyCemp5vu1%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;2377&quot; height=&quot;1590&quot; data-origin-width=&quot;2377&quot; data-origin-height=&quot;1590&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;2239&quot; data-origin-height=&quot;1273&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsHHmb/dJMcaiDQ5OJ/8uWk3ooafaQmrnkv0UoMC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsHHmb/dJMcaiDQ5OJ/8uWk3ooafaQmrnkv0UoMC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsHHmb/dJMcaiDQ5OJ/8uWk3ooafaQmrnkv0UoMC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsHHmb%2FdJMcaiDQ5OJ%2F8uWk3ooafaQmrnkv0UoMC1%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;2239&quot; height=&quot;1273&quot; data-origin-width=&quot;2239&quot; data-origin-height=&quot;1273&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;그리고 EventGraph로 넘어와서 AttributeTags를 세팅하기 위한 함수를 설정해줄 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가로 Sequence로 각 내용을 구분하여 정리해주었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2552&quot; data-origin-height=&quot;1293&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bi8vJC/dJMcaalsMds/euxIWAW4NTC8Dfx99dXzK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bi8vJC/dJMcaalsMds/euxIWAW4NTC8Dfx99dXzK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bi8vJC/dJMcaalsMds/euxIWAW4NTC8Dfx99dXzK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbi8vJC%2FdJMcaalsMds%2FeuxIWAW4NTC8Dfx99dXzK0%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;2552&quot; height=&quot;1293&quot; data-origin-width=&quot;2552&quot; data-origin-height=&quot;1293&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;해당 함수에서도 마찬가지로 Sequence를 활용하여 보기 좋게 Primary 및 Secondary Attribute 값들을 세팅해주었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1577&quot; data-origin-height=&quot;1047&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1TCZq/dJMcabxVawo/kofrFTxrH5okK9mPOD5Nz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1TCZq/dJMcabxVawo/kofrFTxrH5okK9mPOD5Nz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1TCZq/dJMcabxVawo/kofrFTxrH5okK9mPOD5Nz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1TCZq%2FdJMcabxVawo%2FkofrFTxrH5okK9mPOD5Nz0%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;1577&quot; height=&quot;1047&quot; data-origin-width=&quot;1577&quot; data-origin-height=&quot;1047&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;1836&quot; data-origin-height=&quot;1190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lmlCV/dJMcadigWJA/A8GW7FxnpL0fWUkZMbO3wk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lmlCV/dJMcadigWJA/A8GW7FxnpL0fWUkZMbO3wk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lmlCV/dJMcadigWJA/A8GW7FxnpL0fWUkZMbO3wk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlmlCV%2FdJMcadigWJA%2FA8GW7FxnpL0fWUkZMbO3wk%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;1836&quot; height=&quot;1190&quot; data-origin-width=&quot;1836&quot; data-origin-height=&quot;1190&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;그리고 기존의 T&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;extValueButtonRow로 돌아와서 Matches Tag 함수를 통해 Tag를 비교하여 정확히 맞을 때만 텍스트와 값을 활성화시키도록 수정하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;936&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HHNwp/dJMcaiw5Vyp/R9JIaSYxVAJaaDawwQjr5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HHNwp/dJMcaiw5Vyp/R9JIaSYxVAJaaDawwQjr5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HHNwp/dJMcaiw5Vyp/R9JIaSYxVAJaaDawwQjr5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHHNwp%2FdJMcaiw5Vyp%2FR9JIaSYxVAJaaDawwQjr5k%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;3024&quot; height=&quot;936&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;936&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;따라서 첫 Row만 Strength 이름과 값이 수정된 모습을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1043&quot; data-origin-height=&quot;1133&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bePmp7/dJMcaay4UJe/0i7fs7wqLMh49ZK885hqq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bePmp7/dJMcaay4UJe/0i7fs7wqLMh49ZK885hqq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bePmp7/dJMcaay4UJe/0i7fs7wqLMh49ZK885hqq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbePmp7%2FdJMcaay4UJe%2F0i7fs7wqLMh49ZK885hqq0%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;546&quot; height=&quot;593&quot; data-origin-width=&quot;1043&quot; data-origin-height=&quot;1133&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;우리는 버튼이 없는 TextValueRow의 값도 모두 설정해주어야 하기 떄문에, 여기에도 마찬가지로 같은 로직을 구현해주자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2947&quot; data-origin-height=&quot;1053&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbaLJL/dJMcabdAg8X/HIX9EskqGreXNvo5vpcGTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbaLJL/dJMcabdAg8X/HIX9EskqGreXNvo5vpcGTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbaLJL/dJMcabdAg8X/HIX9EskqGreXNvo5vpcGTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbaLJL%2FdJMcabdAg8X%2FHIX9EskqGreXNvo5vpcGTK%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;2947&quot; height=&quot;1053&quot; data-origin-width=&quot;2947&quot; data-origin-height=&quot;1053&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 Strength에 대해서만 브로드캐스트하고 있기 때문에, 해당 값만 UI에 표시되고 나머지는 표시되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 모든 속성에 대해 직접 Strength 때와 똑같이 코드를 작성할 수도 있지만, 이러한 방법은 비효율적이며 유지보수성이 낮다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 For Loop와 같은 반복 처리를 통해 모든 속성을 자동으로 순회하고 이어서 브로드캐스트를 하는 구조를 고민해볼 것이다.&lt;/p&gt;</description>
      <category>Study/[Unreal] Udemy 강의</category>
      <author>Just Move</author>
      <guid isPermaLink="true">https://blob-thinking.tistory.com/1108</guid>
      <comments>https://blob-thinking.tistory.com/1108#entry1108comment</comments>
      <pubDate>Sun, 28 Jun 2026 05:57:49 +0900</pubDate>
    </item>
    <item>
      <title>Gameplay Ability System - Top Down RPG / Section 8-29</title>
      <link>https://blob-thinking.tistory.com/1107</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Attribute&amp;nbsp;Info&amp;nbsp;Delegate&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Attribute Menu Widget Controller를 할당했기에, 이제 Attribute Menu Widget에 표시해야하는 데이터를 전달해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 위해서는 콜백에 위젯을 바인딩하고, 초기 값을 브로드캐스트하는 작업이 필요하다.&lt;/p&gt;
&lt;pre id=&quot;code_1782504604624&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;위젯 컨트롤러 -&amp;gt; 데이터 브로드캐스트 -&amp;gt; 위젯 수신 -&amp;gt; UI 갱신&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;broadcast할 데이터는 이미 만들어준 Aura Attribute Info(Data Asset)을 활용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 데이터는 하나의 속성에 대해 다음과 같은 정보를 담고 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1782504645639&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Gameplay Tag
이름(Name)
설명(Description)
값(Attribute Value)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 앞으로 위젯 컨트롤러는 이 구조체를 브로드캐스트하고, 속성 메뉴 위젯에서 이 구조체를 받아 자신의 UI를 업데이트한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;속성 값을 얻으려면 먼저 Attribute Set이 필요하며, 이미 위젯 컨트롤러에 AttributeSet 멤버가 존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 타입은 UAuraAttributeSet이 아니므로 캐스팅해서 사용해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선은 가장 간단하게 Strength 하나만 가져와서 테스트 해볼 예정이지만, 이 값을 위젯에게 전달하려면 Delegate가 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잠재적으로 여러 위젯이 바인딩할 수 있기를 원하므로 동적 멀티캐스트 델리게이트로 선언할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이어서 델리게이트 멤버 변수을 Bluprint에서 바인딩 가능하도록 설정해주고, 이어서 브로드캐스트할 속성 정보를 조회하기 위해 UAttributeInfo 데이터 에셋 포인터를 멤버 변수로 선언해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1785&quot; data-origin-height=&quot;1261&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpu6qN/dJMcafmRp2D/tGSMIlGcUm8bEfDWOGi3XK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpu6qN/dJMcafmRp2D/tGSMIlGcUm8bEfDWOGi3XK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpu6qN/dJMcafmRp2D/tGSMIlGcUm8bEfDWOGi3XK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbpu6qN%2FdJMcafmRp2D%2FtGSMIlGcUm8bEfDWOGi3XK%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;1785&quot; height=&quot;1261&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1785&quot; data-origin-height=&quot;1261&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;이제 해당 구조체 내용을 통해 Strength에 대한 Tag를 조회하고, Data Asset에 Attribute Value 값은 저장되어 있지 않기 때문에 실제 Attribute Set에서 가져와야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후에 준비된 최종 Info를 델리게이트로 브로드캐스트 해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;2063&quot; data-origin-height=&quot;1108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwUKyz/dJMcafNW2h3/xnAFEhtmLgROShYZaqBOy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwUKyz/dJMcafNW2h3/xnAFEhtmLgROShYZaqBOy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwUKyz/dJMcafNW2h3/xnAFEhtmLgROShYZaqBOy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwUKyz%2FdJMcafNW2h3%2FxnAFEhtmLgROShYZaqBOy1%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;2063&quot; height=&quot;1108&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;2063&quot; data-origin-height=&quot;1108&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;가장 먼저 AttributeMenuWidgetController에서 Data Asset을 연결해주자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2656&quot; data-origin-height=&quot;671&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dYVp0u/dJMcaiw5vDd/uiROw24WtPwws4vnSkk4U0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dYVp0u/dJMcaiw5vDd/uiROw24WtPwws4vnSkk4U0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dYVp0u/dJMcaiw5vDd/uiROw24WtPwws4vnSkk4U0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdYVp0u%2FdJMcaiw5vDd%2FuiROw24WtPwws4vnSkk4U0%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;2656&quot; height=&quot;671&quot; data-origin-width=&quot;2656&quot; data-origin-height=&quot;671&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;이제 위젯이 델리게이트를 받아야하는데, 속성 메뉴에는 여러 개의 Row가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 Strength Row에는 Strength만, Intelligence Row에는 Intelligence만 표시되어야 하지만, 지금은 아직 구현하지 않고 우선 델리게이트가 제대로 전달되는지만 체크한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 TextValueButtonRow 블루프린트를 열고, Widget Controller를 가져와 델리게이트 이벤트를 연결해주자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 우리가 원하는 Info(AttributeInfo 구조체)에 접근할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1494&quot; data-origin-height=&quot;1092&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8d1Vp/dJMcaf7741B/fE0HFT4F4VEczvIMX31H0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8d1Vp/dJMcaf7741B/fE0HFT4F4VEczvIMX31H0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8d1Vp/dJMcaf7741B/fE0HFT4F4VEczvIMX31H0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8d1Vp%2FdJMcaf7741B%2FfE0HFT4F4VEczvIMX31H0K%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;1494&quot; height=&quot;1092&quot; data-origin-width=&quot;1494&quot; data-origin-height=&quot;1092&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;우리는 여기서 Text를 변경할 것이기 떄문에, 내용 변경을 위한 함수가 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 우선 텍스트 블록을 변수로 만들어주자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3642&quot; data-origin-height=&quot;1495&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkmFDX/dJMcafty8lY/ufX1AMVpKNkwu35EhszYT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkmFDX/dJMcafty8lY/ufX1AMVpKNkwu35EhszYT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkmFDX/dJMcafty8lY/ufX1AMVpKNkwu35EhszYT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkmFDX%2FdJMcafty8lY%2FufX1AMVpKNkwu35EhszYT1%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;3642&quot; height=&quot;1495&quot; data-origin-width=&quot;3642&quot; data-origin-height=&quot;1495&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 함수에서 해당 텍스트 블록에 텍스트를 할당하기 위한 내용을 구현해주자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2084&quot; data-origin-height=&quot;1664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F3MTe/dJMcab5MTjC/Zpp7tKJodYnK0fGpKgumn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F3MTe/dJMcab5MTjC/Zpp7tKJodYnK0fGpKgumn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F3MTe/dJMcab5MTjC/Zpp7tKJodYnK0fGpKgumn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF3MTe%2FdJMcab5MTjC%2FZpp7tKJodYnK0fGpKgumn1%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;2084&quot; height=&quot;1664&quot; data-origin-width=&quot;2084&quot; data-origin-height=&quot;1664&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;이제 Info에서 Attribute Name을 텍스트로 할당해주자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1868&quot; data-origin-height=&quot;847&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgNR8P/dJMcabks4y9/2hhXfmTFLTv9zlkpaCqGi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgNR8P/dJMcabks4y9/2hhXfmTFLTv9zlkpaCqGi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgNR8P/dJMcabks4y9/2hhXfmTFLTv9zlkpaCqGi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgNR8P%2FdJMcabks4y9%2F2hhXfmTFLTv9zlkpaCqGi1%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;1868&quot; height=&quot;847&quot; data-origin-width=&quot;1868&quot; data-origin-height=&quot;847&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;이 상태에서 실행해도 아무것도 보이지 않는데, 아직 BoradcastInitialValue 함수를 호출하지 않았기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 지금은 델리게이트만 존재할 뿐, 브로드캐스트를 하지 않은 상태이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 위해 BoradcastInitialValue를 블루프린트에서 호출해야하지만, 기존 베이스 위젯 컨트롤러에서 설정을 추가로 해주어야한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1541&quot; data-origin-height=&quot;902&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JKZwt/dJMcagTzIjt/BttjCXCaI8TyJRNRNkgbQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JKZwt/dJMcagTzIjt/BttjCXCaI8TyJRNRNkgbQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JKZwt/dJMcagTzIjt/BttjCXCaI8TyJRNRNkgbQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJKZwt%2FdJMcagTzIjt%2FBttjCXCaI8TyJRNRNkgbQk%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;1541&quot; height=&quot;902&quot; data-origin-width=&quot;1541&quot; data-origin-height=&quot;902&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;이제 AttributeMenu에서 브로드캐스트를 설정해주자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2799&quot; data-origin-height=&quot;970&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X8I37/dJMcafUGzd8/n4EV23wAA6jL00ZQmGFWmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X8I37/dJMcafUGzd8/n4EV23wAA6jL00ZQmGFWmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X8I37/dJMcafUGzd8/n4EV23wAA6jL00ZQmGFWmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX8I37%2FdJMcafUGzd8%2Fn4EV23wAA6jL00ZQmGFWmK%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;2799&quot; height=&quot;970&quot; data-origin-width=&quot;2799&quot; data-origin-height=&quot;970&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;이 상태로 컴파일하면, 텍스트가 모두 Strength로 바뀐 것을 볼 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1020&quot; data-origin-height=&quot;1178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mByms/dJMcafty8up/o43dKHwQJs95QASVNhWATK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mByms/dJMcafty8up/o43dKHwQJs95QASVNhWATK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mByms/dJMcafty8up/o43dKHwQJs95QASVNhWATK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmByms%2FdJMcafty8up%2Fo43dKHwQJs95QASVNhWATK%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;449&quot; height=&quot;519&quot; data-origin-width=&quot;1020&quot; data-origin-height=&quot;1178&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적으로 AttributeValue 값도 확인해줄 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 우선 화면에 출력되도록 해주자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2315&quot; data-origin-height=&quot;981&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2DBs9/dJMcacp76Ad/pSSjamtFd8BgmVpjkkyXm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2DBs9/dJMcacp76Ad/pSSjamtFd8BgmVpjkkyXm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2DBs9/dJMcacp76Ad/pSSjamtFd8BgmVpjkkyXm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2DBs9%2FdJMcacp76Ad%2FpSSjamtFd8BgmVpjkkyXm0%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;2315&quot; height=&quot;981&quot; data-origin-width=&quot;2315&quot; data-origin-height=&quot;981&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;그러면 현재 Info에 저장된 값이 정상적으로 출력되는 모습을 볼 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;995&quot; data-origin-height=&quot;1180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H5oE4/dJMcabrb6Iw/kk0xePcqY6D3rwdViZxtT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H5oE4/dJMcabrb6Iw/kk0xePcqY6D3rwdViZxtT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H5oE4/dJMcabrb6Iw/kk0xePcqY6D3rwdViZxtT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH5oE4%2FdJMcabrb6Iw%2Fkk0xePcqY6D3rwdViZxtT1%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;461&quot; height=&quot;547&quot; data-origin-width=&quot;995&quot; data-origin-height=&quot;1180&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 해당 값도 똑같이 설정해주자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 위해 마찬가지로 WBP_FrameValue도 변수로 만들고, 여기서 숫자에 접근할 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3651&quot; data-origin-height=&quot;1532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckTyXO/dJMcaa6VuOs/JNE5wA82BXkpieCuK8k29k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckTyXO/dJMcaa6VuOs/JNE5wA82BXkpieCuK8k29k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckTyXO/dJMcaa6VuOs/JNE5wA82BXkpieCuK8k29k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckTyXO%2FdJMcaa6VuOs%2FJNE5wA82BXkpieCuK8k29k%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;3651&quot; height=&quot;1532&quot; data-origin-width=&quot;3651&quot; data-origin-height=&quot;1532&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;마찬가지로 텍스트 설정을 위한 함수를 만들고, WBP_FrameValue를 통해 텍스트 블록을 호출한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 숫자의 경우 Int 값으로 설정해주었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2228&quot; data-origin-height=&quot;1617&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/diVqw2/dJMcafG9Xg6/jVX5qJYZMrvxqbfpGnUfbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/diVqw2/dJMcafG9Xg6/jVX5qJYZMrvxqbfpGnUfbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/diVqw2/dJMcafG9Xg6/jVX5qJYZMrvxqbfpGnUfbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdiVqw2%2FdJMcafG9Xg6%2FjVX5qJYZMrvxqbfpGnUfbK%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;2228&quot; height=&quot;1617&quot; data-origin-width=&quot;2228&quot; data-origin-height=&quot;1617&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 라벨 값에 이어 숫자도 이어서 출력해주자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2345&quot; data-origin-height=&quot;857&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vWKnG/dJMcah53w6I/2rLLAYMkYaCkJkLCpPvTZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vWKnG/dJMcah53w6I/2rLLAYMkYaCkJkLCpPvTZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vWKnG/dJMcah53w6I/2rLLAYMkYaCkJkLCpPvTZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvWKnG%2FdJMcah53w6I%2F2rLLAYMkYaCkJkLCpPvTZ1%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;2345&quot; height=&quot;857&quot; data-origin-width=&quot;2345&quot; data-origin-height=&quot;857&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 숫자도 마찬가지로 출력되는 모습을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;951&quot; data-origin-height=&quot;1178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Nryrd/dJMcad3xH8n/C1jEDiClMHzOsS0Iyw7XMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Nryrd/dJMcad3xH8n/C1jEDiClMHzOsS0Iyw7XMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nryrd/dJMcad3xH8n/C1jEDiClMHzOsS0Iyw7XMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNryrd%2FdJMcad3xH8n%2FC1jEDiClMHzOsS0Iyw7XMK%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;483&quot; height=&quot;598&quot; data-origin-width=&quot;951&quot; data-origin-height=&quot;1178&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금은 모든 Row가 Strength에 대한 내용을 표시하고 있지만, 원래는 각 Row 마다 자신의 속성만 표시해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 위해서는 각 Row에 Gameplay Tag를 부여하고, 브로드캐스트된 AttributeInfo의 태그와 자신의 태그를 비교하여 일치할 때만 UI를 갱신해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은 다음 강의에서 진행될 예정이다.&lt;/p&gt;</description>
      <category>Study/[Unreal] Udemy 강의</category>
      <author>Just Move</author>
      <guid isPermaLink="true">https://blob-thinking.tistory.com/1107</guid>
      <comments>https://blob-thinking.tistory.com/1107#entry1107comment</comments>
      <pubDate>Sat, 27 Jun 2026 05:37:32 +0900</pubDate>
    </item>
    <item>
      <title>Project Windless - Official Reveal Trailer</title>
      <link>https://blob-thinking.tistory.com/1106</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;트레일러 영상 링크 : &lt;a href=&quot;https://www.youtube.com/watch?v=mpj_ZTfLPlE&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=mpj_ZTfLPlE&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=mpj_ZTfLPlE&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/zHWN6/dJMb88faUte/x3xzTfnBratAYncQlb5PrK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/cS6RKT/dJMb86PbVNl/sFahOOWLVOjBa9j11ehg61/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/cfx7bu/dJMb896dRV8/P8eDhHedKpnujhv4kfWuOK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;PS5 | Project Windless - 공개 트레일러 (4K, 한국어 자막)&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/mpj_ZTfLPlE&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;background-color: #ffffff; color: #333333; text-align: start; border-collapse: collapse; width: 100%; height: 209px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;color: #333333; height: 17px; width: 99.8837%;&quot; colspan=&quot;2&quot;&gt;&lt;b&gt;Project&amp;nbsp;Windless&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;color: #333333; height: 21px; width: 13.2558%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;발매 예정일&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;color: #333333; height: 21px; width: 86.6279%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;미정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;color: #333333; height: 21px; width: 13.2558%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;장르&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;color: #333333; height: 21px; width: 86.6279%;&quot;&gt;오픈월드 액션 RPG&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;color: #333333; height: 21px; width: 13.2558%;&quot;&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;&lt;b&gt;개발사&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #333333; height: 21px; width: 86.6279%;&quot;&gt;KRAFTON Montr&amp;eacute;al Studio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;color: #333333; height: 21px; width: 13.2558%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;출시 플랫폼&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;color: #333333; height: 21px; width: 86.6279%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PC, PS5, &lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;Xbox Series X|S&lt;/span&gt; &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;color: #333333; height: 21px; width: 13.2558%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #953b34; text-align: start;&quot;&gt;참고 사이트&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;color: #333333; height: 21px; width: 86.6279%;&quot;&gt;&lt;a href=&quot;https://windless.krafton.com/ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://windless.krafton.com/ko&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 87px;&quot;&gt;
&lt;td style=&quot;color: #333333; height: 87px; width: 99.8837%;&quot; colspan=&quot;2&quot;&gt;&lt;span&gt;배틀그라운드로 잘 알려진 크래프톤의 캐나다 몬트리올 스튜디오가 주도해 개발 중인 작품이다.&lt;br /&gt;국내에서 큰 인기를 얻은 이영도 작가의 판타지 소설 '눈물을 마시는 새' 세계관을 바탕으로 제작된다.&lt;br /&gt;상당히 오래전부터 해당 IP를 기반으로 하여 개발 시도가 있었던 것으로 기억하는데, 이번에 AAA급 게임으로 발표되어 상당히 반가웠다.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;지금은 내용이 가물가물하지만, 중학생 시절 이영도 작가의 대표작인 '드래곤 라자'를 읽은 적이 있기에 '눈물을 마시는 새'에 대해서도 당연히 알고 있었다.&lt;br /&gt;하지만 당시에는 해당 소설이 다소 무겁게 느껴져 읽지 않았는데, 이번 기회에 게임을 플레이하기 전 미리 읽어볼 생각이다.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;흔히 판타지라고 하면 서양 판타지가 주류인데, 트레일러에서는 동양적 신화와 종교적 분위기가 강하게 느껴져 더욱 색다르게 다가왔다.&lt;br /&gt;주인공 역시 인상적이다. 세계관 속 조류 종족인 레콘이며, 그중에서도 신화적 존재인 영웅왕이 주인공으로 등장한다.&lt;br /&gt;트레일러에서는 다수의 적을 상대로 호쾌한 전투를 펼치는 모습 때문에 무쌍류 액션 게임처럼 보이기도 했지만, 공식적으로는 액션 RPG로 소개되었다.&lt;br /&gt;해외에서는 주인공의 외형과 전투 연출 때문에 '치킨무쌍' 같은 별명으로 불리기도 하는 듯하다.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;원작의 유명세로도 많은 관심을 받은 게임이지만, 새로운 경험을 중요하게 생각하는 입장에서 동양적 신화와 종교적 분위기의 세계관, 그리고 레콘 영웅왕이라는 이색적인 주인공 설정만으로도 충분히 매력적으로 다가왔다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3838&quot; data-origin-height=&quot;2160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ljWt9/dJMcaay3qnt/XffYYPtREjiBGTPPqskxqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ljWt9/dJMcaay3qnt/XffYYPtREjiBGTPPqskxqK/img.png&quot; data-alt=&quot;적 종족&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ljWt9/dJMcaay3qnt/XffYYPtREjiBGTPPqskxqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FljWt9%2FdJMcaay3qnt%2FXffYYPtREjiBGTPPqskxqK%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;3838&quot; height=&quot;2160&quot; data-origin-width=&quot;3838&quot; data-origin-height=&quot;2160&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;적 종족&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Wb55F/dJMcabY2VLP/BCoBtRGKGhFZsa5iOXmD21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Wb55F/dJMcabY2VLP/BCoBtRGKGhFZsa5iOXmD21/img.png&quot; data-alt=&quot;주인공&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Wb55F/dJMcabY2VLP/BCoBtRGKGhFZsa5iOXmD21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWb55F%2FdJMcabY2VLP%2FBCoBtRGKGhFZsa5iOXmD21%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;3840&quot; height=&quot;2160&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;주인공&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rjKEI/dJMcac4EzCk/AEdu4oClzgo35WgKOxDYMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rjKEI/dJMcac4EzCk/AEdu4oClzgo35WgKOxDYMk/img.png&quot; data-alt=&quot;게임 배경&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rjKEI/dJMcac4EzCk/AEdu4oClzgo35WgKOxDYMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrjKEI%2FdJMcac4EzCk%2FAEdu4oClzgo35WgKOxDYMk%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;3840&quot; height=&quot;2160&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;게임 배경&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2amBm/dJMcaaTklVm/PH0ymPMCuEoPwQPeW6YxVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2amBm/dJMcaaTklVm/PH0ymPMCuEoPwQPeW6YxVk/img.png&quot; data-alt=&quot;대규모 전투 1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2amBm/dJMcaaTklVm/PH0ymPMCuEoPwQPeW6YxVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2amBm%2FdJMcaaTklVm%2FPH0ymPMCuEoPwQPeW6YxVk%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;3840&quot; height=&quot;2160&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;대규모 전투 1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TtjP1/dJMcagMPRSI/iexowSXQkkCSekSd8bkG8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TtjP1/dJMcagMPRSI/iexowSXQkkCSekSd8bkG8k/img.png&quot; data-alt=&quot;대규모 전투 2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TtjP1/dJMcagMPRSI/iexowSXQkkCSekSd8bkG8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTtjP1%2FdJMcagMPRSI%2FiexowSXQkkCSekSd8bkG8k%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;3840&quot; height=&quot;2160&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;대규모 전투 2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>게임/신작 &amp;amp; 기대작</category>
      <author>Just Move</author>
      <guid isPermaLink="true">https://blob-thinking.tistory.com/1106</guid>
      <comments>https://blob-thinking.tistory.com/1106#entry1106comment</comments>
      <pubDate>Fri, 26 Jun 2026 04:45:44 +0900</pubDate>
    </item>
    <item>
      <title>Persona 6 - Teaser Trailer</title>
      <link>https://blob-thinking.tistory.com/1105</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;트레일러 영상 링크 : &lt;a href=&quot;https://www.youtube.com/watch?v=fTrUOHJf0tc&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=fTrUOHJf0tc&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=fTrUOHJf0tc&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bBd8Ic/dJMb8Xko216/Uw9folHuIckCJ58kvU4ED0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/bzJCb0/dJMb84X8iNC/z0plbvvqxI1f4buqbNAEw0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/djzu1z/dJMb8WeJmtZ/KeWkh3j1uz8onu9WJTKyiK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;Persona 6 - Teaser Trailer | PS5 Games&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/fTrUOHJf0tc&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;background-color: #ffffff; color: #333333; text-align: start; border-collapse: collapse; width: 100%; height: 137px;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 100%;height: 21px;&quot; colspan=&quot;2&quot;&gt;&lt;b&gt;Persona 6&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2558%;height: 21px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;발매 예정일&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.7442%;height: 21px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;미정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2558%;height: 21px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;장르&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.7442%;height: 21px;&quot;&gt;JRPG&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 13.2558%;height: 22px;&quot;&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;&lt;b&gt;개발사&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.7442%;height: 22px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Atlas&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2558%;height: 21px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;출시 플랫폼&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.7442%;height: 21px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PC 예정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2558%;height: 21px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #953b34; text-align: start;&quot;&gt;참고 사이트&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.7442%;height: 21px;&quot;&gt;&lt;a href=&quot;https://store.steampowered.com/app/2649560/6/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://store.steampowered.com/app/2649560/6/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 100%;height: 10px;&quot; colspan=&quot;2&quot;&gt;&lt;span&gt;카툰 렌더링을 기반으로 한 JRPG 명가 Atlus의 대표 시리즈 Persona의 신작이다.&lt;br /&gt;Persona 시리즈는 엄청난 유명세로 옛날부터 꼭 플레이해보고 싶었던 작품이지만, 각 타이틀마다 워낙 방대한 플레이 타임을 자랑하다 보니 쉽게 입문하지 못하고 있다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;우선 Persona와 비슷한 분위기의 단일 작품인 메타포: 리판타지오부터 플레이해본 뒤 본편 시리즈에 도전해볼까 생각 중이다.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;이번 트레일러는 처음 봤을 때 다른 게임의 영상을 잘못 튼 것이 아닐까 싶을 정도로 기존에 알고 있던 Persona의 분위기와 크게 달랐다.&lt;br /&gt;영상 전체의 분위기는 공포, 스릴러, 오컬트 요소가 강하게 느껴졌으며, 기존 시리즈보다 훨씬 어두운 톤을 보여준다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;또한 등장인물도 전혀 나오지 않고 간단한 이미지 중심의 연출로 구성되어 있어, 게임의 세부 내용은 따로 찾아봐야 할 것 같다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFAaau/dJMcah5YQVA/mCB1qr4HqWrakpNa08bQL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFAaau/dJMcah5YQVA/mCB1qr4HqWrakpNa08bQL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFAaau/dJMcah5YQVA/mCB1qr4HqWrakpNa08bQL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFAaau%2FdJMcah5YQVA%2FmCB1qr4HqWrakpNa08bQL1%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;3840&quot; height=&quot;2160&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&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;3840&quot; data-origin-height=&quot;2160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHC1l9/dJMcah5YQVF/tdz2mHbCi34Lu1L9pKqhLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHC1l9/dJMcah5YQVF/tdz2mHbCi34Lu1L9pKqhLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHC1l9/dJMcah5YQVF/tdz2mHbCi34Lu1L9pKqhLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHC1l9%2FdJMcah5YQVF%2Ftdz2mHbCi34Lu1L9pKqhLk%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;3840&quot; height=&quot;2160&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&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;3840&quot; data-origin-height=&quot;2160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9TkEf/dJMcadPVCeY/csFMo6PWpc4ouWmCbx80XK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9TkEf/dJMcadPVCeY/csFMo6PWpc4ouWmCbx80XK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9TkEf/dJMcadPVCeY/csFMo6PWpc4ouWmCbx80XK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9TkEf%2FdJMcadPVCeY%2FcsFMo6PWpc4ouWmCbx80XK%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;3840&quot; height=&quot;2160&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&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;3840&quot; data-origin-height=&quot;2160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yqjS7/dJMcacctntk/gvAnNBHCo0kBh7sQvJd6j1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yqjS7/dJMcacctntk/gvAnNBHCo0kBh7sQvJd6j1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yqjS7/dJMcacctntk/gvAnNBHCo0kBh7sQvJd6j1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyqjS7%2FdJMcacctntk%2FgvAnNBHCo0kBh7sQvJd6j1%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;3840&quot; height=&quot;2160&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>게임/신작 &amp;amp; 기대작</category>
      <author>Just Move</author>
      <guid isPermaLink="true">https://blob-thinking.tistory.com/1105</guid>
      <comments>https://blob-thinking.tistory.com/1105#entry1105comment</comments>
      <pubDate>Mon, 22 Jun 2026 02:19:42 +0900</pubDate>
    </item>
    <item>
      <title>Light No Fire - Announcement Trailer</title>
      <link>https://blob-thinking.tistory.com/1104</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;트레일러 영상 링크 : &lt;a href=&quot;https://www.youtube.com/watch?v=jKQem4Z6ioQ&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=jKQem4Z6ioQ&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=jKQem4Z6ioQ&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/b7a6en/dJMb82eWcGx/AnN2x5Um0XmuFMNwhLvneK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/cZV2lS/dJMb86PaWXq/HNPR9Hn4INu7lUnfTxsOtk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/bmy7tM/dJMb8SpRfaI/mQE5mcIeWQmkHsYnGe4WX1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;Light No Fire Announcement Trailer&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/jKQem4Z6ioQ&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;background-color: #ffffff; color: #333333; text-align: start; border-collapse: collapse; width: 100%; height: 137px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 100%;height: 21px;&quot; colspan=&quot;2&quot;&gt;&lt;b&gt;Light No Fire&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2558%;height: 21px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;발매 예정일&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.7442%;height: 21px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;미정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2558%;height: 21px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;장르&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.7442%;height: 21px;&quot;&gt;오픈월드 생존 크래프팅 / 샌드박스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 13.2558%;height: 22px;&quot;&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;&lt;b&gt;개발사&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.7442%;height: 22px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;HelloGames&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2558%;height: 21px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;출시 플랫폼&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.7442%;height: 21px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PC 예정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.2558%;height: 21px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #953b34; text-align: start;&quot;&gt;참고 사이트&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.7442%;height: 21px;&quot;&gt;&lt;a href=&quot;https://www.madngine.com/webdev2022/#game&quot;&gt;https://www.madngine.com/webdev2022/#game&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 100%;height: 10px;&quot; colspan=&quot;2&quot;&gt;&lt;span&gt;&lt;span&gt;No Man's Sky의 개발사 Hello Games의 신작 게임이다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;방대한 규모의 우주 탐험 게임으로 유명한 No Man's Sky에 이어, 이번에는 지구 크기의 거대한 판타지 세계를 배경으로 한 오픈월드 생존&amp;middot;탐험 게임을 선보였다. &lt;br /&gt;비슷한 게임으로는 Minecraft, Valheim, Enshrouded 등이 떠오르는데, 현재 공개된 트레일러 기준으로는 전투 요소보다는 탐험과 생존, 건설에 더 초점을 맞춘 것으로 보인다.&lt;br /&gt;또 제목으로 유추하자면, 불과 관련된 기믹이 있는 것으로 추정되며 밤에 이벤트가 많이 일어나지 않을까 생각한다.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;Hello Games는 출시 초기 혹평을 받았던 No Man's Sky를 수년간의 지속적인 업데이트를 통해 높은 평가를 받는 작품으로 성장시킨 경험이 있다. &lt;br /&gt;Light No Fire 역시 No Man's Sky와 비슷한 장르적 특성을 지니고 있는 만큼, 그동안 쌓아온 개발 경험을 바탕으로 이번에는 출시 초기부터 높은 완성도를 보여줄 것으로 기대한다.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;개인적으로는 최근 PvP 중심의 경쟁 게임이나 무게감 있는 RPG보다는 보다 캐주얼하고 가볍게 즐길 수 있는 게임들이 많은 관심을 받고 있다고 생각한다. &lt;br /&gt;Light No Fire는 방대한 규모의 콘텐츠를 갖추고 있지만 높은 자유도를 바탕으로 부담 없이 즐길 수 있을 것으로 보여, 경쟁 요소나 무거운 RPG를 선호하지 않는 유저들에게도 좋은 반응을 얻지 않을까 생각한다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;또한 이러한 생존 크래프팅 장르의 특성상 혼자 플레이하는 것보다 친구들과 함께 할 때 재미가 극대화 될 것으로 보인다.&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k8wsg/dJMcacjaF0u/aUHrGbtSBaNOoDC5R7kyJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k8wsg/dJMcacjaF0u/aUHrGbtSBaNOoDC5R7kyJK/img.png&quot; data-alt=&quot;판타지 배경&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k8wsg/dJMcacjaF0u/aUHrGbtSBaNOoDC5R7kyJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk8wsg%2FdJMcacjaF0u%2FaUHrGbtSBaNOoDC5R7kyJK%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;3840&quot; height=&quot;2160&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;판타지 배경&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/muscf/dJMcaf1hc9N/g0NsQZkuE10OBv7Cksa971/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/muscf/dJMcaf1hc9N/g0NsQZkuE10OBv7Cksa971/img.png&quot; data-alt=&quot;수중 지역&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/muscf/dJMcaf1hc9N/g0NsQZkuE10OBv7Cksa971/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmuscf%2FdJMcaf1hc9N%2Fg0NsQZkuE10OBv7Cksa971%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;3840&quot; height=&quot;2160&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;수중 지역&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmIVgl/dJMcagFYzNf/eees4sOJI2ABovbSeVI7D0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmIVgl/dJMcagFYzNf/eees4sOJI2ABovbSeVI7D0/img.png&quot; data-alt=&quot;크래프팅&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmIVgl/dJMcagFYzNf/eees4sOJI2ABovbSeVI7D0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmIVgl%2FdJMcagFYzNf%2Feees4sOJI2ABovbSeVI7D0%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;3840&quot; height=&quot;2160&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;크래프팅&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9oY1H/dJMcahkAuKK/wmtb0mbfQXsp8xmqFEm9Ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9oY1H/dJMcahkAuKK/wmtb0mbfQXsp8xmqFEm9Ok/img.png&quot; data-alt=&quot;던전 추정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9oY1H/dJMcahkAuKK/wmtb0mbfQXsp8xmqFEm9Ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9oY1H%2FdJMcahkAuKK%2Fwmtb0mbfQXsp8xmqFEm9Ok%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;3840&quot; height=&quot;2160&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;던전 추정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bryIoo/dJMcaascw4I/RhLyhgPqfFeb4Gg40DHNbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bryIoo/dJMcaascw4I/RhLyhgPqfFeb4Gg40DHNbK/img.png&quot; data-alt=&quot;탈 것&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bryIoo/dJMcaascw4I/RhLyhgPqfFeb4Gg40DHNbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbryIoo%2FdJMcaascw4I%2FRhLyhgPqfFeb4Gg40DHNbK%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;3840&quot; height=&quot;2160&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;탈 것&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sEUnd/dJMcagsnH6V/wo4EOOQTGvuo4mTOxQJIgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sEUnd/dJMcagsnH6V/wo4EOOQTGvuo4mTOxQJIgk/img.png&quot; data-alt=&quot;이종족&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sEUnd/dJMcagsnH6V/wo4EOOQTGvuo4mTOxQJIgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsEUnd%2FdJMcagsnH6V%2Fwo4EOOQTGvuo4mTOxQJIgk%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;3840&quot; height=&quot;2160&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2160&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이종족&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>게임/신작 &amp;amp; 기대작</category>
      <author>Just Move</author>
      <guid isPermaLink="true">https://blob-thinking.tistory.com/1104</guid>
      <comments>https://blob-thinking.tistory.com/1104#entry1104comment</comments>
      <pubDate>Fri, 19 Jun 2026 02:18:13 +0900</pubDate>
    </item>
  </channel>
</rss>