<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>코린이의 작업공간</title>
    <link>https://kyunstudio.tistory.com/</link>
    <description>알고리즘 공부하는김에 정리해서 올리는 블로그입니다.
조금이나마 도움되셨으면 추천 즐찾 구독 부탁드립니다.</description>
    <language>ko</language>
    <pubDate>Sun, 2 Aug 2026 17:45:32 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>코린코린</managingEditor>
    <item>
      <title>[DX12] Frame Generation 구현 - Optical Flow SDK 활용 환경 구성</title>
      <link>https://kyunstudio.tistory.com/388</link>
      <description>&lt;h2 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 설치 방법&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1.1. CUDA toolkit 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.nvidia.com/cuda-toolkit&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developer.nvidia.com/cuda-toolkit&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742734365486&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;CUDA Toolkit - Free Tools and Training&quot; data-og-description=&quot;Get access to SDKs, trainings, and connect with developers.&quot; data-og-host=&quot;developer.nvidia.com&quot; data-og-source-url=&quot;https://developer.nvidia.com/cuda-toolkit&quot; data-og-url=&quot;https://developer.nvidia.com/cuda-toolkit&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/FynRJ/hyYrZWL1DG/F9xDxDLfoea3KiSGSZqke1/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/zi25c/hyYvkE7ZxZ/Eo1yMBSIZhks0iLnEX5z01/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://developer.nvidia.com/cuda-toolkit&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.nvidia.com/cuda-toolkit&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/FynRJ/hyYrZWL1DG/F9xDxDLfoea3KiSGSZqke1/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/zi25c/hyYvkE7ZxZ/Eo1yMBSIZhks0iLnEX5z01/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;CUDA Toolkit - Free Tools and Training&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Get access to SDKs, trainings, and connect with developers.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.nvidia.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 설치 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'nvcc --version' 명령어를 통해 Cuda 설치 확인 가능&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;564&quot; data-origin-height=&quot;125&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dfq3p3/btsMT15eCfx/QMo9I5DGNOpnWiWg3kl801/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dfq3p3/btsMT15eCfx/QMo9I5DGNOpnWiWg3kl801/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dfq3p3/btsMT15eCfx/QMo9I5DGNOpnWiWg3kl801/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdfq3p3%2FbtsMT15eCfx%2FQMo9I5DGNOpnWiWg3kl801%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;564&quot; height=&quot;125&quot; data-origin-width=&quot;564&quot; data-origin-height=&quot;125&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1.2. Vulkan SDK 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.lunarg.com/vulkan-sdk/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.lunarg.com/vulkan-sdk/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742734433510&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Vulkan&amp;reg; SDK - What's in the SDK - Where to Download&quot; data-og-description=&quot;Our Work with the Khronos Group LunarG has a long-standing partnership with the Khronos Group, a technology consortium that works to develop advanced, royalty-free, acceleration standards for 3D graphics. LunarG is also actively involved in influencing the&quot; data-og-host=&quot;www.lunarg.com&quot; data-og-source-url=&quot;https://www.lunarg.com/vulkan-sdk/&quot; data-og-url=&quot;https://www.lunarg.com/vulkan-sdk/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bEl1si/hyYrUOIvWa/k5PnTsvMD3oZnRVnC1pvNk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/d7mrvC/hyYvmXdwNm/w2jVBRwjxLbXAx98yClw61/img.jpg?width=755&amp;amp;height=395&amp;amp;face=0_0_755_395,https://scrap.kakaocdn.net/dn/uJijN/hyYvnBOR0Y/B3KyJnNAUGKI7HWzYkeRFk/img.png?width=700&amp;amp;height=380&amp;amp;face=0_0_700_380&quot;&gt;&lt;a href=&quot;https://www.lunarg.com/vulkan-sdk/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.lunarg.com/vulkan-sdk/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bEl1si/hyYrUOIvWa/k5PnTsvMD3oZnRVnC1pvNk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/d7mrvC/hyYvmXdwNm/w2jVBRwjxLbXAx98yClw61/img.jpg?width=755&amp;amp;height=395&amp;amp;face=0_0_755_395,https://scrap.kakaocdn.net/dn/uJijN/hyYvnBOR0Y/B3KyJnNAUGKI7HWzYkeRFk/img.png?width=700&amp;amp;height=380&amp;amp;face=0_0_700_380');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Vulkan&amp;reg; SDK - What's in the SDK - Where to Download&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Our Work with the Khronos Group LunarG has a long-standing partnership with the Khronos Group, a technology consortium that works to develop advanced, royalty-free, acceleration standards for 3D graphics. LunarG is also actively involved in influencing the&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.lunarg.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 설치 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 후 'D:\VulkanSDK\1.3.296.0\Bin\vkcube.exe' 실행 (개별적으로 설치된 폴더 확인)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;625&quot; data-origin-height=&quot;662&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VfZZe/btsMUmadL5N/QHkAFx8pFKJeE4Bk5Nm9Bk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VfZZe/btsMUmadL5N/QHkAFx8pFKJeE4Bk5Nm9Bk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VfZZe/btsMUmadL5N/QHkAFx8pFKJeE4Bk5Nm9Bk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVfZZe%2FbtsMUmadL5N%2FQHkAFx8pFKJeE4Bk5Nm9Bk%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;625&quot; height=&quot;662&quot; data-origin-width=&quot;625&quot; data-origin-height=&quot;662&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1.3. Optical Flow SDK 5.0 Build&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 설치 경로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.nvidia.com/optical-flow-sdk&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developer.nvidia.com/optical-flow-sdk&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- CMake&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;활용 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) NvFSBasicSamples 폴더내에 build 폴더 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) CMake 실행 후 Source Code와 Build 경로 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) Configure 실행&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;1369&quot; data-origin-height=&quot;1534&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FzUf8/btsMUqjmN0o/KTuKEmUAQgWuy2YOEq7Le1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FzUf8/btsMUqjmN0o/KTuKEmUAQgWuy2YOEq7Le1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FzUf8/btsMUqjmN0o/KTuKEmUAQgWuy2YOEq7Le1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFzUf8%2FbtsMUqjmN0o%2FKTuKEmUAQgWuy2YOEq7Le1%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;1369&quot; height=&quot;1534&quot; data-origin-width=&quot;1369&quot; data-origin-height=&quot;1534&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.1) 변수 설정 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 'CUDA_SDK_ROOT_DIR' 수정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- CUDA가 설치된 경로로 수정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1358&quot; data-origin-height=&quot;46&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUXNZ2/btsMTHlKegI/VorznsGZsoFB0X9aP8HFnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUXNZ2/btsMTHlKegI/VorznsGZsoFB0X9aP8HFnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUXNZ2/btsMTHlKegI/VorznsGZsoFB0X9aP8HFnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUXNZ2%2FbtsMTHlKegI%2FVorznsGZsoFB0X9aP8HFnk%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;1358&quot; height=&quot;46&quot; data-origin-width=&quot;1358&quot; data-origin-height=&quot;46&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 'CMAKE_INSTALL_PREFIX' 제거&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 전역적으로 활용할 수 있도록 설치할 목적이 아니므로, Prefix 제거&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_PREFIX.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_PREFIX.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1201&quot; data-origin-height=&quot;28&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bitYL2/btsMUo0b6Ku/UAk2Tq6zQiHxGPpK0t6ytk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bitYL2/btsMUo0b6Ku/UAk2Tq6zQiHxGPpK0t6ytk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bitYL2/btsMUo0b6Ku/UAk2Tq6zQiHxGPpK0t6ytk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbitYL2%2FbtsMUo0b6Ku%2FUAk2Tq6zQiHxGPpK0t6ytk%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;1201&quot; height=&quot;28&quot; data-origin-width=&quot;1201&quot; data-origin-height=&quot;28&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;3.2) CMake 최종 설정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1589&quot; data-origin-height=&quot;1534&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/co5GLv/btsMTFhghLz/Filr09O0YOcruBdg2kdUS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/co5GLv/btsMTFhghLz/Filr09O0YOcruBdg2kdUS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/co5GLv/btsMTFhghLz/Filr09O0YOcruBdg2kdUS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fco5GLv%2FbtsMTFhghLz%2FFilr09O0YOcruBdg2kdUS0%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;1589&quot; height=&quot;1534&quot; data-origin-width=&quot;1589&quot; data-origin-height=&quot;1534&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.3) 결과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1218&quot; data-origin-height=&quot;517&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bD4ojo/btsMTLIkL1a/32OEbEC0WIFVUuNiiqn5P0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bD4ojo/btsMTLIkL1a/32OEbEC0WIFVUuNiiqn5P0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bD4ojo/btsMTLIkL1a/32OEbEC0WIFVUuNiiqn5P0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbD4ojo%2FbtsMTLIkL1a%2F32OEbEC0WIFVUuNiiqn5P0%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;1218&quot; height=&quot;517&quot; data-origin-width=&quot;1218&quot; data-origin-height=&quot;517&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) NvOFSamples.sln 활용 build&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4.1) solution 실행 후 Build&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2484&quot; data-origin-height=&quot;1681&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkui39/btsMSFoOvbv/kIg6wxaCYTAUSPwKusBUn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkui39/btsMSFoOvbv/kIg6wxaCYTAUSPwKusBUn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkui39/btsMSFoOvbv/kIg6wxaCYTAUSPwKusBUn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbkui39%2FbtsMSFoOvbv%2FkIg6wxaCYTAUSPwKusBUn1%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;2484&quot; height=&quot;1681&quot; data-origin-width=&quot;2484&quot; data-origin-height=&quot;1681&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때, UTF-8로 설정된 소스코드로 인해 오류 발생&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;1940&quot; data-origin-height=&quot;1800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EgHXL/btsMUjq1t6J/7JWUoSZlwxbG2FvEsx9bbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EgHXL/btsMUjq1t6J/7JWUoSZlwxbG2FvEsx9bbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EgHXL/btsMUjq1t6J/7JWUoSZlwxbG2FvEsx9bbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEgHXL%2FbtsMUjq1t6J%2F7JWUoSZlwxbG2FvEsx9bbK%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;1940&quot; height=&quot;1800&quot; data-origin-width=&quot;1940&quot; data-origin-height=&quot;1800&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 오류 메시지&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2023&quot; data-origin-height=&quot;249&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KamYu/btsMUqXZAo8/7txj43Jd69XcFwhyz7RkT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KamYu/btsMUqXZAo8/7txj43Jd69XcFwhyz7RkT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KamYu/btsMUqXZAo8/7txj43Jd69XcFwhyz7RkT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKamYu%2FbtsMUqXZAo8%2F7txj43Jd69XcFwhyz7RkT0%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;2023&quot; height=&quot;249&quot; data-origin-width=&quot;2023&quot; data-origin-height=&quot;249&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4.2) UTF-8 Encoding으로 인한 오류 해결&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 솔루션의 Property 수정 적용 (Command Line에 /utf-8 옵션 추가)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;968&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvsEVR/btsMT3BZf8b/K8v4dnEQKGYNR3Sn4DDfrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvsEVR/btsMT3BZf8b/K8v4dnEQKGYNR3Sn4DDfrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvsEVR/btsMT3BZf8b/K8v4dnEQKGYNR3Sn4DDfrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvsEVR%2FbtsMT3BZf8b%2FK8v4dnEQKGYNR3Sn4DDfrk%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;606&quot; height=&quot;968&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;968&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;1461&quot; data-origin-height=&quot;876&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/phVW3/btsMSCr98LT/dKCF2vhuSPfUoeKESxHtnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/phVW3/btsMSCr98LT/dKCF2vhuSPfUoeKESxHtnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/phVW3/btsMSCr98LT/dKCF2vhuSPfUoeKESxHtnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FphVW3%2FbtsMSCr98LT%2FdKCF2vhuSPfUoeKESxHtnK%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;1461&quot; height=&quot;876&quot; data-origin-width=&quot;1461&quot; data-origin-height=&quot;876&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4.3) nvcc 오류 발생&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2473&quot; data-origin-height=&quot;176&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/76iU2/btsMVfn46Ak/llBfp9IkJDXzG61zMtvdeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/76iU2/btsMVfn46Ak/llBfp9IkJDXzG61zMtvdeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/76iU2/btsMVfn46Ak/llBfp9IkJDXzG61zMtvdeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F76iU2%2FbtsMVfn46Ak%2FllBfp9IkJDXzG61zMtvdeK%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;2473&quot; height=&quot;176&quot; data-origin-width=&quot;2473&quot; data-origin-height=&quot;176&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 오류 메시지 1. nvcc warning : Support for offline compilation for architectures prior to '_75' will be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 분석&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추후 _75 미만의 아키텍쳐의 지원이 중단될 수 있다는 이야기이며, 현재 활용중인 RTX2070의 경우 7.5로 현재 동작 간 무관한 로그&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;260&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2pgpb/btsMSzI4tMV/zUiB0pCVcUzJAQIsvYp4q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2pgpb/btsMSzI4tMV/zUiB0pCVcUzJAQIsvYp4q1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2pgpb/btsMSzI4tMV/zUiB0pCVcUzJAQIsvYp4q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2pgpb%2FbtsMSzI4tMV%2FzUiB0pCVcUzJAQIsvYp4q1%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;920&quot; height=&quot;260&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;260&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;867&quot; data-origin-height=&quot;1215&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k4q93/btsMTKCDxoX/OpmUTaBbf8DbvAjScWYCI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k4q93/btsMTKCDxoX/OpmUTaBbf8DbvAjScWYCI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k4q93/btsMTKCDxoX/OpmUTaBbf8DbvAjScWYCI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk4q93%2FbtsMTKCDxoX%2FOpmUTaBbf8DbvAjScWYCI0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;867&quot; height=&quot;1215&quot; data-origin-width=&quot;867&quot; data-origin-height=&quot;1215&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#compute-capabilities&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#compute-capabilities&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742737613529&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;1. Introduction &amp;mdash; CUDA C++ Programming Guide&quot; data-og-description=&quot;Texture memory is read from kernels using the device functions described in Texture Functions. The process of reading a texture calling one of these functions is called a texture fetch. Each texture fetch specifies a parameter called a texture object for t&quot; data-og-host=&quot;docs.nvidia.com&quot; data-og-source-url=&quot;https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#compute-capabilities&quot; data-og-url=&quot;https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#compute-capabilities&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bVngdi/hyYrZvIjUY/A61f3tzllYatHpPMSeoXR0/img.png?width=3620&amp;amp;height=1712&amp;amp;face=0_0_3620_1712,https://scrap.kakaocdn.net/dn/fEfsS/hyYudUmQ5Q/uDfVQTfx7KajzwKMUDvhF0/img.png?width=1612&amp;amp;height=796&amp;amp;face=0_0_1612_796&quot;&gt;&lt;a href=&quot;https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#compute-capabilities&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#compute-capabilities&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bVngdi/hyYrZvIjUY/A61f3tzllYatHpPMSeoXR0/img.png?width=3620&amp;amp;height=1712&amp;amp;face=0_0_3620_1712,https://scrap.kakaocdn.net/dn/fEfsS/hyYudUmQ5Q/uDfVQTfx7KajzwKMUDvhF0/img.png?width=1612&amp;amp;height=796&amp;amp;face=0_0_1612_796');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;1. Introduction &amp;mdash; CUDA C++ Programming Guide&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Texture memory is read from kernels using the device functions described in Texture Functions. The process of reading a texture calling one of these functions is called a texture fetch. Each texture fetch specifies a parameter called a texture object for t&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.nvidia.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 오류 메시지 2. nvcc&amp;nbsp;fatal&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;Could&amp;nbsp;not&amp;nbsp;open&amp;nbsp;output&amp;nbsp;file&amp;nbsp;F:/OneDrive/Kyun/01_PROJECT/26_DirectX12/DirectX12/Libraries/Include/DirectX/Optical_Flow_SDK_5.0.7/NvOFBasicSamples/build/AppStereoDisparityCuda/CMakeFiles/AppStereoDisparityCuda.dir/__/__/Common/Utils/AppStereoDisparityCuda_generated_kernel.cu.obj.NVCC-depend&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 분석&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;현재 AppStereoDisparityCuda_generated_kernel.cu.obj.NVCC-depend 파일이 존재하지 않아 문제가 발생했으며, 해당 파일을 CMake 간 생성해야 함&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1161&quot; data-origin-height=&quot;282&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWBN13/btsMVfaxxoH/zBB4AN53SsKSt2PkrsDrBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWBN13/btsMVfaxxoH/zBB4AN53SsKSt2PkrsDrBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWBN13/btsMVfaxxoH/zBB4AN53SsKSt2PkrsDrBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWBN13%2FbtsMVfaxxoH%2FzBB4AN53SsKSt2PkrsDrBK%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;1161&quot; height=&quot;282&quot; data-origin-width=&quot;1161&quot; data-origin-height=&quot;282&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;음... 일단은 다른 설치 진행 후 해당 부분 문제 해결할 예정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 해결 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) CMake 간 'CUDA_USE_STATIC_CUDA_RUNTIME' 명령어 추가&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1524&quot; data-origin-height=&quot;175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eG87xu/btsMTn2cis7/K29WMEILmXkS5KJbg2tAAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eG87xu/btsMTn2cis7/K29WMEILmXkS5KJbg2tAAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eG87xu/btsMTn2cis7/K29WMEILmXkS5KJbg2tAAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeG87xu%2FbtsMTn2cis7%2FK29WMEILmXkS5KJbg2tAAk%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;1524&quot; height=&quot;175&quot; data-origin-width=&quot;1524&quot; data-origin-height=&quot;175&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 파일 경로 단축&lt;br /&gt;경로를 더 짧게 수정한 후 컴파일 시 정상 동작 확인 완료&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. TODO&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. Optical Flow 방식 보간 구현&lt;br /&gt;- 하드웨어 연산을 활용하여 최적화를 구현하기 위해 Nvidia SDK 활용 방식 적용 중&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. Motion Vector 방식 보간 구현&lt;br /&gt;- 발열등의 이유로 하드웨어 자원 활용을 줄여야 하는 경우, &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;매 프레임 간 동일한 연산 대신 간략화된 연산 적용&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3. Frame Interpolation 방식 보간 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 1 Frame의 마진을 적용해 중간 프레임 생성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4. AI 활용 보간 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- CNN 커널을 활용해 이미지 생성 구현&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.nvidia.com/optical-flow-sdk&quot;&gt;https://developer.nvidia.com/optical-flow-sdk&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.nvidia.com/vpi/sample_stereo.html&quot;&gt;https://docs.nvidia.com/vpi/sample_stereo.html&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#compute-capabilities&quot;&gt;https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#compute-capabilities&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.lunarg.com/vulkan-sdk/&quot;&gt;https://www.lunarg.com/vulkan-sdk/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.nvidia.com/cuda-toolkit&quot;&gt;https://developer.nvidia.com/cuda-toolkit&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/azagramac/FidelityFX-SDK-FSR3/tree/master/docs/techniques/media/frame-interpolation&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/azagramac/FidelityFX-SDK-FSR3/tree/master/docs/techniques/media/frame-interpolation&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.nvidia.com/video-technologies/optical-flow-sdk/pdf/NVOFA_Programming_Guide.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.nvidia.com/video-technologies/optical-flow-sdk/pdf/NVOFA_Programming_Guide.pdf&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.nvidia.com/video-technologies/optical-flow-sdk/nvofa-programming-guide/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.nvidia.com/video-technologies/optical-flow-sdk/nvofa-programming-guide/index.html&lt;/a&gt;&lt;/p&gt;</description>
      <category>---------개인공부--------/|DirectX (C++)|</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/388</guid>
      <comments>https://kyunstudio.tistory.com/388#entry388comment</comments>
      <pubDate>Sun, 23 Mar 2025 23:01:52 +0900</pubDate>
    </item>
    <item>
      <title>[DirectX12] Instancing 구현</title>
      <link>https://kyunstudio.tistory.com/387</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h2&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;2110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyHqI3/btsMeshHEtF/ZTiPQnwGgB92OilZFCa0bk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyHqI3/btsMeshHEtF/ZTiPQnwGgB92OilZFCa0bk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyHqI3/btsMeshHEtF/ZTiPQnwGgB92OilZFCa0bk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyHqI3%2FbtsMeshHEtF%2FZTiPQnwGgB92OilZFCa0bk%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;2110&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2110&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;인스턴싱을 활용하여 효율적인 렌더링 환경 구축&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;DX12의 DrawIndexedInstanced 함수 내 StartInstanceLocation 활용에 오류가 있어, constant buffer를 활용하여 Start Location을 전달하는 방법으로 동작 구현&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1739193845772&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// Defaults for number of lights.
#ifndef NUM_DIR_LIGHTS
#define NUM_DIR_LIGHTS 3
#endif

#ifndef NUM_POINT_LIGHTS
#define NUM_POINT_LIGHTS 0
#endif

#ifndef NUM_SPOT_LIGHTS
#define NUM_SPOT_LIGHTS 0
#endif

#define MaxLights 16
#include &quot;LightingUtil.hlsli&quot;

struct InstanceData
{
    float4x4 World;
    float4x4 TexTransform;
    float4x4 WorldInvTranspose; // Geometery Shader 동작 간 법선 벡터 변환 시 직교 성질 유지를 위함
    uint MaterialIndex;
    float2 DisplacementMapTexelSize;
    float GridSpatialStep;
    float bPerObjectPad1;
};

struct MaterialData
{
    float4 DiffuseAlbedo;
    float3 FresnelR0;
    float Roughness;
    float4x4 MatTransform;
    uint DiffuseMapIndex;
    uint MatPad0;
    uint MatPad1;
    uint MatPad2;
};

#ifdef TEX_SIZE
Texture2D gDiffuseMap[TEX_SIZE] : register(t0, space0);
#else
Texture2D gDiffuseMap[16] : register(t0, space0);
#endif

#ifdef TEX_ARRAY_SIZE
Texture2DArray gTreeMapArray[TEX_ARRAY_SIZE] : register(t0, space1);
#else
Texture2DArray gTreeMapArray[2] : register(t0, space1);
#endif

// Put in space1, so the texture array does not overlap with these resources.  
// The texture array will occupy registers t0, t1, ..., t3 in space0.
StructuredBuffer&amp;lt;InstanceData&amp;gt; gInstanceData : register(t0, space2); 
StructuredBuffer&amp;lt;MaterialData&amp;gt; gMaterialData : register(t1, space2);
Texture2D gDisplacementMap : register(t2, space2);

SamplerState gsamPointWrap : register(s0);
SamplerState gsamPointClamp : register(s1);
SamplerState gsamLinearWrap : register(s2);
SamplerState gsamLinearClamp : register(s3);
SamplerState gsamAnisotropicWrap : register(s4);
SamplerState gsamAnisotropicClamp : register(s5);

// Constant data that varies per material.
cbuffer cbPass : register(b0)
{
    float4x4 gView;
    float4x4 gInvView;
    float4x4 gProj;
    float4x4 gInvProj;
    float4x4 gViewProj;
    float4x4 gInvViewProj;
    float3 gEyePosW;
    float cbPerPassPad1;
    float2 gRenderTargetSize;
    float2 gInvRenderTargetSize;
    float gNearZ;
    float gFarZ;
    float gTotalTime;
    float gDeltaTime;
    float4 gAmbientLight;

    	// Allow application to change fog parameters once per frame.
	// For example, we may only use fog for certain times of day.
    float4 gFogColor;
    float gFogStart;
    float gFogRange;
    float2 cbPerObjectPad2;
    
    // Indices [0, NUM_DIR_LIGHTS) are directional lights;
    // indices [NUM_DIR_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHTS) are point lights;
    // indices [NUM_DIR_LIGHTS+NUM_POINT_LIGHTS, NUM_DIR_LIGHTS+NUM_POINT_LIGHT+NUM_SPOT_LIGHTS)
    // are spot lights for a maximum of MaxLights per object.
    Light gLights[MaxLights];
};

cbuffer cbInstance : register(b1)
{
    uint gBaseInstanceIndex;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1739193878691&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void MyApp::BuildRootSignature()
{
	// Create root CBVs.
	D3D12_DESCRIPTOR_RANGE TexTable // register t0[16] (Space0)
	{
		/* D3D12_DESCRIPTOR_RANGE_TYPE RangeType	*/.RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV,
		/* UINT NumDescriptors						*/.NumDescriptors = (UINT)TEXTURE_FILENAMES.size() + SRV_USER_SIZE,
		/* UINT BaseShaderRegister					*/.BaseShaderRegister = 0,
		/* UINT RegisterSpace						*/.RegisterSpace = 0,
		/* UINT OffsetInDescriptorsFromTableStart	*/.OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND
	};
	D3D12_DESCRIPTOR_RANGE TexArrayTable // register t0[0] (Space1)
	{
		/* D3D12_DESCRIPTOR_RANGE_TYPE RangeType	*/.RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV,
		/* UINT NumDescriptors						*/.NumDescriptors = (UINT)TEXTURE_ARRAY_FILENAMES.size(),
		/* UINT BaseShaderRegister					*/.BaseShaderRegister = 0,
		/* UINT RegisterSpace						*/.RegisterSpace = 1,
		/* UINT OffsetInDescriptorsFromTableStart	*/.OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND
	};
	D3D12_DESCRIPTOR_RANGE DisplacementMapTable // register t2 (Space2)
	{
		/* D3D12_DESCRIPTOR_RANGE_TYPE RangeType	*/.RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV,
		/* UINT NumDescriptors						*/.NumDescriptors = 1,
		/* UINT BaseShaderRegister					*/.BaseShaderRegister = 2,
		/* UINT RegisterSpace						*/.RegisterSpace = 2,
		/* UINT OffsetInDescriptorsFromTableStart	*/.OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND
	};
	

	// Root parameter can be a table, root descriptor or root constants.
	CD3DX12_ROOT_PARAMETER slotRootParameter[7];

	/*D3D12_SHADER_VISIBILITY
	{
		D3D12_SHADER_VISIBILITY_ALL = 0,
		D3D12_SHADER_VISIBILITY_VERTEX = 1,
		D3D12_SHADER_VISIBILITY_HULL = 2,
		D3D12_SHADER_VISIBILITY_DOMAIN = 3,
		D3D12_SHADER_VISIBILITY_GEOMETRY = 4,
		D3D12_SHADER_VISIBILITY_PIXEL = 5,
		D3D12_SHADER_VISIBILITY_AMPLIFICATION = 6,
		D3D12_SHADER_VISIBILITY_MESH = 7
	} 	D3D12_SHADER_VISIBILITY;*/

	// Perfomance TIP: Order from most frequent to least frequent.
	slotRootParameter[0].InitAsConstantBufferView(1);		// register b1 (gBaseInstanceIndex)
	slotRootParameter[1].InitAsShaderResourceView(0, 2);	// InstanceData t0 (Space2)
	slotRootParameter[2].InitAsShaderResourceView(1, 2);	// MaterialData t1 (Space2)
	slotRootParameter[3].InitAsConstantBufferView(0);		// register b0
	slotRootParameter[4].InitAsDescriptorTable(1, &amp;amp;TexTable, D3D12_SHADER_VISIBILITY_PIXEL);
	slotRootParameter[5].InitAsDescriptorTable(1, &amp;amp;TexArrayTable, D3D12_SHADER_VISIBILITY_PIXEL);
	slotRootParameter[6].InitAsDescriptorTable(1, &amp;amp;DisplacementMapTable, D3D12_SHADER_VISIBILITY_ALL);

	auto staticSamplers = D3DUtil::GetStaticSamplers();

	// A root signature is an array of root parameters.
	CD3DX12_ROOT_SIGNATURE_DESC rootSigDesc(7, slotRootParameter, (UINT)staticSamplers.size(), staticSamplers.data(), D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT);

	// create a root signature with a single slot which points to a descriptor range consisting of a single constant buffer
	Microsoft::WRL::ComPtr&amp;lt;ID3DBlob&amp;gt; serializedRootSig = nullptr;
	Microsoft::WRL::ComPtr&amp;lt;ID3DBlob&amp;gt; errorBlob = nullptr;
	HRESULT hr = D3D12SerializeRootSignature(&amp;amp;rootSigDesc, D3D_ROOT_SIGNATURE_VERSION_1, serializedRootSig.GetAddressOf(), errorBlob.GetAddressOf());
	if (errorBlob != nullptr)
		::OutputDebugStringA((char*)errorBlob-&amp;gt;GetBufferPointer());
	ThrowIfFailed(hr);

	ThrowIfFailed(mDevice-&amp;gt;CreateRootSignature(0, serializedRootSig-&amp;gt;GetBufferPointer(), serializedRootSig-&amp;gt;GetBufferSize(), IID_PPV_ARGS(mRootSignature.GetAddressOf())));
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1739193985487&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	for (size_t i = 0; i &amp;lt; mAllRitems.size(); ++i)
	{
		auto&amp;amp; ri = mAllRitems[i];
		if (!(ri-&amp;gt;LayerFlag &amp;amp; (1 &amp;lt;&amp;lt; (int)flag)))
			continue;

		if (flag == RenderLayer::Normal
			|| flag == RenderLayer::NormalWireframe
			|| flag == RenderLayer::TreeSprites
			|| flag == RenderLayer::TreeSpritesWireframe)
			ri-&amp;gt;PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_POINTLIST;
		else if (flag == RenderLayer::Tessellation
			|| flag == RenderLayer::TessellationWireframe)
			ri-&amp;gt;PrimitiveType = D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST;
		else
			ri-&amp;gt;PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST;

		D3D12_VERTEX_BUFFER_VIEW vbv = ri-&amp;gt;Geo-&amp;gt;VertexBufferView();
		D3D12_INDEX_BUFFER_VIEW ibv = ri-&amp;gt;Geo-&amp;gt;IndexBufferView();
		mCommandList-&amp;gt;IASetVertexBuffers(0, 1, &amp;amp;vbv);
		mCommandList-&amp;gt;IASetIndexBuffer(&amp;amp;ibv);
		mCommandList-&amp;gt;IASetPrimitiveTopology(ri-&amp;gt;PrimitiveType);
		std::cout &amp;lt;&amp;lt; ri-&amp;gt;StartInstanceLocation &amp;lt;&amp;lt; std::endl;

		D3D12_GPU_VIRTUAL_ADDRESS objCBAddress = currInstanceCB-&amp;gt;GetGPUVirtualAddress() + i * objCBByteSize;
		mCommandList-&amp;gt;SetGraphicsRootConstantBufferView(0, objCBAddress);

		mCommandList-&amp;gt;DrawIndexedInstanced(ri-&amp;gt;IndexCount, ri-&amp;gt;InstanceCount, ri-&amp;gt;StartIndexLocation, ri-&amp;gt;BaseVertexLocation, ri-&amp;gt;StartInstanceLocation);
		// mCommandList-&amp;gt;DrawIndexedInstanced(ri-&amp;gt;IndexCount, ri-&amp;gt;InstanceCount, ri-&amp;gt;StartIndexLocation, ri-&amp;gt;BaseVertexLocation, 0);
	}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;컬링을 적용하여 더 효율적인 렌더링 환경 구축&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.gamedev.net/forums/topic/662594-startinstancelocation-and-sv-instanceid/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.gamedev.net/forums/topic/662594-startinstancelocation-and-sv-instanceid/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/microsoft/DirectXShaderCompiler/issues/2946&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/microsoft/DirectXShaderCompiler/issues/2946&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1739194100975&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;[SPIR-V] SV_InstanceID behavior different than in DX12 &amp;middot; Issue #2946 &amp;middot; microsoft/DirectXShaderCompiler&quot; data-og-description=&quot;When using SV_InstanceID, the SPIR-V codegen emits gl_InstanceIndex, which is not correct. The DX12 InstanceID always counts from 0, even if the StartInstanceLocation parameter is non-zero. gl_Inst...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/microsoft/DirectXShaderCompiler/issues/2946&quot; data-og-url=&quot;https://github.com/microsoft/DirectXShaderCompiler/issues/2946&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/tcXJa/hyYcfSzMFG/sItHgk9k3eUpis3a7gdBkK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/K5Hdo/hyYfS2tJvE/sHjaCBQSzNjH5Fe8bCokLk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/microsoft/DirectXShaderCompiler/issues/2946&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/microsoft/DirectXShaderCompiler/issues/2946&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/tcXJa/hyYcfSzMFG/sItHgk9k3eUpis3a7gdBkK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/K5Hdo/hyYfS2tJvE/sHjaCBQSzNjH5Fe8bCokLk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[SPIR-V] SV_InstanceID behavior different than in DX12 &amp;middot; Issue #2946 &amp;middot; microsoft/DirectXShaderCompiler&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;When using SV_InstanceID, the SPIR-V codegen emits gl_InstanceIndex, which is not correct. The DX12 InstanceID always counts from 0, even if the StartInstanceLocation parameter is non-zero. gl_Inst...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>---------개인공부--------/|DirectX (C++)|</category>
      <category>DX12</category>
      <category>instancing</category>
      <category>인스턴싱</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/387</guid>
      <comments>https://kyunstudio.tistory.com/387#entry387comment</comments>
      <pubDate>Mon, 10 Feb 2025 22:26:36 +0900</pubDate>
    </item>
    <item>
      <title>[DirectX12] Geometry Shader 응용</title>
      <link>https://kyunstudio.tistory.com/386</link>
      <description>&lt;h2 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. Subdivision&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1324&quot; data-origin-height=&quot;851&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSZnQv/btsL1gXvPgT/xrVXtI46bE9WT4lm2hVkI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSZnQv/btsL1gXvPgT/xrVXtI46bE9WT4lm2hVkI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSZnQv/btsL1gXvPgT/xrVXtI46bE9WT4lm2hVkI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSZnQv%2FbtsL1gXvPgT%2FxrVXtI46bE9WT4lm2hVkI0%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;1324&quot; height=&quot;851&quot; data-origin-width=&quot;1324&quot; data-origin-height=&quot;851&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;2. Draw Normal Vector&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1327&quot; data-origin-height=&quot;842&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHEyiI/btsL1zPr0ai/1X61YzHQKQfM6th1xB9x61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHEyiI/btsL1zPr0ai/1X61YzHQKQfM6th1xB9x61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHEyiI/btsL1zPr0ai/1X61YzHQKQfM6th1xB9x61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHEyiI%2FbtsL1zPr0ai%2F1X61YzHQKQfM6th1xB9x61%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;1327&quot; height=&quot;842&quot; data-origin-width=&quot;1327&quot; data-origin-height=&quot;842&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;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1. Subdivision&lt;/h4&gt;
&lt;pre id=&quot;code_1737814578185&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void Subdivide(VertexIn inVerts[3], out VertexIn outVerts[6])
{
    //         1(5)                
    //          *                
    //         / \               
    //        /   \              
    // m0(1) *-----* m1(3)       
    //      / \   / \            
    //     /   \ /   \           
    //    *-----*-----*          
    // 0(0)   m2(2)   2(4)          
    
    VertexIn m[3];
    
    // 각 변의 중점을 계산
    m[0].PosL = 0.5f * (inVerts[0].PosL + inVerts[1].PosL);
    m[1].PosL = 0.5f * (inVerts[1].PosL + inVerts[2].PosL);
    m[2].PosL = 0.5f * (inVerts[2].PosL + inVerts[0].PosL);
    
    // // 단위 구에 투영
    // m[0].PosL = normalize(m[0].PosL);
    // m[1].PosL = normalize(m[1].PosL);
    // m[2].PosL = normalize(m[2].PosL);
    
    // 법선을 유도
    m[0].NormalL = m[0].PosL;
    m[1].NormalL = m[1].PosL;
    m[2].NormalL = m[2].PosL;
    
    // 텍스처 좌표를 보간
    m[0].TexC = 0.5f * (inVerts[0].TexC + inVerts[1].TexC);
    m[1].TexC = 0.5f * (inVerts[1].TexC + inVerts[2].TexC);
    m[2].TexC = 0.5f * (inVerts[2].TexC + inVerts[0].TexC);
    
    outVerts[0] = inVerts[0];
    outVerts[1] = m[0];
    outVerts[2] = m[2];
    outVerts[3] = m[1];
    outVerts[4] = inVerts[2];
    outVerts[5] = inVerts[1];
}

void OutputSubdivision(VertexIn v[6], inout TriangleStream&amp;lt;GeoOut&amp;gt; triStream)
{
    GeoOut gout[6];
    
    [unroll]
    for (int i = 0; i &amp;lt; 6; ++i)
    {
        // world space로 변환
        float4 posW = mul(float4(v[i].PosL, 1.0f), gWorld);
        gout[i].PosW = posW.xyz;
        gout[i].NormalW = mul(v[i].NormalL, (float3x3) gWorldInvTranspose);
        
        // homogeneous clip space로 변환
        gout[i].PosH = mul(posW, gViewProj);
        
        float4 texC = mul(float4(v[i].TexC, 0.0f, 1.0f), gTexTransform);
        gout[i].TexC = mul(texC, gMatTransform).xy;
    }
    //         1(5)                     1(5)                
    //          *                        *                
    //         / \                      / \             &amp;lt;- Strip 2 (1 5 3)
    //        /   \                    /   \              
    // m0(1) *-----* m1(3)  -&amp;gt;  m0(1) *-----* m1(3)       
    //      / \   / \                / \   / \            
    //     /   \ /   \              / 0 \ /   \         &amp;lt;- Strip 1 (0 1 2 3 4) -&amp;gt; (0 1 2) / (1 2 3) / (2 3 4)
    //    *-----*-----*            *-----*-----*          
    // 0(0)   m2(2)   2(4)       0(0)   m2(2)   2(4)          
    
    // 삼각형을 2개의 띠로 그린다.
    // 1. 띠 1: 아래쪽 삼각형 세 개
    // 2. 띠 2: 위쪽 삼각형 1개
    [unroll]
    for (int j = 0; j &amp;lt; 5; ++j)
    {
        triStream.Append(gout[j]);
    }
    triStream.RestartStrip();
    
    triStream.Append(gout[1]);
    triStream.Append(gout[5]);
    triStream.Append(gout[3]);
}

[maxvertexcount(8)]
void main(triangle VertexIn gin[3], inout TriangleStream&amp;lt;GeoOut&amp;gt; triStream)
{
    VertexIn v[6];
    Subdivide(gin, v);
    OutputSubdivision(v, triStream);
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;2. Draw Normal Vector&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) Shader&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.1) Vertex Shader:&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델의 위치 정보 전달&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.2) Geometry Shader&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vertex shader에서 전달된 위치, 노멀 정보를 바탕으로, 현재 위치와 노멀 방향으로 이동된 두 점을 만들어 pixel shader로 전달&lt;/p&gt;
&lt;pre id=&quot;code_1737814512282&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[maxvertexcount(2)]
void main(point NormalGeometryShaderInput input[1], inout LineStream&amp;lt;NormalPixelShaderInput&amp;gt; outputStream)
{
    NormalPixelShaderInput output;
    
    float4 posW = mul(input[0].PosL, gWorld);
    float4 normalL = float4(input[0].NormalL, 0.0);
    float4 normalW = mul(normalL, gWorldInvTranspose);	// 노멀벡터의 수직 속성을 유지하기 위해 inv transpose 적용
    normalW = float4(normalize(normalW.xyz), 0.0);
    
    output.pos = mul(posW, gViewProj);
    output.color = float3(1.0, 1.0, 0.0);
    outputStream.Append(output);
    
    output.pos = mul(posW + lineScale * normalW, gViewProj);
    output.color = float3(1.0, 0.0, 0.0);
    outputStream.Append(output);
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.3) Pixel Shader&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전달된 위치 정보에 맞춰 색 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) PSO 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구현한 Shader와 쌍이 맞는 PrimitiveTopologyType을 선택해주어 오류가 발생하지 않도록 한다. (D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT)&lt;/p&gt;
&lt;pre id=&quot;code_1737814068931&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;D3D12_GRAPHICS_PIPELINE_STATE_DESC normalPsoDesc
{
    /* ID3D12RootSignature* pRootSignature                              */.pRootSignature = mRootSignature.Get(),
    /* D3D12_SHADER_BYTECODE VS                                         */.VS = {reinterpret_cast&amp;lt;BYTE*&amp;gt;(mShaders[&quot;normalVS&quot;]-&amp;gt;GetBufferPointer()), mShaders[&quot;normalVS&quot;]-&amp;gt;GetBufferSize()},
    /* D3D12_SHADER_BYTECODE PS                                         */.PS = {reinterpret_cast&amp;lt;BYTE*&amp;gt;(mShaders[&quot;normalPS&quot;]-&amp;gt;GetBufferPointer()), mShaders[&quot;normalPS&quot;]-&amp;gt;GetBufferSize()},
    /* D3D12_SHADER_BYTECODE DS                                         */.DS = {NULL, 0},
    /* D3D12_SHADER_BYTECODE HS                                         */.HS = {NULL, 0},
    /* D3D12_SHADER_BYTECODE GS                                         */.GS = {reinterpret_cast&amp;lt;BYTE*&amp;gt;(mShaders[&quot;normalGS&quot;]-&amp;gt;GetBufferPointer()), mShaders[&quot;normalGS&quot;]-&amp;gt;GetBufferSize()},,
    /* D3D12_STREAM_OUTPUT_DESC StreamOutput{                           */.StreamOutput = {
    /*      const D3D12_SO_DECLARATION_ENTRY* pSODeclaration{           */  NULL,
    /*          UINT Stream;                                            */
    /*          LPCSTR SemanticName;                                    */
    /*          UINT SemanticIndex;                                     */
    /*          BYTE StartComponent;                                    */
    /*          BYTE ComponentCount;                                    */
    /*          BYTE OutputSlot;                                        */
    /*      }                                                           */
    /*      UINT NumEntries;                                            */  0,
    /*      const UINT* pBufferStrides;                                 */  0,
    /*      UINT NumStrides;                                            */  0,
    /*      UINT RasterizedStream;                                      */  0
    /* }                                                                */},
    /* D3D12_BLEND_DESC BlendState{                                     */.BlendState = CD3DX12_BLEND_DESC(D3D12_DEFAULT),
    /*      BOOL AlphaToCoverageEnable                                  */
    /*      BOOL IndependentBlendEnable                                 */
    /*      D3D12_RENDER_TARGET_BLEND_DESC RenderTarget[8]              */
    /* }                                                                */
    /* UINT SampleMask                                                  */.SampleMask = UINT_MAX,
    /* D3D12_RASTERIZER_DESC RasterizerState{                           */.RasterizerState = { // CD3DX12_RASTERIZER_DESC(D3D12_DEFAULT);
    /*      D3D12_FILL_MODE FillMode                                    */      D3D12_FILL_MODE_SOLID, // D3D12_FILL_MODE_WIREFRAME,
    /*      D3D12_CULL_MODE CullMode                                    */      D3D12_CULL_MODE_BACK,
    /*      BOOL FrontCounterClockwise                                  */      false,
    /*      INT DepthBias                                               */      D3D12_DEFAULT_DEPTH_BIAS,
    /*      FLOAT DepthBiasClamp                                        */      D3D12_DEFAULT_DEPTH_BIAS_CLAMP,
    /*      FLOAT SlopeScaledDepthBias                                  */      D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS,
    /*      BOOL DepthClipEnable                                        */      true,
    /*      BOOL MultisampleEnable                                      */      false,
    /*      BOOL AntialiasedLineEnable                                  */      false,
    /*      UINT ForcedSampleCount                                      */      0,
    /*      D3D12_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster    */      D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF,
    /* }                                                                */},
    /* D3D12_DEPTH_STENCIL_DESC DepthStencilState {                     */.DepthStencilState = { // CD3DX12_DEPTH_STENCIL_DESC(D3D12_DEFAULT);
    /*      BOOL DepthEnable                                            */      .DepthEnable = true,
    /*      D3D12_DEPTH_WRITE_MASK DepthWriteMask                       */      .DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL,
    /*      D3D12_COMPARISON_FUNC DepthFunc                             */      .DepthFunc = D3D12_COMPARISON_FUNC_LESS,
    /*      BOOL StencilEnable                                          */      .StencilEnable = false,
    /*      UINT8 StencilReadMask                                       */      .StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK,
    /*      UINT8 StencilWriteMask                                      */      .StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK,
    /*      D3D12_DEPTH_STENCILOP_DESC FrontFace {                      */      .FrontFace = {
    /*          D3D12_STENCIL_OP StencilFailOp                          */          .StencilFailOp = D3D12_STENCIL_OP_KEEP,
    /*          D3D12_STENCIL_OP StencilDepthFailOp                     */          .StencilDepthFailOp = D3D12_STENCIL_OP_KEEP,
    /*          D3D12_STENCIL_OP StencilPassOp                          */          .StencilPassOp = D3D12_STENCIL_OP_KEEP,
    /*          D3D12_COMPARISON_FUNC StencilFunc                       */          .StencilFunc = D3D12_COMPARISON_FUNC_ALWAYS
    /*      }                                                           */      },
    /*      D3D12_DEPTH_STENCILOP_DESC BackFace                         */      .BackFace = {
    /*          D3D12_STENCIL_OP StencilFailOp                          */          .StencilFailOp = D3D12_STENCIL_OP_KEEP,
    /*          D3D12_STENCIL_OP StencilDepthFailOp                     */          .StencilDepthFailOp = D3D12_STENCIL_OP_KEEP,
    /*          D3D12_STENCIL_OP StencilPassOp                          */          .StencilPassOp = D3D12_STENCIL_OP_KEEP,
    /*          D3D12_COMPARISON_FUNC StencilFunc                       */          .StencilFunc = D3D12_COMPARISON_FUNC_ALWAYS
    /*      }                                                           */      },
    /* }                                                                */ },
    /* D3D12_INPUT_LAYOUT_DESC InputLayout{                             */.InputLayout = {
    /*      const D3D12_INPUT_ELEMENT_DESC* pInputElementDescs          */      .pInputElementDescs = mInputLayout.data(),
    /*      UINT NumElements                                            */      .NumElements = (UINT)mInputLayout.size()
    /*  }                                                               */ },
    /* D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue               */.IBStripCutValue = D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED,
    /* D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType              */.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT, // D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE,
    /* UINT NumRenderTargets                                            */.NumRenderTargets = 1,
    /* DXGI_FORMAT RTVFormats[8]                                        */.RTVFormats = {mBackBufferFormat, DXGI_FORMAT_UNKNOWN,DXGI_FORMAT_UNKNOWN,DXGI_FORMAT_UNKNOWN,DXGI_FORMAT_UNKNOWN,DXGI_FORMAT_UNKNOWN,DXGI_FORMAT_UNKNOWN,DXGI_FORMAT_UNKNOWN},   // 0
    /* DXGI_FORMAT DSVFormat                                            */.DSVFormat = mDepthStencilFormat,
    /* DXGI_SAMPLE_DESC SampleDesc{                                     */.SampleDesc = {
    /*      UINT Count;                                                 */      .Count = m4xMsaaState ? 4u : 1u,
    /*      UINT Quality;                                               */      .Quality = m4xMsaaState ? (m4xMsaaQuality - 1) : 0
    /*  }                                                               */},
    /* UINT NodeMask                                                    */.NodeMask = 0,
    /* D3D12_CACHED_PIPELINE_STATE CachedPSO                            */.CachedPSO = {NULL, 0},
    /* D3D12_PIPELINE_STATE_FLAGS Flags                                 */.Flags = D3D12_PIPELINE_STATE_FLAG_NONE
};&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Subdivision 동작 중 Texture 좌표 전달 오류 수정&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Introduction to 3D Game Programming with DirectX 12, Luna, Frank (2016)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>---------개인공부--------/|DirectX (C++)|</category>
      <category>DirectX12</category>
      <category>geometry shader</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/386</guid>
      <comments>https://kyunstudio.tistory.com/386#entry386comment</comments>
      <pubDate>Sat, 25 Jan 2025 21:40:10 +0900</pubDate>
    </item>
    <item>
      <title>[DirectX12] Imgui Render Target 출력</title>
      <link>https://kyunstudio.tistory.com/385</link>
      <description>&lt;h2 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2720&quot; data-origin-height=&quot;1154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZZAYb/btsLVZ1dFHd/LZBoerzohkOkVPL0u3a2FK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZZAYb/btsLVZ1dFHd/LZBoerzohkOkVPL0u3a2FK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZZAYb/btsLVZ1dFHd/LZBoerzohkOkVPL0u3a2FK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZZAYb%2FbtsLVZ1dFHd%2FLZBoerzohkOkVPL0u3a2FK%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;2720&quot; height=&quot;1154&quot; data-origin-width=&quot;2720&quot; data-origin-height=&quot;1154&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;- 렌더 타겟 텍스처 생성&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. 렌더 타겟 텍스처 버퍼 생성&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. 텍스처 버퍼에 대한 RTV 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3. 텍스처 버퍼를 Render Target 상태로 설정 (Barrier)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4. OMSetRenderTargets 설정을 통해 Render Target을 설정 (백버퍼 + 텍스처 버퍼)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5. Draw Scene&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;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;- Shader Resource View 연동&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. RootSignature 설정&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. Descriptor Heap 생성&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 마우스 피킹&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 오브젝트 리스트 구현&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3. 객체 별 파라미터 제어&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4. 애니메이션 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5. 오브젝트 개수에 따른 버그 개선&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://aniz.tistory.com/405&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://aniz.tistory.com/405&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1737482884191&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Direct3D 12: Long Way to Access Data&quot; data-og-description=&quot;https://asawicki.info/news_1754_direct3d_12_long_way_to_access_data데이터에 액세스하는 먼 길쉐이더 스터디 발표자료&amp;nbsp;새로운 그래픽 API인 Direct3D 12와 벌칸이 매우 복잡한 이유 중 하나는 데이터에 액세스하는 &quot; data-og-host=&quot;aniz.tistory.com&quot; data-og-source-url=&quot;https://aniz.tistory.com/405&quot; data-og-url=&quot;https://aniz.tistory.com/405&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cDpZkI/hyX4uoaXYL/kM2n9JKFSvsNW16qI0v9nk/img.png?width=800&amp;amp;height=1199&amp;amp;face=0_0_800_1199,https://scrap.kakaocdn.net/dn/vnIZc/hyX4mjnZ7w/UlnCIYM8xgEcUxATikfDFK/img.png?width=800&amp;amp;height=1199&amp;amp;face=0_0_800_1199,https://scrap.kakaocdn.net/dn/hzL2z/hyX4vABV2o/vFSLN0QUNCtZ1A63SPvKuK/img.png?width=932&amp;amp;height=1397&amp;amp;face=0_0_932_1397&quot;&gt;&lt;a href=&quot;https://aniz.tistory.com/405&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://aniz.tistory.com/405&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cDpZkI/hyX4uoaXYL/kM2n9JKFSvsNW16qI0v9nk/img.png?width=800&amp;amp;height=1199&amp;amp;face=0_0_800_1199,https://scrap.kakaocdn.net/dn/vnIZc/hyX4mjnZ7w/UlnCIYM8xgEcUxATikfDFK/img.png?width=800&amp;amp;height=1199&amp;amp;face=0_0_800_1199,https://scrap.kakaocdn.net/dn/hzL2z/hyX4vABV2o/vFSLN0QUNCtZ1A63SPvKuK/img.png?width=932&amp;amp;height=1397&amp;amp;face=0_0_932_1397');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Direct3D 12: Long Way to Access Data&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;https://asawicki.info/news_1754_direct3d_12_long_way_to_access_data데이터에 액세스하는 먼 길쉐이더 스터디 발표자료&amp;nbsp;새로운 그래픽 API인 Direct3D 12와 벌칸이 매우 복잡한 이유 중 하나는 데이터에 액세스하는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;aniz.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://xtozero.tistory.com/14&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://xtozero.tistory.com/14&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1737482888757&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Bindless Resource&quot; data-og-description=&quot;목차개요Resource BindingDirect3D 11의 경우Direct3D 12의 경우Bindless ResourceDynamic Resource구현 사례이용 사례Ray TracingVisibility Buffer마치며Reference개요Bindless Resource는 셰이더에서 리소스를 사용하는 새로운 &quot; data-og-host=&quot;xtozero.tistory.com&quot; data-og-source-url=&quot;https://xtozero.tistory.com/14&quot; data-og-url=&quot;https://xtozero.tistory.com/14&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/UeFtE/hyX4nihWSD/WPhxUH6hm1BLcKfj2hEsrk/img.png?width=800&amp;amp;height=354&amp;amp;face=0_0_800_354,https://scrap.kakaocdn.net/dn/PvQXj/hyX4u2Myjb/o2elbpREYpKmW7fdkT8zqk/img.png?width=800&amp;amp;height=354&amp;amp;face=0_0_800_354,https://scrap.kakaocdn.net/dn/FjqGG/hyX4lSiboo/0YpP5Ll8Uk30opKcJCHak1/img.jpg?width=1000&amp;amp;height=957&amp;amp;face=0_0_1000_957&quot;&gt;&lt;a href=&quot;https://xtozero.tistory.com/14&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://xtozero.tistory.com/14&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/UeFtE/hyX4nihWSD/WPhxUH6hm1BLcKfj2hEsrk/img.png?width=800&amp;amp;height=354&amp;amp;face=0_0_800_354,https://scrap.kakaocdn.net/dn/PvQXj/hyX4u2Myjb/o2elbpREYpKmW7fdkT8zqk/img.png?width=800&amp;amp;height=354&amp;amp;face=0_0_800_354,https://scrap.kakaocdn.net/dn/FjqGG/hyX4lSiboo/0YpP5Ll8Uk30opKcJCHak1/img.jpg?width=1000&amp;amp;height=957&amp;amp;face=0_0_1000_957');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Bindless Resource&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;목차개요Resource BindingDirect3D 11의 경우Direct3D 12의 경우Bindless ResourceDynamic Resource구현 사례이용 사례Ray TracingVisibility Buffer마치며Reference개요Bindless Resource는 셰이더에서 리소스를 사용하는 새로운&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;xtozero.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>---------개인공부--------/|DirectX (C++)|</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/385</guid>
      <comments>https://kyunstudio.tistory.com/385#entry385comment</comments>
      <pubDate>Wed, 22 Jan 2025 03:10:57 +0900</pubDate>
    </item>
    <item>
      <title>[DirectX] Imgui Texture Image 출력</title>
      <link>https://kyunstudio.tistory.com/384</link>
      <description>&lt;h2 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2753&quot; data-origin-height=&quot;1056&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkwLTV/btsLVzBP00W/zlmPg2rznd9UANQc1HE57K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkwLTV/btsLVzBP00W/zlmPg2rznd9UANQc1HE57K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkwLTV/btsLVzBP00W/zlmPg2rznd9UANQc1HE57K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkwLTV%2FbtsLVzBP00W%2FzlmPg2rznd9UANQc1HE57K%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;2753&quot; height=&quot;1056&quot; data-origin-width=&quot;2753&quot; data-origin-height=&quot;1056&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Imgui::Image를 활용하기 위해서는 D3D12_GPU_DESCRIPTOR_HANDLE를 활용해 Texture가 저장된 위치를 접근하는 방식을 활용해야 함.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;렌더링 된 이미지를 출력하는 방식으로 기능 개선&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples#example-for-directx12-users&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples#example-for-directx12-users&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1737465510489&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Image Loading and Displaying Examples&quot; data-og-description=&quot;Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies - ocornut/imgui&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples#example-for-directx12-users&quot; data-og-url=&quot;https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/d5fgp2/hyX4z33lue/GhSo1JKesHNNL867Vu7cPk/img.jpg?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/huTXP/hyX4p1smKn/FACFQJYDM6xsGrJcBMpe8k/img.jpg?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640&quot;&gt;&lt;a href=&quot;https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples#example-for-directx12-users&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples#example-for-directx12-users&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/d5fgp2/hyX4z33lue/GhSo1JKesHNNL867Vu7cPk/img.jpg?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/huTXP/hyX4p1smKn/FACFQJYDM6xsGrJcBMpe8k/img.jpg?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Image Loading and Displaying Examples&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies - ocornut/imgui&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;imgui_demo.cpp 중 Image 관련 항목&lt;/p&gt;
&lt;pre id=&quot;code_1737465546836&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    if (ImGui::TreeNode(&quot;Images&quot;))
    {
        ImGuiIO&amp;amp; io = ImGui::GetIO();
        ImGui::TextWrapped(
            &quot;Below we are displaying the font texture (which is the only texture we have access to in this demo). &quot;
            &quot;Use the 'ImTextureID' type as storage to pass pointers or identifier to your own texture data. &quot;
            &quot;Hover the texture for a zoomed view!&quot;);

        // Below we are displaying the font texture because it is the only texture we have access to inside the demo!
        // Remember that ImTextureID is just storage for whatever you want it to be. It is essentially a value that
        // will be passed to the rendering backend via the ImDrawCmd structure.
        // If you use one of the default imgui_impl_XXXX.cpp rendering backend, they all have comments at the top
        // of their respective source file to specify what they expect to be stored in ImTextureID, for example:
        // - The imgui_impl_dx11.cpp renderer expect a 'ID3D11ShaderResourceView*' pointer
        // - The imgui_impl_opengl3.cpp renderer expect a GLuint OpenGL texture identifier, etc.
        // More:
        // - If you decided that ImTextureID = MyEngineTexture*, then you can pass your MyEngineTexture* pointers
        //   to ImGui::Image(), and gather width/height through your own functions, etc.
        // - You can use ShowMetricsWindow() to inspect the draw data that are being passed to your renderer,
        //   it will help you debug issues if you are confused about it.
        // - Consider using the lower-level ImDrawList::AddImage() API, via ImGui::GetWindowDrawList()-&amp;gt;AddImage().
        // - Read https://github.com/ocornut/imgui/blob/master/docs/FAQ.md
        // - Read https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples
        ImTextureID my_tex_id = io.Fonts-&amp;gt;TexID;
        float my_tex_w = (float)io.Fonts-&amp;gt;TexWidth;
        float my_tex_h = (float)io.Fonts-&amp;gt;TexHeight;
        {
            static bool use_text_color_for_tint = false;
            ImGui::Checkbox(&quot;Use Text Color for Tint&quot;, &amp;amp;use_text_color_for_tint);
            ImGui::Text(&quot;%.0fx%.0f&quot;, my_tex_w, my_tex_h);
            ImVec2 pos = ImGui::GetCursorScreenPos();
            ImVec2 uv_min = ImVec2(0.0f, 0.0f);                 // Top-left
            ImVec2 uv_max = ImVec2(1.0f, 1.0f);                 // Lower-right
            ImVec4 tint_col = use_text_color_for_tint ? ImGui::GetStyleColorVec4(ImGuiCol_Text) : ImVec4(1.0f, 1.0f, 1.0f, 1.0f); // No tint
            ImVec4 border_col = ImGui::GetStyleColorVec4(ImGuiCol_Border);
            ImGui::Image(my_tex_id, ImVec2(my_tex_w, my_tex_h), uv_min, uv_max, tint_col, border_col);
            if (ImGui::BeginItemTooltip())
            {
                float region_sz = 32.0f;
                float region_x = io.MousePos.x - pos.x - region_sz * 0.5f;
                float region_y = io.MousePos.y - pos.y - region_sz * 0.5f;
                float zoom = 4.0f;
                if (region_x &amp;lt; 0.0f) { region_x = 0.0f; }
                else if (region_x &amp;gt; my_tex_w - region_sz) { region_x = my_tex_w - region_sz; }
                if (region_y &amp;lt; 0.0f) { region_y = 0.0f; }
                else if (region_y &amp;gt; my_tex_h - region_sz) { region_y = my_tex_h - region_sz; }
                ImGui::Text(&quot;Min: (%.2f, %.2f)&quot;, region_x, region_y);
                ImGui::Text(&quot;Max: (%.2f, %.2f)&quot;, region_x + region_sz, region_y + region_sz);
                ImVec2 uv0 = ImVec2((region_x) / my_tex_w, (region_y) / my_tex_h);
                ImVec2 uv1 = ImVec2((region_x + region_sz) / my_tex_w, (region_y + region_sz) / my_tex_h);
                ImGui::Image(my_tex_id, ImVec2(region_sz * zoom, region_sz * zoom), uv0, uv1, tint_col, border_col);
                ImGui::EndTooltip();
            }
        }

        IMGUI_DEMO_MARKER(&quot;Widgets/Images/Textured buttons&quot;);
        ImGui::TextWrapped(&quot;And now some textured buttons..&quot;);
        static int pressed_count = 0;
        for (int i = 0; i &amp;lt; 8; i++)
        {
            // UV coordinates are often (0.0f, 0.0f) and (1.0f, 1.0f) to display an entire textures.
            // Here are trying to display only a 32x32 pixels area of the texture, hence the UV computation.
            // Read about UV coordinates here: https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples
            ImGui::PushID(i);
            if (i &amp;gt; 0)
                ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(i - 1.0f, i - 1.0f));
            ImVec2 size = ImVec2(32.0f, 32.0f);                         // Size of the image we want to make visible
            ImVec2 uv0 = ImVec2(0.0f, 0.0f);                            // UV coordinates for lower-left
            ImVec2 uv1 = ImVec2(32.0f / my_tex_w, 32.0f / my_tex_h);    // UV coordinates for (32,32) in our texture
            ImVec4 bg_col = ImVec4(0.0f, 0.0f, 0.0f, 1.0f);             // Black background
            ImVec4 tint_col = ImVec4(1.0f, 1.0f, 1.0f, 1.0f);           // No tint
            if (ImGui::ImageButton(&quot;&quot;, my_tex_id, size, uv0, uv1, bg_col, tint_col))
                pressed_count += 1;
            if (i &amp;gt; 0)
                ImGui::PopStyleVar();
            ImGui::PopID();
            ImGui::SameLine();
        }
        ImGui::NewLine();
        ImGui::Text(&quot;Pressed %d times.&quot;, pressed_count);
        ImGui::TreePop();
    }&lt;/code&gt;&lt;/pre&gt;</description>
      <category>---------개인공부--------/|DirectX (C++)|</category>
      <category>directx</category>
      <category>DX12</category>
      <category>image</category>
      <category>ImGui</category>
      <category>Texture</category>
      <category>Viewport</category>
      <category>뷰포트</category>
      <category>이미지</category>
      <category>텍스처</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/384</guid>
      <comments>https://kyunstudio.tistory.com/384#entry384comment</comments>
      <pubDate>Tue, 21 Jan 2025 22:19:50 +0900</pubDate>
    </item>
    <item>
      <title>[DirectX] 3D 엔진 개발 현황</title>
      <link>https://kyunstudio.tistory.com/383</link>
      <description>&lt;h2 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;- PSO List&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;1. Opaque&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;2. Mirror (Stencil)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;3. Reflected&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csQaVH/btsLUvMRDJm/7CN7H8e8CuhgnwsMymDoqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csQaVH/btsLUvMRDJm/7CN7H8e8CuhgnwsMymDoqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csQaVH/btsLUvMRDJm/7CN7H8e8CuhgnwsMymDoqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsQaVH%2FbtsLUvMRDJm%2F7CN7H8e8CuhgnwsMymDoqK%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;1280&quot; height=&quot;853&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;4. AlphaTest&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1351&quot; data-origin-height=&quot;896&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c48L2H/btsLTPE5xPb/OADwt7OsOCQbOhNuLEyVeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c48L2H/btsLTPE5xPb/OADwt7OsOCQbOhNuLEyVeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c48L2H/btsLTPE5xPb/OADwt7OsOCQbOhNuLEyVeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc48L2H%2FbtsLTPE5xPb%2FOADwt7OsOCQbOhNuLEyVeK%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;1351&quot; height=&quot;896&quot; data-origin-width=&quot;1351&quot; data-origin-height=&quot;896&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;5. Transparent&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1343&quot; data-origin-height=&quot;899&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZSWfu/btsLTFW3Yeo/9zxCFIiBTKTmIGrmF8sIbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZSWfu/btsLTFW3Yeo/9zxCFIiBTKTmIGrmF8sIbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZSWfu/btsLTFW3Yeo/9zxCFIiBTKTmIGrmF8sIbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZSWfu%2FbtsLTFW3Yeo%2F9zxCFIiBTKTmIGrmF8sIbk%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;1343&quot; height=&quot;899&quot; data-origin-width=&quot;1343&quot; data-origin-height=&quot;899&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;6. Shadow&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;851&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bh9S52/btsLStpotbY/nDzRMlK4s87Etu0tpNkP50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bh9S52/btsLStpotbY/nDzRMlK4s87Etu0tpNkP50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bh9S52/btsLStpotbY/nDzRMlK4s87Etu0tpNkP50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbh9S52%2FbtsLStpotbY%2FnDzRMlK4s87Etu0tpNkP50%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;1280&quot; height=&quot;851&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;851&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;- Texture&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;896&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dkDMAY/btsLSrd4TSC/q8iIqvEUUjAAknEesfIKyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dkDMAY/btsLSrd4TSC/q8iIqvEUUjAAknEesfIKyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dkDMAY/btsLSrd4TSC/q8iIqvEUUjAAknEesfIKyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkDMAY%2FbtsLSrd4TSC%2Fq8iIqvEUUjAAknEesfIKyK%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;1347&quot; height=&quot;896&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;896&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;- Imgui&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Dock&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2545&quot; data-origin-height=&quot;1167&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JoBoZ/btsLUsijePT/Xk2gUGxDTxyitVlcu7NccK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JoBoZ/btsLUsijePT/Xk2gUGxDTxyitVlcu7NccK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JoBoZ/btsLUsijePT/Xk2gUGxDTxyitVlcu7NccK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJoBoZ%2FbtsLUsijePT%2FXk2gUGxDTxyitVlcu7NccK%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;2545&quot; height=&quot;1167&quot; data-origin-width=&quot;2545&quot; data-origin-height=&quot;1167&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;TBD&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 마우스 피킹&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 오브젝트 리스트 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.1. 객체별 파라미터 제어를 위한 ImGui 제어판 제작&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. ImGui Viewport 구현&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 오브젝트 수 증가로 인한 버그 개선&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 애니메이션 추가&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Introduction&amp;nbsp;to&amp;nbsp;3D&amp;nbsp;Game&amp;nbsp;Programming&amp;nbsp;with&amp;nbsp;DirectX&amp;nbsp;12&lt;/p&gt;</description>
      <category>---------개인공부--------/|DirectX (C++)|</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/383</guid>
      <comments>https://kyunstudio.tistory.com/383#entry383comment</comments>
      <pubDate>Mon, 20 Jan 2025 23:12:13 +0900</pubDate>
    </item>
    <item>
      <title>[C++] 출력 동작 및 관련 class 분석 (class 분석, output formatting, operator&amp;lt;&amp;lt;)</title>
      <link>https://kyunstudio.tistory.com/379</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1. 출력&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1.1. class 분석&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;class 관련 자료 확인 검색 시 다음의 자료를 볼 수 있었다. 현재 C++20 버전의 구조를 보기 편하게 정리된 자료입니다.&lt;br /&gt;(참고:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www3.ntu.edu.sg/home/ehchua/programming/cpp/cp10_IO.html&quot;&gt;https://www3.ntu.edu.sg/home/ehchua/programming/cpp/cp10_IO.html&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qsE0v/btsJROu8KIQ/6Hel6rBPKZufP7S2Tj0fZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qsE0v/btsJROu8KIQ/6Hel6rBPKZufP7S2Tj0fZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qsE0v/btsJROu8KIQ/6Hel6rBPKZufP7S2Tj0fZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqsE0v%2FbtsJROu8KIQ%2F6Hel6rBPKZufP7S2Tj0fZK%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;786&quot; height=&quot;640&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1.1.1. Iosb&lt;/h4&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ios_base의 base class&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1006&quot; data-origin-height=&quot;631&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4KT46/btsJTmjBm3o/mPFrZSjMQFfjx3A6XpDkd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4KT46/btsJTmjBm3o/mPFrZSjMQFfjx3A6XpDkd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4KT46/btsJTmjBm3o/mPFrZSjMQFfjx3A6XpDkd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4KT46%2FbtsJTmjBm3o%2FmPFrZSjMQFfjx3A6XpDkd1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1006&quot; height=&quot;631&quot; data-origin-width=&quot;1006&quot; data-origin-height=&quot;631&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1.1.2. ios_base&lt;/h4&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ios를 위한 base class&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;132&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djHj83/btsJTBAVidi/jkcSx2KRm9pebGTzu8shpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djHj83/btsJTBAVidi/jkcSx2KRm9pebGTzu8shpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djHj83/btsJTBAVidi/jkcSx2KRm9pebGTzu8shpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjHj83%2FbtsJTBAVidi%2FjkcSx2KRm9pebGTzu8shpk%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;755&quot; height=&quot;132&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;132&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 멤버변수&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;290&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bl26XM/btsJStjuyrL/4EMH8kJb6J3ewMKyq40OkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bl26XM/btsJStjuyrL/4EMH8kJb6J3ewMKyq40OkK/img.png&quot; data-alt=&quot;class ios_base&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bl26XM/btsJStjuyrL/4EMH8kJb6J3ewMKyq40OkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbl26XM%2FbtsJStjuyrL%2F4EMH8kJb6J3ewMKyq40OkK%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;503&quot; height=&quot;290&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;290&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;class ios_base&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1.1.3. _Locbase&lt;/h4&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;locale클래스 의 base class&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;536&quot; data-origin-height=&quot;215&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rObMD/btsJREsA65P/kp61O57l5WbAp7VYONOUCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rObMD/btsJREsA65P/kp61O57l5WbAp7VYONOUCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rObMD/btsJREsA65P/kp61O57l5WbAp7VYONOUCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrObMD%2FbtsJREsA65P%2Fkp61O57l5WbAp7VYONOUCK%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;536&quot; height=&quot;215&quot; data-origin-width=&quot;536&quot; data-origin-height=&quot;215&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1.1.4. locale&lt;/h4&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;문자의 출력 방식 등 나라에 따라 달라지는 설정을 저장하기 위한 class&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 멤버변수&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;374&quot; data-origin-height=&quot;22&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckMugZ/btsJSqf1tnf/Qe57vnfjm6vCiMxjPAoLDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckMugZ/btsJSqf1tnf/Qe57vnfjm6vCiMxjPAoLDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckMugZ/btsJSqf1tnf/Qe57vnfjm6vCiMxjPAoLDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckMugZ%2FbtsJSqf1tnf%2FQe57vnfjm6vCiMxjPAoLDk%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;374&quot; height=&quot;22&quot; data-origin-width=&quot;374&quot; data-origin-height=&quot;22&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 내부 추가 class&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;306&quot; data-origin-height=&quot;156&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2PFUT/btsJR1gNIK1/nW7yF7pKGpV5xPiyCuqLK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2PFUT/btsJR1gNIK1/nW7yF7pKGpV5xPiyCuqLK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2PFUT/btsJR1gNIK1/nW7yF7pKGpV5xPiyCuqLK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2PFUT%2FbtsJR1gNIK1%2FnW7yF7pKGpV5xPiyCuqLK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;306&quot; height=&quot;156&quot; data-origin-width=&quot;306&quot; data-origin-height=&quot;156&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(1) id: 멤버 클래스는 locale의 패싯을 조회하기 위한 인덱스로 사용되는 고유한 패싯 ID 제공을 위한 클래스&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(identifier stamp, unique for each distinct kind of facet)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;318&quot; data-origin-height=&quot;74&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJp58q/btsJRCuL2rw/ssiOwmpUi9vFTjmeqYwzEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJp58q/btsJRCuL2rw/ssiOwmpUi9vFTjmeqYwzEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJp58q/btsJRCuL2rw/ssiOwmpUi9vFTjmeqYwzEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJp58q%2FbtsJRCuL2rw%2FssiOwmpUi9vFTjmeqYwzEK%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;318&quot; height=&quot;74&quot; data-origin-width=&quot;318&quot; data-origin-height=&quot;74&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(2) _Locimp: 참조 카운트 된 locale의 실제 구현이 이뤄지는 클래스 (reference-counted actual implementation of a locale)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kHQkA/btsJQ5K1HvY/37AspJmGKfYxe3Xo4os0RK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kHQkA/btsJQ5K1HvY/37AspJmGKfYxe3Xo4os0RK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kHQkA/btsJQ5K1HvY/37AspJmGKfYxe3Xo4os0RK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkHQkA%2FbtsJQ5K1HvY%2F37AspJmGKfYxe3Xo4os0RK%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;402&quot; height=&quot;120&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(3) facet: locale이 구현하는 패싯에 대한 포인터를 단일 인덱스 컨테이너에 저장할 수 있도록 지원하는 클래스&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;내부에 facet 관련 구조체로 자신을 가리키는 포인터와 참조 카운터를 갖고 있는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;205&quot; data-origin-height=&quot;34&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sagrJ/btsJTgKx2fL/qgyWYWYNQ1blVJODebRAp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sagrJ/btsJTgKx2fL/qgyWYWYNQ1blVJODebRAp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sagrJ/btsJTgKx2fL/qgyWYWYNQ1blVJODebRAp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsagrJ%2FbtsJTgKx2fL%2FqgyWYWYNQ1blVJODebRAp1%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;205&quot; height=&quot;34&quot; data-origin-width=&quot;205&quot; data-origin-height=&quot;34&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;255&quot; data-origin-height=&quot;132&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7yZ7X/btsJTgKx2fN/eOPmyal3oKCSPrtkPpq9Ck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7yZ7X/btsJTgKx2fN/eOPmyal3oKCSPrtkPpq9Ck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7yZ7X/btsJTgKx2fN/eOPmyal3oKCSPrtkPpq9Ck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7yZ7X%2FbtsJTgKx2fN%2FeOPmyal3oKCSPrtkPpq9Ck%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;255&quot; height=&quot;132&quot; data-origin-width=&quot;255&quot; data-origin-height=&quot;132&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;356&quot; data-origin-height=&quot;34&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnI3GU/btsJTfES2cU/LE0tqLEQunYa7ZFrE64ssK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnI3GU/btsJTfES2cU/LE0tqLEQunYa7ZFrE64ssK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnI3GU/btsJTfES2cU/LE0tqLEQunYa7ZFrE64ssK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnI3GU%2FbtsJTfES2cU%2FLE0tqLEQunYa7ZFrE64ssK%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;356&quot; height=&quot;34&quot; data-origin-width=&quot;356&quot; data-origin-height=&quot;34&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(4) _Ptr: 로케일 구현 객체에 대한 포인터&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1.1.3. basic_ios&lt;/h4&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;basic_istream/basic_ostream을 위한 base class&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;46&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZd1kS/btsJSESGzCJ/Ml8trKNlVkDc8OBUFsBcP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZd1kS/btsJSESGzCJ/Ml8trKNlVkDc8OBUFsBcP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZd1kS/btsJSESGzCJ/Ml8trKNlVkDc8OBUFsBcP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZd1kS%2FbtsJSESGzCJ%2FMl8trKNlVkDc8OBUFsBcP0%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;772&quot; height=&quot;46&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;46&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 멤버 변수: basic_ios는 ostream과 stream buffer를 멤버변수로 갖고 있는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;85&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQSKT7/btsJSnjlwS9/adGBqsjEn86LFDJrqjmok0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQSKT7/btsJSnjlwS9/adGBqsjEn86LFDJrqjmok0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQSKT7/btsJSnjlwS9/adGBqsjEn86LFDJrqjmok0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQSKT7%2FbtsJSnjlwS9%2FadGBqsjEn86LFDJrqjmok0%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;499&quot; height=&quot;85&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;85&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;46&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ol6eo/btsJTelD9lJ/CZpEdW57iHQyI8XOKUqzZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ol6eo/btsJTelD9lJ/CZpEdW57iHQyI8XOKUqzZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ol6eo/btsJTelD9lJ/CZpEdW57iHQyI8XOKUqzZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fol6eo%2FbtsJTelD9lJ%2FCZpEdW57iHQyI8XOKUqzZK%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;504&quot; height=&quot;46&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;46&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;1.1.4. ostream&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;45&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chJjuj/btsJSFxenOT/OV8MaiGXhJaEslpbEjfabk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chJjuj/btsJSFxenOT/OV8MaiGXhJaEslpbEjfabk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chJjuj/btsJSFxenOT/OV8MaiGXhJaEslpbEjfabk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchJjuj%2FbtsJSFxenOT%2FOV8MaiGXhJaEslpbEjfabk%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;1022&quot; height=&quot;45&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;45&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 멤버변수 정리&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(1) ios_base&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;168&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AcbCT/btsJSpnR4rf/EgMhXtj4dxTcHPglJbJoXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AcbCT/btsJSpnR4rf/EgMhXtj4dxTcHPglJbJoXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AcbCT/btsJSpnR4rf/EgMhXtj4dxTcHPglJbJoXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAcbCT%2FbtsJSpnR4rf%2FEgMhXtj4dxTcHPglJbJoXK%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;684&quot; height=&quot;168&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;168&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(2) basic_ios&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;85&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQSKT7/btsJSnjlwS9/adGBqsjEn86LFDJrqjmok0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQSKT7/btsJSnjlwS9/adGBqsjEn86LFDJrqjmok0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQSKT7/btsJSnjlwS9/adGBqsjEn86LFDJrqjmok0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQSKT7%2FbtsJSnjlwS9%2FadGBqsjEn86LFDJrqjmok0%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;499&quot; height=&quot;85&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;85&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(3) ostream&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;class 내 멤버변수 미포함&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1.2. Output formatting&lt;/h3&gt;
&lt;pre id=&quot;code_1727784224850&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;iostream&amp;gt;
#include&amp;lt;iomanip&amp;gt;
using namespace std;

int main()
{
	// 1. 상태 저장 및 초기화
	std::ios state(NULL);
	state.copyfmt(std::cout);
	std::cout.copyfmt(std::ios(NULL));

	// 2. showpos/noshowpos
	// int
	cout &amp;lt;&amp;lt; showpos &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;				        // +12
	cout &amp;lt;&amp;lt; noshowpos &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;					// 12
	// float
	cout &amp;lt;&amp;lt; showpos &amp;lt;&amp;lt; 12.3 &amp;lt;&amp;lt; endl;					// +12.3
	cout &amp;lt;&amp;lt; noshowpos &amp;lt;&amp;lt; 12.3 &amp;lt;&amp;lt; endl;					// 12.3
	// string  
	cout &amp;lt;&amp;lt; showpos &amp;lt;&amp;lt; &quot;12&quot; &amp;lt;&amp;lt; endl;					// 12
	cout &amp;lt;&amp;lt; noshowpos &amp;lt;&amp;lt; &quot;12&quot; &amp;lt;&amp;lt; endl;					// 12

	// 3. dec/hex/oct
	std::cout.copyfmt(std::ios(NULL));
	// int
	cout &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;							// c  (c = 12)
	cout &amp;lt;&amp;lt; dec &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;							// 12
	cout &amp;lt;&amp;lt; oct &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;							// 14 (8 + 4 = 12)
	// float
	cout &amp;lt;&amp;lt; hexfloat &amp;lt;&amp;lt; 12.3 &amp;lt;&amp;lt; endl;					// 0x1.899999999999ap+3
	// string
	cout &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; &quot;12&quot; &amp;lt;&amp;lt; endl;						// 12
	cout &amp;lt;&amp;lt; dec &amp;lt;&amp;lt; &quot;12&quot; &amp;lt;&amp;lt; endl;						// 12
	cout &amp;lt;&amp;lt; oct &amp;lt;&amp;lt; &quot;12&quot; &amp;lt;&amp;lt; endl;						// 12

	// 4. uppercase/nouppercase
	std::cout.copyfmt(std::ios(NULL));
	// int
	cout &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; uppercase &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;				// C
	cout &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; nouppercase &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;			// c
	// float
	cout &amp;lt;&amp;lt; hexfloat &amp;lt;&amp;lt; uppercase &amp;lt;&amp;lt; 12.3 &amp;lt;&amp;lt; endl;		// 0X1.899999999999AP+3
	cout &amp;lt;&amp;lt; hexfloat &amp;lt;&amp;lt; nouppercase &amp;lt;&amp;lt; 12.3 &amp;lt;&amp;lt; endl;	// 0x1.899999999999ap+3
	// string
	cout &amp;lt;&amp;lt; uppercase &amp;lt;&amp;lt; &quot;abcd&quot; &amp;lt;&amp;lt; endl;				// abcd
	cout &amp;lt;&amp;lt; nouppercase &amp;lt;&amp;lt; &quot;abcd&quot; &amp;lt;&amp;lt; endl;				// abcd

	// 5. showbase/noshowbase
	std::cout.copyfmt(std::ios(NULL));
	// int (hex)
	cout &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; showbase &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;				// 0xb
	cout &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; noshowbase &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;			// b
	// int (dec)
	cout &amp;lt;&amp;lt; dec &amp;lt;&amp;lt; showbase &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;				// 12
	cout &amp;lt;&amp;lt; dec &amp;lt;&amp;lt; noshowbase &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;			// 12
	// int (oct)
	cout &amp;lt;&amp;lt; oct &amp;lt;&amp;lt; showbase &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;				// 014
	cout &amp;lt;&amp;lt; oct &amp;lt;&amp;lt; noshowbase &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;			// 14

	// 6. setw()
	std::cout.copyfmt(std::ios(NULL));
	// int
	cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;						// __12
	cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; 12345 &amp;lt;&amp;lt; endl;					// 12345
	// float
	cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; 12.345 &amp;lt;&amp;lt; endl;					// 12.345
	cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; 12.3 &amp;lt;&amp;lt; endl;					// 12.3
	// string
	cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; &quot;12&quot; &amp;lt;&amp;lt; endl;					// __12
	cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; &quot;12345&quot; &amp;lt;&amp;lt; endl;					// 12345

	// 7. setfill()
	std::cout.copyfmt(std::ios(NULL));
	// int
	cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; setfill('*') &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;		// **12
	cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; setfill('*') &amp;lt;&amp;lt; 12345 &amp;lt;&amp;lt; endl;	// 12345
	cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;						// __12
	// float
	cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; setfill('*') &amp;lt;&amp;lt; 12.345 &amp;lt;&amp;lt; endl;	// 12.345
	cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; setfill('*') &amp;lt;&amp;lt; 12.3 &amp;lt;&amp;lt; endl;	// 12.3
	// string
	cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; setfill('*') &amp;lt;&amp;lt; &quot;12&quot; &amp;lt;&amp;lt; endl;	// **12
	cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; setfill('*') &amp;lt;&amp;lt; &quot;12345&quot; &amp;lt;&amp;lt; endl;	// 12345

	// 8. left/right/internal
	std::cout.copyfmt(std::ios(NULL));
	// int
	cout &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; showbase &amp;lt;&amp;lt; showpos &amp;lt;&amp;lt; left;
	cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;						// 0xc
	cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12345 &amp;lt;&amp;lt; endl;					// 0x3039
	cout &amp;lt;&amp;lt; dec;
	cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;						// +12
	cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12345 &amp;lt;&amp;lt; endl;					// +12345
	cout &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; right;
	cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;						// __0xc
	cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12345 &amp;lt;&amp;lt; endl;					// 0x3039
	cout &amp;lt;&amp;lt; dec;		
	cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;						// __+12
	cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12345 &amp;lt;&amp;lt; endl;					// +12345
	cout &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; internal;
	cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;						// 0x__c
	cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12345 &amp;lt;&amp;lt; endl;					// 0x3039
	cout &amp;lt;&amp;lt; dec;
	cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;						// +__12
	cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12345 &amp;lt;&amp;lt; endl;					// +12345
	// float
	cout &amp;lt;&amp;lt; showbase &amp;lt;&amp;lt; showpos &amp;lt;&amp;lt; left;
	cout &amp;lt;&amp;lt; setw(6) &amp;lt;&amp;lt; 1.2 &amp;lt;&amp;lt; endl;						// +1.2
	cout &amp;lt;&amp;lt; setw(6) &amp;lt;&amp;lt; 1. &amp;lt;&amp;lt; endl;						// +1
	cout &amp;lt;&amp;lt; setw(6) &amp;lt;&amp;lt; 1.2345 &amp;lt;&amp;lt; endl;					// +1.2345
	cout &amp;lt;&amp;lt; right;
	cout &amp;lt;&amp;lt; setw(6) &amp;lt;&amp;lt; 1.2 &amp;lt;&amp;lt; endl;						// __+1.2
	cout &amp;lt;&amp;lt; setw(6) &amp;lt;&amp;lt; 1. &amp;lt;&amp;lt; endl;						// ____+1
	cout &amp;lt;&amp;lt; setw(6) &amp;lt;&amp;lt; 1.2345 &amp;lt;&amp;lt; endl;					// +1.2345
	cout &amp;lt;&amp;lt; internal;
	cout &amp;lt;&amp;lt; setw(6) &amp;lt;&amp;lt; 1.2 &amp;lt;&amp;lt; endl;						// +__1.2
	cout &amp;lt;&amp;lt; setw(6) &amp;lt;&amp;lt; 1. &amp;lt;&amp;lt; endl;						// +____1
	cout &amp;lt;&amp;lt; setw(6) &amp;lt;&amp;lt; 1.2345 &amp;lt;&amp;lt; endl;					// +1.2345
	// string
	cout &amp;lt;&amp;lt; left;
	cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; &quot;12&quot; &amp;lt;&amp;lt; endl;					// 12
	cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; &quot;123456&quot; &amp;lt;&amp;lt; endl;				// 123456
	cout &amp;lt;&amp;lt; right;
	cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; &quot;12&quot; &amp;lt;&amp;lt; endl;					// ___12
	cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; &quot;123456&quot; &amp;lt;&amp;lt; endl;				// 123456
	cout &amp;lt;&amp;lt; internal;
	cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; &quot;12&quot; &amp;lt;&amp;lt; endl;					// ___12
	cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; &quot;123456&quot; &amp;lt;&amp;lt; endl;				// 123456

	// 9. setprecision
	std::cout.copyfmt(std::ios(NULL));
	// float
	cout &amp;lt;&amp;lt; setprecision(6) &amp;lt;&amp;lt; 12.345678 &amp;lt;&amp;lt; endl;		// 12.3457
	cout &amp;lt;&amp;lt; setprecision(6) &amp;lt;&amp;lt; 12.3456 &amp;lt;&amp;lt; endl;			// 12.3456
	cout &amp;lt;&amp;lt; setprecision(6) &amp;lt;&amp;lt; 12.345 &amp;lt;&amp;lt; endl;			// 12.345

	// 10. showpoint/noshowpoint
	std::cout.copyfmt(std::ios(NULL));
	// int
	cout &amp;lt;&amp;lt; showpoint &amp;lt;&amp;lt; 123 &amp;lt;&amp;lt; endl;					// 123
	cout &amp;lt;&amp;lt; noshowpoint &amp;lt;&amp;lt; 123 &amp;lt;&amp;lt; endl;					// 123
	// float
	cout &amp;lt;&amp;lt; showpoint &amp;lt;&amp;lt; 12.3 &amp;lt;&amp;lt; endl;					// 12.3000
	cout &amp;lt;&amp;lt; noshowpoint &amp;lt;&amp;lt; 12.3 &amp;lt;&amp;lt; endl;				// 12.3
	// string
	cout &amp;lt;&amp;lt; showpoint &amp;lt;&amp;lt; &quot;123&quot; &amp;lt;&amp;lt; endl;					// 123
	cout &amp;lt;&amp;lt; noshowpoint &amp;lt;&amp;lt; &quot;123&quot; &amp;lt;&amp;lt; endl;				// 123

	// 11. scienantific/fixed
	std::cout.copyfmt(std::ios(NULL));
	// float
	cout &amp;lt;&amp;lt; 12.34 &amp;lt;&amp;lt; endl;								// 12.34
	cout &amp;lt;&amp;lt; scientific &amp;lt;&amp;lt; 12.34 &amp;lt;&amp;lt; endl;				// 1.234000e+01
	cout &amp;lt;&amp;lt; fixed &amp;lt;&amp;lt; 12.34 &amp;lt;&amp;lt; endl;						// 12.340000
	cout &amp;lt;&amp;lt; fixed &amp;lt;&amp;lt; setprecision(4) &amp;lt;&amp;lt; 12.34 &amp;lt;&amp;lt; endl;	// 12.3400

	// 12. boolalpha/noboolalpha
	std::cout.copyfmt(std::ios(NULL));
	// bool
	cout &amp;lt;&amp;lt; boolalpha &amp;lt;&amp;lt; true &amp;lt;&amp;lt; endl;					// true
	cout &amp;lt;&amp;lt; noboolalpha &amp;lt;&amp;lt; true &amp;lt;&amp;lt; endl;				// 1
	cout &amp;lt;&amp;lt; boolalpha &amp;lt;&amp;lt; false &amp;lt;&amp;lt; endl;					// false
	cout &amp;lt;&amp;lt; noboolalpha &amp;lt;&amp;lt; false &amp;lt;&amp;lt; endl;				// 0

	std::cout.copyfmt(std::ios(NULL));
	cout.setf(ios_base::hex);
	cout &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;								// 12
	cout.setf(ios_base::hex, ios_base::basefield);
	cout &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;								// c
	

	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1.2.1. manipulator&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;'ostream'의 부모클래스인 '&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;ios_base' 내 fmtflags를 설정하여 출력 방식을 제어한다.&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;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;이때, fmtflags는 int형으로 bitmask 방식으로 동작이 이뤄진다. (mask에 대한 동작 방식은 '_Iosb' class 내에 정의되어있다.)&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1.2.1.1. 상태 저장 및 초기화&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;417&quot; data-origin-height=&quot;256&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SRL1F/btsJTA249tZ/uKAICjYgfApzZgyXQtgxOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SRL1F/btsJTA249tZ/uKAICjYgfApzZgyXQtgxOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SRL1F/btsJTA249tZ/uKAICjYgfApzZgyXQtgxOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSRL1F%2FbtsJTA249tZ%2FuKAICjYgfApzZgyXQtgxOk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;417&quot; height=&quot;256&quot; data-origin-width=&quot;417&quot; data-origin-height=&quot;256&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;상태 저장: ios_base에 설정된 옵션을 가져온다. (참고:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://cplusplus.com/reference/ios/ios/copyfmt/)&quot;&gt;https://cplusplus.com/reference/ios/ios/copyfmt/)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;542&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yoHCy/btsJRrUBheq/FiBN8vcNEuLE5BvKAyFrY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yoHCy/btsJRrUBheq/FiBN8vcNEuLE5BvKAyFrY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yoHCy/btsJRrUBheq/FiBN8vcNEuLE5BvKAyFrY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyoHCy%2FbtsJRrUBheq%2FFiBN8vcNEuLE5BvKAyFrY0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;542&quot; height=&quot;400&quot; data-origin-width=&quot;542&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;초기화: copyfmt을 응용하여 초기화 ios 값 복사를 통해 초기화를 적용한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;197&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGMgjt/btsJRCuL2rB/gu2s7ygrPdNAqnZ8nZqU5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGMgjt/btsJRCuL2rB/gu2s7ygrPdNAqnZ8nZqU5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGMgjt/btsJRCuL2rB/gu2s7ygrPdNAqnZ8nZqU5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGMgjt%2FbtsJRCuL2rB%2Fgu2s7ygrPdNAqnZ8nZqU5k%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;412&quot; height=&quot;197&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;197&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1727782238905&quot; class=&quot;cpp&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;// 상태 저장
std::ios state(NULL);
state.copyfmt(std::cout);

// 초기화
std::cout.copyfmt(std::ios(NULL));&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;1.2.1.2. showpos/noshowpos&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;'ios_base' 내 멤버변수 중 '&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;_Fmtfl'에 flag 정보 추가&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;(showpos = 0x0020)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;showpos: 양수에&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;부호를 표시한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;noshowpos: 양수에 부호를 표시하지 않는다.&lt;/p&gt;
&lt;pre id=&quot;code_1727782238907&quot; class=&quot;cpp&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;// int
cout &amp;lt;&amp;lt; showpos &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;		// +12
cout &amp;lt;&amp;lt; noshowpos &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;	// 12
// float
cout &amp;lt;&amp;lt; showpos &amp;lt;&amp;lt; 12.3 &amp;lt;&amp;lt; endl;	// +12.3
cout &amp;lt;&amp;lt; noshowpos &amp;lt;&amp;lt; 12.3 &amp;lt;&amp;lt; endl;	// 12.3
// string  
cout &amp;lt;&amp;lt; showpos &amp;lt;&amp;lt; &quot;12&quot; &amp;lt;&amp;lt; endl;	// 12
cout &amp;lt;&amp;lt; noshowpos &amp;lt;&amp;lt; &quot;12&quot; &amp;lt;&amp;lt; endl;	// 12&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;88&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csCxua/btsJR0IYVwa/FQEKFYGFNhXHKMi2iONnuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csCxua/btsJR0IYVwa/FQEKFYGFNhXHKMi2iONnuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csCxua/btsJR0IYVwa/FQEKFYGFNhXHKMi2iONnuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsCxua%2FbtsJR0IYVwa%2FFQEKFYGFNhXHKMi2iONnuK%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;761&quot; height=&quot;88&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;88&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;83&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bD7co9/btsJRX6y5fh/YJQxajHOUIGRp2AucDTom1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bD7co9/btsJRX6y5fh/YJQxajHOUIGRp2AucDTom1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bD7co9/btsJRX6y5fh/YJQxajHOUIGRp2AucDTom1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbD7co9%2FbtsJRX6y5fh%2FYJQxajHOUIGRp2AucDTom1%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;798&quot; height=&quot;83&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;83&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;1.2.1.3. dec/hex/oct&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;'ios_base' 내 멤버변수 중 '&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;_Fmtfl'에 flag 정보 추가&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;(dec/oct/hex = 0x0200/&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;0x0400&lt;/span&gt;/&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;0x0800&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;dec: 10진수 표기법을 사용한다.&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&gt;hex: 16진수 표기법을 사용한다.&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&gt;oct: 8진수 표기법을 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1727782238909&quot; class=&quot;cpp&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;// int
cout &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;		// c  (c = 12)
cout &amp;lt;&amp;lt; dec &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;		// 12
cout &amp;lt;&amp;lt; oct &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;		// 14 (8 + 4 = 12)
// float
cout &amp;lt;&amp;lt; hexfloat &amp;lt;&amp;lt; 12.3 &amp;lt;&amp;lt; endl;	// 0x1.899999999999ap+3
// string
cout &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; &quot;12&quot; &amp;lt;&amp;lt; endl;		// 12
cout &amp;lt;&amp;lt; dec &amp;lt;&amp;lt; &quot;12&quot; &amp;lt;&amp;lt; endl;		// 12
cout &amp;lt;&amp;lt; oct &amp;lt;&amp;lt; &quot;12&quot; &amp;lt;&amp;lt; endl;		// 12&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;basefield: setf 동작 시 bitmask를 위한 구간 지정 (basefield = 0x0x0E00 //dec | oct | hex)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;88&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LjYmW/btsJTezclph/l9CKOeBCfEk3epDrnoYeLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LjYmW/btsJTezclph/l9CKOeBCfEk3epDrnoYeLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LjYmW/btsJTezclph/l9CKOeBCfEk3epDrnoYeLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLjYmW%2FbtsJTezclph%2Fl9CKOeBCfEk3epDrnoYeLk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;816&quot; height=&quot;88&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;88&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;1.2.1.4. uppercase/nouppercase&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;'ios_base' 내 멤버변수 중 '&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;_Fmtfl'에 flag 정보 추가 (uppercase = 0x0004)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;uppercase: 16진수 출력 시 대문자로 출력한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;nouppercase: 16진수 출력 시 소문자로 출력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1727782238911&quot; class=&quot;cpp&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;// int
cout &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; uppercase &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;			// C
cout &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; nouppercase &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;		// c
// float
cout &amp;lt;&amp;lt; hexfloat &amp;lt;&amp;lt; uppercase &amp;lt;&amp;lt; 12.3 &amp;lt;&amp;lt; endl;		// 0X1.899999999999AP+3
cout &amp;lt;&amp;lt; hexfloat &amp;lt;&amp;lt; nouppercase &amp;lt;&amp;lt; 12.3 &amp;lt;&amp;lt; endl;	// 0x1.899999999999ap+3
// string
cout &amp;lt;&amp;lt; uppercase &amp;lt;&amp;lt; &quot;abcd&quot; &amp;lt;&amp;lt; endl;			// abcd
cout &amp;lt;&amp;lt; nouppercase &amp;lt;&amp;lt; &quot;abcd&quot; &amp;lt;&amp;lt; endl;			// abcd&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;794&quot; data-origin-height=&quot;89&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJpqP2/btsJThvT6qL/uiM1kcyTARGMgPvJc1CG9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJpqP2/btsJThvT6qL/uiM1kcyTARGMgPvJc1CG9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJpqP2/btsJThvT6qL/uiM1kcyTARGMgPvJc1CG9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJpqP2%2FbtsJThvT6qL%2FuiM1kcyTARGMgPvJc1CG9k%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;794&quot; height=&quot;89&quot; data-origin-width=&quot;794&quot; data-origin-height=&quot;89&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;85&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3nGoW/btsJRBCBIem/MUklqjkXi62HcwKh8zXeuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3nGoW/btsJRBCBIem/MUklqjkXi62HcwKh8zXeuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3nGoW/btsJRBCBIem/MUklqjkXi62HcwKh8zXeuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3nGoW%2FbtsJRBCBIem%2FMUklqjkXi62HcwKh8zXeuK%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;834&quot; height=&quot;85&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;85&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;1.2.1.5. showbase/noshowbase&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;'ios_base' 내 멤버변수 중 '_Fmtfl'에 flag 정보 추가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;(showbase = 0x0008)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;showbase: 16진수, 8진수 출력 시 포멧에 따른 접두사를 붙여준다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1) 16진수 출력: '0x' 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2) 8진수 출력: '0' 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;noshowbase: 접두사를 붙이지 않는다.&lt;/p&gt;
&lt;pre id=&quot;code_1727782238913&quot; class=&quot;cpp&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;// int (hex)
cout &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; showbase &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;				// 0xb
cout &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; noshowbase &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;			// b
// int (dec)
cout &amp;lt;&amp;lt; dec &amp;lt;&amp;lt; showbase &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;				// 12
cout &amp;lt;&amp;lt; dec &amp;lt;&amp;lt; noshowbase &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;			// 12
// int (oct)
cout &amp;lt;&amp;lt; oct &amp;lt;&amp;lt; showbase &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;				// 014
cout &amp;lt;&amp;lt; oct &amp;lt;&amp;lt; noshowbase &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;			// 14&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;774&quot; data-origin-height=&quot;87&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBaeHd/btsJSOU2rir/DKGXTP6zYXbOkjSEqPDKK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBaeHd/btsJSOU2rir/DKGXTP6zYXbOkjSEqPDKK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBaeHd/btsJSOU2rir/DKGXTP6zYXbOkjSEqPDKK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBaeHd%2FbtsJSOU2rir%2FDKGXTP6zYXbOkjSEqPDKK0%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;774&quot; height=&quot;87&quot; data-origin-width=&quot;774&quot; data-origin-height=&quot;87&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;90&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m5TS6/btsJSpnR4si/p6kBDhhMyEyO0GoIICySw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m5TS6/btsJSpnR4si/p6kBDhhMyEyO0GoIICySw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m5TS6/btsJSpnR4si/p6kBDhhMyEyO0GoIICySw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm5TS6%2FbtsJSpnR4si%2Fp6kBDhhMyEyO0GoIICySw1%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;814&quot; height=&quot;90&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;90&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;1.2.1.6. setw()&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;setw: 'ios_base' 내&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;멤버변수 중&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;'_Wide' 변경 (default: 0)을 통해 출력할 문자의 길이 제어&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;특이사항: 매 출력 시 설정 필요&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1727782238915&quot; class=&quot;cpp&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;// int
cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;		// __12
cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; 12345 &amp;lt;&amp;lt; endl;	// 12345
// float
cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; 12.345 &amp;lt;&amp;lt; endl;	// 12.345
cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; 12.3 &amp;lt;&amp;lt; endl;	// 12.3
// string
cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; &quot;12&quot; &amp;lt;&amp;lt; endl;	// __12
cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; &quot;12345&quot; &amp;lt;&amp;lt; endl;	// 12345&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;1.2.1.7. setfill()&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;setfill: 'basic_ios' 내 멤버변수 중 '_Fillch' 변경 (default: 32, ' ')을 통해 공백을 채울 문자 결정&lt;/p&gt;
&lt;pre id=&quot;code_1727782238917&quot; class=&quot;cpp&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;// int
cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; setfill('*') &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;		// **12
cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; setfill('*') &amp;lt;&amp;lt; 12345 &amp;lt;&amp;lt; endl;	// 12345
// float
cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; setfill('*') &amp;lt;&amp;lt; 12.345 &amp;lt;&amp;lt; endl;	// 12.345
cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; setfill('*') &amp;lt;&amp;lt; 12.3 &amp;lt;&amp;lt; endl;	// 12.3
// string
cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; setfill('*') &amp;lt;&amp;lt; &quot;12&quot; &amp;lt;&amp;lt; endl;	// **12
cout &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; setfill('*') &amp;lt;&amp;lt; &quot;12345&quot; &amp;lt;&amp;lt; endl;	// 12345&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;1.2.1.8. left/right/&lt;/span&gt;&lt;span&gt;internal&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;'ios_base' 내 멤버변수 중 '&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;_Fmtfl'에 flag 정보 추가&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;(left/right/internal = 0x0040/&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;0x0080&lt;/span&gt;/&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;0x0100&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;left: 좌측 정렬&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;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;right: 우측 정렬&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;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;internal: 접두사-좌측 정렬 / 데이터-우측 정렬&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1727782238920&quot; class=&quot;cpp&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;// int
cout &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; showbase &amp;lt;&amp;lt; showpos &amp;lt;&amp;lt; left;
cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;						// 0xc
cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12345 &amp;lt;&amp;lt; endl;					// 0x3039
cout &amp;lt;&amp;lt; dec;
cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;						// +12
cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12345 &amp;lt;&amp;lt; endl;					// +12345
cout &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; right;
cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;						// __0xc
cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12345 &amp;lt;&amp;lt; endl;					// 0x3039
cout &amp;lt;&amp;lt; dec;		
cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;						// __+12
cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12345 &amp;lt;&amp;lt; endl;					// +12345
cout &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; internal;
cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;						// 0x__c
cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12345 &amp;lt;&amp;lt; endl;					// 0x3039
cout &amp;lt;&amp;lt; dec;
cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;						// +__12
cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 12345 &amp;lt;&amp;lt; endl;					// +12345
// float
cout &amp;lt;&amp;lt; showbase &amp;lt;&amp;lt; showpos &amp;lt;&amp;lt; left;
cout &amp;lt;&amp;lt; setw(6) &amp;lt;&amp;lt; 1.2 &amp;lt;&amp;lt; endl;						// +1.2
cout &amp;lt;&amp;lt; setw(6) &amp;lt;&amp;lt; 1. &amp;lt;&amp;lt; endl;						// +1
cout &amp;lt;&amp;lt; setw(6) &amp;lt;&amp;lt; 1.2345 &amp;lt;&amp;lt; endl;					// +1.2345
cout &amp;lt;&amp;lt; right;
cout &amp;lt;&amp;lt; setw(6) &amp;lt;&amp;lt; 1.2 &amp;lt;&amp;lt; endl;						// __+1.2
cout &amp;lt;&amp;lt; setw(6) &amp;lt;&amp;lt; 1. &amp;lt;&amp;lt; endl;						// ____+1
cout &amp;lt;&amp;lt; setw(6) &amp;lt;&amp;lt; 1.2345 &amp;lt;&amp;lt; endl;					// +1.2345
cout &amp;lt;&amp;lt; internal;
cout &amp;lt;&amp;lt; setw(6) &amp;lt;&amp;lt; 1.2 &amp;lt;&amp;lt; endl;						// +__1.2
cout &amp;lt;&amp;lt; setw(6) &amp;lt;&amp;lt; 1. &amp;lt;&amp;lt; endl;						// +____1
cout &amp;lt;&amp;lt; setw(6) &amp;lt;&amp;lt; 1.2345 &amp;lt;&amp;lt; endl;					// +1.2345
// string
cout &amp;lt;&amp;lt; left;
cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; &quot;12&quot; &amp;lt;&amp;lt; endl;					// 12
cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; &quot;123456&quot; &amp;lt;&amp;lt; endl;					// 123456
cout &amp;lt;&amp;lt; right;
cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; &quot;12&quot; &amp;lt;&amp;lt; endl;					// ___12
cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; &quot;123456&quot; &amp;lt;&amp;lt; endl;					// 123456
cout &amp;lt;&amp;lt; internal;
cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; &quot;12&quot; &amp;lt;&amp;lt; endl;					// ___12
cout &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; &quot;123456&quot; &amp;lt;&amp;lt; endl;					// 123456&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;adjustfield: setf 동작 시 bitmask를 위한 구간 지정 (basefield = 0x0x01C0 //left | right | internal)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;86&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZNBr0/btsJSo3BmQM/uFLkFpIBCTh5T7150yM7Uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZNBr0/btsJSo3BmQM/uFLkFpIBCTh5T7150yM7Uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZNBr0/btsJSo3BmQM/uFLkFpIBCTh5T7150yM7Uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZNBr0%2FbtsJSo3BmQM%2FuFLkFpIBCTh5T7150yM7Uk%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;861&quot; height=&quot;86&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;86&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;1.2.1.9. setprecision()&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;setprecision: 'ios_base' 내&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;멤버변수 중&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;'_Prec' 변경 (default: 6)을 통해 출력할 유효 자릿수 결정&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1727782238927&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;// float
cout &amp;lt;&amp;lt; setprecision(6) &amp;lt;&amp;lt; 12.345678 &amp;lt;&amp;lt; endl;		// 12.3457
cout &amp;lt;&amp;lt; setprecision(6) &amp;lt;&amp;lt; 12.3456 &amp;lt;&amp;lt; endl;		// 12.3456
cout &amp;lt;&amp;lt; setprecision(6) &amp;lt;&amp;lt; 12.345 &amp;lt;&amp;lt; endl;		// 12.345&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;1.2.1.10. showpoint/noshowpoint&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;'ios_base' 내 멤버변수 중 '&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;_Fmtfl'에 flag 정보 추가&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;(showpoint = 0x0010)&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;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;showpoint: 소수 부분이 0인 경우에도 표현&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;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;noshowpoint: 소수 부분이 0인 경우 생략&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1727782238928&quot; class=&quot;cpp&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;// int
cout &amp;lt;&amp;lt; showpoint &amp;lt;&amp;lt; 123 &amp;lt;&amp;lt; endl;	// 123
cout &amp;lt;&amp;lt; noshowpoint &amp;lt;&amp;lt; 123 &amp;lt;&amp;lt; endl;	// 123
// float
cout &amp;lt;&amp;lt; showpoint &amp;lt;&amp;lt; 12.3 &amp;lt;&amp;lt; endl;	// 12.3000
cout &amp;lt;&amp;lt; noshowpoint &amp;lt;&amp;lt; 12.3 &amp;lt;&amp;lt; endl;	// 12.3
// string
cout &amp;lt;&amp;lt; showpoint &amp;lt;&amp;lt; &quot;123&quot; &amp;lt;&amp;lt; endl;	// 123
cout &amp;lt;&amp;lt; noshowpoint &amp;lt;&amp;lt; &quot;123&quot; &amp;lt;&amp;lt; endl;	// 123&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;795&quot; data-origin-height=&quot;86&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n6NFP/btsJSESGzC2/yjWYz83CoB8BHduF9r7UH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n6NFP/btsJSESGzC2/yjWYz83CoB8BHduF9r7UH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n6NFP/btsJSESGzC2/yjWYz83CoB8BHduF9r7UH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn6NFP%2FbtsJSESGzC2%2FyjWYz83CoB8BHduF9r7UH0%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;795&quot; height=&quot;86&quot; data-origin-width=&quot;795&quot; data-origin-height=&quot;86&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;89&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xcYHP/btsJSRc9BCC/kau0CKaPskaehrmmslvLb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xcYHP/btsJSRc9BCC/kau0CKaPskaehrmmslvLb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xcYHP/btsJSRc9BCC/kau0CKaPskaehrmmslvLb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxcYHP%2FbtsJSRc9BCC%2Fkau0CKaPskaehrmmslvLb0%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;836&quot; height=&quot;89&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;89&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;1.2.1.11. scienantific/&lt;/span&gt;&lt;span&gt;fixed&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;'ios_base' 내 멤버변수 중 '&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;_Fmtfl'에 flag 정보 추가&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;(scientific/&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;fixed&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;= 0x2000/0x1000)&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;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;scientific: 과학적 표기법을 활용하여 부동 소수점 표현&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;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;fixed: 기본 표현을 활용하여 부동 소수점 표현&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1727782238930&quot; class=&quot;cpp&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;// float
cout &amp;lt;&amp;lt; 12.34 &amp;lt;&amp;lt; endl;					// 12.34
cout &amp;lt;&amp;lt; scientific &amp;lt;&amp;lt; 12.34 &amp;lt;&amp;lt; endl;			// 1.234000e+01
cout &amp;lt;&amp;lt; fixed &amp;lt;&amp;lt; 12.34 &amp;lt;&amp;lt; endl;				// 12.340000
cout &amp;lt;&amp;lt; fixed &amp;lt;&amp;lt; setprecision(4) &amp;lt;&amp;lt; 12.34 &amp;lt;&amp;lt; endl;	// 12.3400&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;floatfield: setf 동작 시 bitmask를 위한 구간 지정 (floatfield = 0x0x3000 // scientific | fixed)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;84&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JMpSA/btsJShjlga2/BKg3SFNcTQKka9k8gvCs31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JMpSA/btsJShjlga2/BKg3SFNcTQKka9k8gvCs31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JMpSA/btsJShjlga2/BKg3SFNcTQKka9k8gvCs31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJMpSA%2FbtsJShjlga2%2FBKg3SFNcTQKka9k8gvCs31%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;946&quot; height=&quot;84&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;84&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;85&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qa8dg/btsJTCs34El/gY4lJZFctMsGfCvxcALkgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qa8dg/btsJTCs34El/gY4lJZFctMsGfCvxcALkgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qa8dg/btsJTCs34El/gY4lJZFctMsGfCvxcALkgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqa8dg%2FbtsJTCs34El%2FgY4lJZFctMsGfCvxcALkgK%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;852&quot; height=&quot;85&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;85&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;1.2.1.12. boolalpha/noboolalpha&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;'ios_base' 내 멤버변수 중 '&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;_Fmtfl'에 flag 정보 추가&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;(boolalpha = 0x4000)&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;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;boolalpha: bool 값을 문자로 표시 (false/true)&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;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;noboolalpha: bool 값을 정수로 표시 (0/1)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1727782238932&quot; class=&quot;cpp&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;// bool
cout &amp;lt;&amp;lt; boolalpha &amp;lt;&amp;lt; true &amp;lt;&amp;lt; endl;		// true
cout &amp;lt;&amp;lt; noboolalpha &amp;lt;&amp;lt; true &amp;lt;&amp;lt; endl;		// 1
cout &amp;lt;&amp;lt; boolalpha &amp;lt;&amp;lt; false &amp;lt;&amp;lt; endl;		// false
cout &amp;lt;&amp;lt; noboolalpha &amp;lt;&amp;lt; false &amp;lt;&amp;lt; endl;		// 0&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;85&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dvQvHA/btsJTdNRhQd/XCiNhLsRHowhKzc5JAIa1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dvQvHA/btsJTdNRhQd/XCiNhLsRHowhKzc5JAIa1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dvQvHA/btsJTdNRhQd/XCiNhLsRHowhKzc5JAIa1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdvQvHA%2FbtsJTdNRhQd%2FXCiNhLsRHowhKzc5JAIa1K%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;796&quot; height=&quot;85&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;85&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;832&quot; data-origin-height=&quot;84&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/srZFd/btsJRYj17nx/prP7ltrP4fD2K02yQjZTm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/srZFd/btsJRYj17nx/prP7ltrP4fD2K02yQjZTm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/srZFd/btsJRYj17nx/prP7ltrP4fD2K02yQjZTm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsrZFd%2FbtsJRYj17nx%2FprP7ltrP4fD2K02yQjZTm0%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;832&quot; height=&quot;84&quot; data-origin-width=&quot;832&quot; data-origin-height=&quot;84&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1.2.2. setf(), unsetf()&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;fmtflag를 직접 제어하는 함수&lt;/p&gt;
&lt;pre id=&quot;code_1727782238933&quot; class=&quot;cpp&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;cout.setf(ios_base::hex);
cout &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;								// 12
cout.setf(ios_base::hex, ios_base::basefield);
cout &amp;lt;&amp;lt; 12 &amp;lt;&amp;lt; endl;								// c&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;968&quot; data-origin-height=&quot;463&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjD28K/btsJSnKmzNu/L2YJF4NAY642VKqYwklgkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjD28K/btsJSnKmzNu/L2YJF4NAY642VKqYwklgkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjD28K/btsJSnKmzNu/L2YJF4NAY642VKqYwklgkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjD28K%2FbtsJSnKmzNu%2FL2YJF4NAY642VKqYwklgkk%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;968&quot; height=&quot;463&quot; data-origin-width=&quot;968&quot; data-origin-height=&quot;463&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;675&quot; data-origin-height=&quot;297&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WiJOz/btsJTBgCa7n/R6KA0zxCiJQSIiyg2KhVjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WiJOz/btsJTBgCa7n/R6KA0zxCiJQSIiyg2KhVjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WiJOz/btsJTBgCa7n/R6KA0zxCiJQSIiyg2KhVjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWiJOz%2FbtsJTBgCa7n%2FR6KA0zxCiJQSIiyg2KhVjk%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;297&quot; data-origin-width=&quot;675&quot; data-origin-height=&quot;297&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;(1) setf(flag) / unsetf(flag)&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&gt;(2) setf(flag, flag)&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&gt;- dec/oct/hex basefield&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&gt;- fixed/scientific floatfield&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&gt;- left/right/internal adjustfield&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1.3. 출력 동작 분석&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;실제 응용은 아래의 구문을 진행하며, 출력이 이뤄진다.&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1.3.1. operator&amp;lt;&amp;lt;(int _Val) (in 'basic_ostream' class)&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;int형 출력 시 facet을 활용하고, fmtflag 중 basefield를 사용한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;521&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tlCGQ/btsJTe62idW/V9CHGuJRkA8OlxgN1kBoB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tlCGQ/btsJTe62idW/V9CHGuJRkA8OlxgN1kBoB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tlCGQ/btsJTe62idW/V9CHGuJRkA8OlxgN1kBoB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtlCGQ%2FbtsJTe62idW%2FV9CHGuJRkA8OlxgN1kBoB0%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;857&quot; height=&quot;521&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;521&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;1.3.1.1. rdbuf() (in 'basic_ios' class)&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;stream buffer의 포인터 위치를 반환함.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;69&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XMN5e/btsJQ4SPsXX/qezfVs5TqUXuVFnbXHnnv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XMN5e/btsJQ4SPsXX/qezfVs5TqUXuVFnbXHnnv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XMN5e/btsJQ4SPsXX/qezfVs5TqUXuVFnbXHnnv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXMN5e%2FbtsJQ4SPsXX%2FqezfVs5TqUXuVFnbXHnnv1%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;504&quot; height=&quot;69&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;69&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;523&quot; data-origin-height=&quot;89&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6FDsZ/btsJQ28xN9d/cFQTcrfLNhVQhuUT2koaEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6FDsZ/btsJQ28xN9d/cFQTcrfLNhVQhuUT2koaEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6FDsZ/btsJQ28xN9d/cFQTcrfLNhVQhuUT2koaEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6FDsZ%2FbtsJQ28xN9d%2FcFQTcrfLNhVQhuUT2koaEK%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;523&quot; height=&quot;89&quot; data-origin-width=&quot;523&quot; data-origin-height=&quot;89&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;1.3.1.2. fill() (in 'basic_ios' class)&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;빈 공간을 채울 character를 반환함. (이때, _Elem은 char가 활용된다. 예외적인 상황은 추후 고민해보자.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;379&quot; data-origin-height=&quot;68&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvu62p/btsJTA249uz/UPwaLkMUbm1l5SA3KI2KP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvu62p/btsJTA249uz/UPwaLkMUbm1l5SA3KI2KP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvu62p/btsJTA249uz/UPwaLkMUbm1l5SA3KI2KP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbvu62p%2FbtsJTA249uz%2FUPwaLkMUbm1l5SA3KI2KP1%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;379&quot; height=&quot;68&quot; data-origin-width=&quot;379&quot; data-origin-height=&quot;68&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;523&quot; data-origin-height=&quot;89&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6FDsZ/btsJQ28xN9d/cFQTcrfLNhVQhuUT2koaEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6FDsZ/btsJQ28xN9d/cFQTcrfLNhVQhuUT2koaEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6FDsZ/btsJQ28xN9d/cFQTcrfLNhVQhuUT2koaEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6FDsZ%2FbtsJQ28xN9d%2FcFQTcrfLNhVQhuUT2koaEK%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;523&quot; height=&quot;89&quot; data-origin-width=&quot;523&quot; data-origin-height=&quot;89&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;51&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckqjnv/btsJSFxenPx/s5iVqTjVzaZkrTNYFXNSMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckqjnv/btsJSFxenPx/s5iVqTjVzaZkrTNYFXNSMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckqjnv/btsJSFxenPx/s5iVqTjVzaZkrTNYFXNSMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fckqjnv%2FbtsJSFxenPx%2Fs5iVqTjVzaZkrTNYFXNSMk%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;788&quot; height=&quot;51&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;51&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;336&quot; data-origin-height=&quot;24&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Q9kAA/btsJRquvGeO/DP9qCKGVa4Za6VgSSSG9tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Q9kAA/btsJRquvGeO/DP9qCKGVa4Za6VgSSSG9tk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Q9kAA/btsJRquvGeO/DP9qCKGVa4Za6VgSSSG9tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQ9kAA%2FbtsJRquvGeO%2FDP9qCKGVa4Za6VgSSSG9tk%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;336&quot; height=&quot;24&quot; data-origin-width=&quot;336&quot; data-origin-height=&quot;24&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;1.3.1.3. put (in 'num_put' class)&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;953&quot; data-origin-height=&quot;93&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HNHES/btsJTg4QZlQ/b3mdEWlE57tZxRPgM6Cwtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HNHES/btsJTg4QZlQ/b3mdEWlE57tZxRPgM6Cwtk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HNHES/btsJTg4QZlQ/b3mdEWlE57tZxRPgM6Cwtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHNHES%2FbtsJTg4QZlQ%2Fb3mdEWlE57tZxRPgM6Cwtk%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;953&quot; height=&quot;93&quot; data-origin-width=&quot;953&quot; data-origin-height=&quot;93&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;1.3.1.3.1. do_put (in 'num_put' class)&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1027&quot; data-origin-height=&quot;171&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/U5fUz/btsJQ4SPsX9/CUQB40EBlVJOQgb7Y6m7E1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/U5fUz/btsJQ4SPsX9/CUQB40EBlVJOQgb7Y6m7E1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/U5fUz/btsJQ4SPsX9/CUQB40EBlVJOQgb7Y6m7E1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FU5fUz%2FbtsJQ4SPsX9%2FCUQB40EBlVJOQgb7Y6m7E1%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;1027&quot; height=&quot;171&quot; data-origin-width=&quot;1027&quot; data-origin-height=&quot;171&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;1.3.1.3.1.1. _Ifmt (in 'num_put' class)&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;int형 출력을 위한 format&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;1033&quot; data-origin-height=&quot;607&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/luM2J/btsJSg5O4S3/2Mz1c3gREk9ET8tMtI7Bk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/luM2J/btsJSg5O4S3/2Mz1c3gREk9ET8tMtI7Bk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/luM2J/btsJSg5O4S3/2Mz1c3gREk9ET8tMtI7Bk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FluM2J%2FbtsJSg5O4S3%2F2Mz1c3gREk9ET8tMtI7Bk1%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;1033&quot; height=&quot;607&quot; data-origin-width=&quot;1033&quot; data-origin-height=&quot;607&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;+) _Ffmt (in 'num_put' class)&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;floating-point 출력을 위한 포멧&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1019&quot; data-origin-height=&quot;990&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQv37n/btsJQ4ehyHJ/Jwo54kYBb1TYBFMRHHW4mk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQv37n/btsJQ4ehyHJ/Jwo54kYBb1TYBFMRHHW4mk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQv37n/btsJQ4ehyHJ/Jwo54kYBb1TYBFMRHHW4mk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQv37n%2FbtsJQ4ehyHJ%2FJwo54kYBb1TYBFMRHHW4mk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1019&quot; height=&quot;990&quot; data-origin-width=&quot;1019&quot; data-origin-height=&quot;990&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;1.3.1.3.1.2&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;. sprintf_s (global, in 'stdio.h' class)&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;_Buffer에 _Format에 따라 변경된 문자열을 저장&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;852&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDY9im/btsJQ4ehyJ3/NjOrOFay2FFUKD5s0rZiM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDY9im/btsJQ4ehyJ3/NjOrOFay2FFUKD5s0rZiM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDY9im/btsJQ4ehyJ3/NjOrOFay2FFUKD5s0rZiM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDY9im%2FbtsJQ4ehyJ3%2FNjOrOFay2FFUKD5s0rZiM0%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;852&quot; height=&quot;425&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;1.3.1.3.1.3.&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;&amp;nbsp;_Iput (in 'num_put' class)&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;Integer 형식의 출력을 위한 구현부&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;1081&quot; data-origin-height=&quot;1111&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EVnWV/btsJSgSklhb/lLiebKiEyoqGUMmHjI6TH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EVnWV/btsJSgSklhb/lLiebKiEyoqGUMmHjI6TH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EVnWV/btsJSgSklhb/lLiebKiEyoqGUMmHjI6TH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEVnWV%2FbtsJSgSklhb%2FlLiebKiEyoqGUMmHjI6TH0%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;1081&quot; height=&quot;1111&quot; data-origin-width=&quot;1081&quot; data-origin-height=&quot;1111&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;+) Fput&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;(in 'num_put' class)&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;Floating-point 형식의 출력을 위한 구현부&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;939&quot; data-origin-height=&quot;1383&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HWkjb/btsJSLYtxL2/uBwcAJp7Ir2hUKNfXPKjw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HWkjb/btsJSLYtxL2/uBwcAJp7Ir2hUKNfXPKjw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HWkjb/btsJSLYtxL2/uBwcAJp7Ir2hUKNfXPKjw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHWkjb%2FbtsJSLYtxL2%2FuBwcAJp7Ir2hUKNfXPKjw1%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;939&quot; height=&quot;1383&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;1383&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;1.3.1.3.1.3.&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;1. getloc() (in 'ios_base' class)&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;locale을 활용&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;69&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQ8kpQ/btsJSRqG4hY/ExG1IRHAjobchFUYpNj1u1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQ8kpQ/btsJSRqG4hY/ExG1IRHAjobchFUYpNj1u1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQ8kpQ/btsJSRqG4hY/ExG1IRHAjobchFUYpNj1u1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQ8kpQ%2FbtsJSRqG4hY%2FExG1IRHAjobchFUYpNj1u1%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;69&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;69&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;699&quot; data-origin-height=&quot;178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z7Bxz/btsJQ5Ywj4J/WHkdzBSKZbgc4M7jnXrxt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z7Bxz/btsJQ5Ywj4J/WHkdzBSKZbgc4M7jnXrxt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z7Bxz/btsJQ5Ywj4J/WHkdzBSKZbgc4M7jnXrxt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ7Bxz%2FbtsJQ5Ywj4J%2FWHkdzBSKZbgc4M7jnXrxt1%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;699&quot; height=&quot;178&quot; data-origin-width=&quot;699&quot; data-origin-height=&quot;178&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;1.3.1.3.1.3.&lt;/span&gt;2. widen() (in 'ctype' class)&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;char 형식의 문자를 locale에서 사용하는 ctype 형태의 문자로 변환&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dw21Nh/btsJToIue0b/XClkK5izBKURXKCHF6hk6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dw21Nh/btsJToIue0b/XClkK5izBKURXKCHF6hk6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dw21Nh/btsJToIue0b/XClkK5izBKURXKCHF6hk6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdw21Nh%2FbtsJToIue0b%2FXClkK5izBKURXKCHF6hk6k%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;932&quot; height=&quot;194&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;194&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;1.3.1.3.1.3.&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;3. _Put (in 'num_put' class)&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;[_Ptr, _Prt + _Count] 범위의 값을 _Dest 메모리로 복사&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;921&quot; data-origin-height=&quot;172&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJ2Ve2/btsJTnQkQ8U/eDRnd64kbWZATI3vjbAB5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJ2Ve2/btsJTnQkQ8U/eDRnd64kbWZATI3vjbAB5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJ2Ve2/btsJTnQkQ8U/eDRnd64kbWZATI3vjbAB5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJ2Ve2%2FbtsJTnQkQ8U%2FeDRnd64kbWZATI3vjbAB5k%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;921&quot; height=&quot;172&quot; data-origin-width=&quot;921&quot; data-origin-height=&quot;172&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;1.3.1.3.1.3.&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;4. _Rep (in 'num_put' class)&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;'_Count' 횟수만큼 '_Ch' 데이터를&amp;nbsp; _Dest 메모리로 복사&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;1017&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQ3kxE/btsJReVhrq8/4IbNAVHEda7f6Wil14Wk50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQ3kxE/btsJReVhrq8/4IbNAVHEda7f6Wil14Wk50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQ3kxE/btsJReVhrq8/4IbNAVHEda7f6Wil14Wk50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQ3kxE%2FbtsJReVhrq8%2F4IbNAVHEda7f6Wil14Wk50%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;1017&quot; height=&quot;152&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;152&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;1.3.2&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;. endl (in 'basic_ostream' class)&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t8eCU/btsJRRrO3ol/bLlmD9N2nw99wRp1XRBsk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t8eCU/btsJRRrO3ol/bLlmD9N2nw99wRp1XRBsk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t8eCU/btsJRRrO3ol/bLlmD9N2nw99wRp1XRBsk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft8eCU%2FbtsJRRrO3ol%2FbLlmD9N2nw99wRp1XRBsk1%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;150&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;1.3.2&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;.1. put (in '&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;basic_ostream&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;' class)&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;359&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HZHqS/btsJRcXyIeG/BIg9JPPP87nH2kCGPwRbG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HZHqS/btsJRcXyIeG/BIg9JPPP87nH2kCGPwRbG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HZHqS/btsJRcXyIeG/BIg9JPPP87nH2kCGPwRbG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHZHqS%2FbtsJRcXyIeG%2FBIg9JPPP87nH2kCGPwRbG0%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;778&quot; height=&quot;359&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;359&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;1.3.2&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;.2. flush (in '&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;basic_ostream&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;' class)&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;365&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biyUin/btsJSbKmPET/qEziVrIKj19jQLf1Rwtao0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biyUin/btsJSbKmPET/qEziVrIKj19jQLf1Rwtao0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biyUin/btsJSbKmPET/qEziVrIKj19jQLf1Rwtao0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiyUin%2FbtsJSbKmPET%2FqEziVrIKj19jQLf1Rwtao0%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;636&quot; height=&quot;365&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;365&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;1.3.2&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;.2.1. rdbuf (in 'basic_ios&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;' class)&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;stream buffer 포인터 반환&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;69&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o48Lv/btsJROPpCi7/rNulKW6o1wDsL28KuOiVv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o48Lv/btsJROPpCi7/rNulKW6o1wDsL28KuOiVv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o48Lv/btsJROPpCi7/rNulKW6o1wDsL28KuOiVv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo48Lv%2FbtsJROPpCi7%2FrNulKW6o1wDsL28KuOiVv1%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;506&quot; height=&quot;69&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;69&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;464&quot; data-origin-height=&quot;66&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YPQO6/btsJSlFVP3X/keBB1ffK6cFJUMNd9hfWhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YPQO6/btsJSlFVP3X/keBB1ffK6cFJUMNd9hfWhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YPQO6/btsJSlFVP3X/keBB1ffK6cFJUMNd9hfWhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYPQO6%2FbtsJSlFVP3X%2FkeBB1ffK6cFJUMNd9hfWhk%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;464&quot; height=&quot;66&quot; data-origin-width=&quot;464&quot; data-origin-height=&quot;66&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;43&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boQdrc/btsJToobDcw/ojr2fe70uEiDnXUjd9uZKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boQdrc/btsJToobDcw/ojr2fe70uEiDnXUjd9uZKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boQdrc/btsJToobDcw/ojr2fe70uEiDnXUjd9uZKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboQdrc%2FbtsJToobDcw%2Fojr2fe70uEiDnXUjd9uZKK%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;503&quot; height=&quot;43&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;43&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;1.3.2&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;.2.2. pubsync, sync (in '&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;basic_streambuf&lt;/span&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;' class)&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;(참고:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/cpp/standard-library/basic-streambuf-class?view=msvc-170&quot;&gt;https://learn.microsoft.com/ko-kr/cpp/standard-library/basic-streambuf-class?view=msvc-170&lt;/a&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;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;외부 스트림과 동기화&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;71&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c8Cs2X/btsJSrFVle5/GsR6rCtxeCfAKA6fiOZvpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8Cs2X/btsJSrFVle5/GsR6rCtxeCfAKA6fiOZvpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8Cs2X/btsJSrFVle5/GsR6rCtxeCfAKA6fiOZvpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8Cs2X%2FbtsJSrFVle5%2FGsR6rCtxeCfAKA6fiOZvpk%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;661&quot; height=&quot;71&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;71&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;73&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLJPlT/btsJS8MClcM/9vAsnEwqXhd7msk9rHfE1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLJPlT/btsJS8MClcM/9vAsnEwqXhd7msk9rHfE1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLJPlT/btsJS8MClcM/9vAsnEwqXhd7msk9rHfE1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLJPlT%2FbtsJS8MClcM%2F9vAsnEwqXhd7msk9rHfE1K%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;830&quot; height=&quot;73&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;73&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>--------private---------/|c++| 유용한 정보</category>
      <category>c++</category>
      <category>CLASS</category>
      <category>DEC</category>
      <category>Format</category>
      <category>HEX</category>
      <category>ios_base</category>
      <category>manipulator</category>
      <category>operator</category>
      <category>ostream</category>
      <category>setf</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/379</guid>
      <comments>https://kyunstudio.tistory.com/379#entry379comment</comments>
      <pubDate>Tue, 1 Oct 2024 20:38:28 +0900</pubDate>
    </item>
    <item>
      <title>[UE5] Day18 - 나이아가라 시스템 응용 (추적 투사체 구현)</title>
      <link>https://kyunstudio.tistory.com/376</link>
      <description>&lt;h2 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size26&quot; data-darkreader-inline-color=&quot;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;0. 서문&lt;/span&gt;&lt;/b&gt;&lt;/h2&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-filename=&quot;유도공격.gif&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;464&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBAv78/btsI8fyQsVW/1Stx4uhlaW7nte3Mkwx5d1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBAv78/btsI8fyQsVW/1Stx4uhlaW7nte3Mkwx5d1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBAv78/btsI8fyQsVW/1Stx4uhlaW7nte3Mkwx5d1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cBAv78/btsI8fyQsVW/1Stx4uhlaW7nte3Mkwx5d1/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;823&quot; height=&quot;464&quot; data-filename=&quot;유도공격.gif&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;464&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;1592&quot; data-origin-height=&quot;836&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bc5wJ6/btsI8fUhpmk/4YvEl6k5Da4wfBuEiL5PSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bc5wJ6/btsI8fUhpmk/4YvEl6k5Da4wfBuEiL5PSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bc5wJ6/btsI8fUhpmk/4YvEl6k5Da4wfBuEiL5PSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbc5wJ6%2FbtsI8fUhpmk%2F4YvEl6k5Da4wfBuEiL5PSK%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;1592&quot; height=&quot;836&quot; data-origin-width=&quot;1592&quot; data-origin-height=&quot;836&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot; data-darkreader-inline-color=&quot;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. Smoke Trail 구현을 위한 Matarial 생성&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1.1. 노이즈 이미지 생성&lt;/span&gt;&lt;/b&gt;&lt;/h3&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;512&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsvA1Y/btsI7jwqDeI/0Rs2R2yfBXzZ6I5LgFEws1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsvA1Y/btsI7jwqDeI/0Rs2R2yfBXzZ6I5LgFEws1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsvA1Y/btsI7jwqDeI/0Rs2R2yfBXzZ6I5LgFEws1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsvA1Y%2FbtsI7jwqDeI%2F0Rs2R2yfBXzZ6I5LgFEws1%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;512&quot; height=&quot;512&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1.2. Material 생성&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;나이아가라 시스템 구현 시 활용할 Material 제작&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2268&quot; data-origin-height=&quot;849&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfPzZW/btsI7nyJmdk/sjhp2Chh3Kkn49SgfUvm71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfPzZW/btsI7nyJmdk/sjhp2Chh3Kkn49SgfUvm71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfPzZW/btsI7nyJmdk/sjhp2Chh3Kkn49SgfUvm71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfPzZW%2FbtsI7nyJmdk%2Fsjhp2Chh3Kkn49SgfUvm71%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;2268&quot; height=&quot;849&quot; data-origin-width=&quot;2268&quot; data-origin-height=&quot;849&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.2.1. panner&lt;/h4&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-filename=&quot;상승효과.gif&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;852&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S0nA2/btsI9wgeXp2/HGXviaWnpmPxCkkfW2waU1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S0nA2/btsI9wgeXp2/HGXviaWnpmPxCkkfW2waU1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S0nA2/btsI9wgeXp2/HGXviaWnpmPxCkkfW2waU1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/S0nA2/btsI9wgeXp2/HGXviaWnpmPxCkkfW2waU1/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;762&quot; height=&quot;852&quot; data-filename=&quot;상승효과.gif&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;852&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;1445&quot; data-origin-height=&quot;869&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CgG84/btsI9sSvucM/kKrO8YOE2dIG2XDIFTGtP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CgG84/btsI9sSvucM/kKrO8YOE2dIG2XDIFTGtP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CgG84/btsI9sSvucM/kKrO8YOE2dIG2XDIFTGtP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCgG84%2FbtsI9sSvucM%2FkKrO8YOE2dIG2XDIFTGtP0%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;1445&quot; height=&quot;869&quot; data-origin-width=&quot;1445&quot; data-origin-height=&quot;869&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.2.2. Radial Gradient Exponential&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장자리에 효과를 적용하기 위해 Radial Gradient Exponential을 적용해주었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0twxY/btsI9ez8k0E/KwyMOxkkJKq8lMYJoKuqYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0twxY/btsI9ez8k0E/KwyMOxkkJKq8lMYJoKuqYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0twxY/btsI9ez8k0E/KwyMOxkkJKq8lMYJoKuqYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0twxY%2FbtsI9ez8k0E%2FKwyMOxkkJKq8lMYJoKuqYk%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;671&quot; height=&quot;278&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;278&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;228&quot; data-origin-height=&quot;115&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/15NLI/btsI9rF3pYe/MEa7xyQ8hRlDkZMTK3DTH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/15NLI/btsI9rF3pYe/MEa7xyQ8hRlDkZMTK3DTH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/15NLI/btsI9rF3pYe/MEa7xyQ8hRlDkZMTK3DTH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F15NLI%2FbtsI9rF3pYe%2FMEa7xyQ8hRlDkZMTK3DTH0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;228&quot; height=&quot;115&quot; data-origin-width=&quot;228&quot; data-origin-height=&quot;115&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때, 상수를 넣기 위한 '0.3'의 경우는 1+Left-Click 입력을 통해 모듈을 생성할 수 있다.&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1.2.3. Particle Color&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;출력할 색과 투명도 선택&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2179&quot; data-origin-height=&quot;1026&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EZODV/btsI9vBISJZ/3TtwTIMy1lSNTKPIVNGt4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EZODV/btsI9vBISJZ/3TtwTIMy1lSNTKPIVNGt4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EZODV/btsI9vBISJZ/3TtwTIMy1lSNTKPIVNGt4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEZODV%2FbtsI9vBISJZ%2F3TtwTIMy1lSNTKPIVNGt4k%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;2179&quot; height=&quot;1026&quot; data-origin-width=&quot;2179&quot; data-origin-height=&quot;1026&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-darkreader-inline-color=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 투사체 시스템 구현&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2.1. Projectile&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;263&quot; data-origin-height=&quot;776&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwX8FO/btsI7J9pgsL/jgiSCkBZp2rKyKqw2agZMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwX8FO/btsI7J9pgsL/jgiSCkBZp2rKyKqw2agZMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwX8FO/btsI7J9pgsL/jgiSCkBZp2rKyKqw2agZMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwX8FO%2FbtsI7J9pgsL%2FjgiSCkBZp2rKyKqw2agZMk%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;263&quot; height=&quot;776&quot; data-origin-width=&quot;263&quot; data-origin-height=&quot;776&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2.1.1. Spawn Rate&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt; &lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;파라미터를 활용하여 투사체 &lt;/span&gt;생성 속도 제어&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;146&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Nea81/btsI8OhD5e9/3GAhwccCOzdUKE2w7y5xu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Nea81/btsI8OhD5e9/3GAhwccCOzdUKE2w7y5xu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nea81/btsI8OhD5e9/3GAhwccCOzdUKE2w7y5xu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNea81%2FbtsI8OhD5e9%2F3GAhwccCOzdUKE2w7y5xu1%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;765&quot; height=&quot;146&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;146&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2.1.2. Spring Force&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;특정 위치로 투사체가 모일 수 있도록 기능 추가&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;730&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mvay2/btsI8iXPPMm/esPuUUCrVsJaQCMdpXpmvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mvay2/btsI8iXPPMm/esPuUUCrVsJaQCMdpXpmvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mvay2/btsI8iXPPMm/esPuUUCrVsJaQCMdpXpmvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmvay2%2FbtsI8iXPPMm%2FesPuUUCrVsJaQCMdpXpmvK%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;765&quot; height=&quot;730&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;730&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;49&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u4qb1/btsI9a5Cbhc/JPHN1oPcFvC2KZTi6KmU40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u4qb1/btsI9a5Cbhc/JPHN1oPcFvC2KZTi6KmU40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u4qb1/btsI9a5Cbhc/JPHN1oPcFvC2KZTi6KmU40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu4qb1%2FbtsI9a5Cbhc%2FJPHN1oPcFvC2KZTi6KmU40%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;481&quot; height=&quot;49&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;49&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2.2. Trail&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2.3. CurlTrail&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2.4. SmokeTrail&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;세가지 동작은 모두 유사하다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Emitter에서 파티클을 생성하며 궤적 내 흔적을 남기는 방식으로 동작이 이뤄진다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;925&quot; data-origin-height=&quot;738&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VgB78/btsI9NowMTc/ssWb6LNHknIlIAB6VC2Klk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VgB78/btsI9NowMTc/ssWb6LNHknIlIAB6VC2Klk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VgB78/btsI9NowMTc/ssWb6LNHknIlIAB6VC2Klk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVgB78%2FbtsI9NowMTc%2FssWb6LNHknIlIAB6VC2Klk%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;925&quot; height=&quot;738&quot; data-origin-width=&quot;925&quot; data-origin-height=&quot;738&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot; data-darkreader-inline-color=&quot;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;254&quot; data-origin-height=&quot;82&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5A5H9/btsI78nqsQd/c4d0dzjydPQuV0dplrC1Y0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5A5H9/btsI78nqsQd/c4d0dzjydPQuV0dplrC1Y0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5A5H9/btsI78nqsQd/c4d0dzjydPQuV0dplrC1Y0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5A5H9%2FbtsI78nqsQd%2Fc4d0dzjydPQuV0dplrC1Y0%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;254&quot; height=&quot;82&quot; data-origin-width=&quot;254&quot; data-origin-height=&quot;82&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파티클 소멸 시 Blueprint에서 데이터를 활용할 수 있도록 기능을 추가해두었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추후 파티클 피격 판정에 대한 기능을 추가할 수 있다면 구현해보도록 하겠다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot; data-darkreader-inline-color=&quot;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=cKwG9BZGyko&amp;amp;list=PL9leM7rwywVZxhDyOr3r_H6bwqRBakg5M&amp;amp;index=3&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=cKwG9BZGyko&amp;amp;list=PL9leM7rwywVZxhDyOr3r_H6bwqRBakg5M&amp;amp;index=3&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dev.epicgames.com/documentation/ko-kr/unreal-engine/animating-uv-coordinates-in-unreal-engine&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://dev.epicgames.com/documentation/ko-kr/unreal-engine/animating-uv-coordinates-in-unreal-engine&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://medium.com/@Gentleyeti/exploring-radial-gradients-51d3403b5e60&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://medium.com/@Gentleyeti/exploring-radial-gradients-51d3403b5e60&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dev.epicgames.com/documentation/en-us/unreal-engine/constant-material-expressions-in-unreal-engine?application_version=5.3&amp;amp;utm_source=editor&amp;amp;utm_medium=docs&amp;amp;utm_campaign=rightclick_matnode#particlecolor&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://dev.epicgames.com/documentation/en-us/unreal-engine/constant-material-expressions-in-unreal-engine?application_version=5.3&amp;amp;utm_source=editor&amp;amp;utm_medium=docs&amp;amp;utm_campaign=rightclick_matnode#particlecolor&lt;/a&gt;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <category>homming</category>
      <category>na</category>
      <category>niagara</category>
      <category>Projectile</category>
      <category>System</category>
      <category>UE5</category>
      <category>Unreal</category>
      <category>나이아가라</category>
      <category>추적</category>
      <category>투사체</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/376</guid>
      <comments>https://kyunstudio.tistory.com/376#entry376comment</comments>
      <pubDate>Tue, 20 Aug 2024 01:07:13 +0900</pubDate>
    </item>
    <item>
      <title>[UE5] Day18 - AOE System 구현 (TBD)</title>
      <link>https://kyunstudio.tistory.com/377</link>
      <description>&lt;h2 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;0. 서문&lt;/span&gt;&lt;/b&gt;&lt;/h2&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-filename=&quot;번개 공격.gif&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;466&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bl9wyo/btsI7gk3KCY/xHdK4uJk2aqfWRa1GY7kw0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bl9wyo/btsI7gk3KCY/xHdK4uJk2aqfWRa1GY7kw0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bl9wyo/btsI7gk3KCY/xHdK4uJk2aqfWRa1GY7kw0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bl9wyo/btsI7gk3KCY/xHdK4uJk2aqfWRa1GY7kw0/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;823&quot; height=&quot;466&quot; data-filename=&quot;번개 공격.gif&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;466&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1.1. Enemy AI&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;1.1.1. Test&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/377</guid>
      <comments>https://kyunstudio.tistory.com/377#entry377comment</comments>
      <pubDate>Mon, 19 Aug 2024 23:52:40 +0900</pubDate>
    </item>
    <item>
      <title>[UE5] Day17 - Group Enemy Combat (Token System, Semaphore, Mutex)</title>
      <link>https://kyunstudio.tistory.com/375</link>
      <description>&lt;h2 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;0. 서문&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;실제 그룹 전투와 같이 특정 인원만 공격이 가능하도록 로직을 구현하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;활용 방법은 mutex와 유사한 방식으로 동작을 하며, Token을 가져간 객체만 공격을 가능하도록 하는 방법이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;879&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YSGOs/btsITPNT3QR/1D6njM9g8kiyXmrjv5FF81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YSGOs/btsITPNT3QR/1D6njM9g8kiyXmrjv5FF81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YSGOs/btsITPNT3QR/1D6njM9g8kiyXmrjv5FF81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYSGOs%2FbtsITPNT3QR%2F1D6njM9g8kiyXmrjv5FF81%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;879&quot; height=&quot;173&quot; data-origin-width=&quot;879&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. BP_Enemy 공격 가능 시, AttackTokensCount의 개수 확인 및 Token 취득 (ReserveAttackToken)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. BP_Enemy 공격 후, Token 반환 (ReturnAttackToken)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 실제 구현 중 핵심 Function 구동 과정을 간략하게 정리함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. BPC_DamageSystem&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;579&quot; data-origin-height=&quot;380&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0kqWS/btsISIhUGUa/j1AdsVYeLZKzwMkFFcH1Kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0kqWS/btsISIhUGUa/j1AdsVYeLZKzwMkFFcH1Kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0kqWS/btsISIhUGUa/j1AdsVYeLZKzwMkFFcH1Kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0kqWS%2FbtsISIhUGUa%2Fj1AdsVYeLZKzwMkFFcH1Kk%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;579&quot; height=&quot;380&quot; data-origin-width=&quot;579&quot; data-origin-height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1.1. ReserveAttackToken&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Token 취득 시 Success를 반환함&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1462&quot; data-origin-height=&quot;634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FJozX/btsISftuWqB/nlNOqtZ6JiAqccePXPAzWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FJozX/btsISftuWqB/nlNOqtZ6JiAqccePXPAzWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FJozX/btsISftuWqB/nlNOqtZ6JiAqccePXPAzWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFJozX%2FbtsISftuWqB%2FnlNOqtZ6JiAqccePXPAzWk%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;1462&quot; height=&quot;634&quot; data-origin-width=&quot;1462&quot; data-origin-height=&quot;634&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1.2. ReturnAttackToken&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;923&quot; data-origin-height=&quot;311&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDVBcJ/btsIRXGxp08/XKdqt8HlP5FprbOx93gjlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDVBcJ/btsIRXGxp08/XKdqt8HlP5FprbOx93gjlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDVBcJ/btsIRXGxp08/XKdqt8HlP5FprbOx93gjlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDVBcJ%2FbtsIRXGxp08%2FXKdqt8HlP5FprbOx93gjlK%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;923&quot; height=&quot;311&quot; data-origin-width=&quot;923&quot; data-origin-height=&quot;311&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. BP_EnemyBase&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2.1. AttackStart&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1746&quot; data-origin-height=&quot;462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJjrrw/btsISVt7IMO/8jMIXt28aNiOZKflgWq2Zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJjrrw/btsISVt7IMO/8jMIXt28aNiOZKflgWq2Zk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJjrrw/btsISVt7IMO/8jMIXt28aNiOZKflgWq2Zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJjrrw%2FbtsISVt7IMO%2F8jMIXt28aNiOZKflgWq2Zk%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;1746&quot; height=&quot;462&quot; data-origin-width=&quot;1746&quot; data-origin-height=&quot;462&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2.2. AttackEnd&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;735&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nZV3c/btsIRvpA7Is/I9n1vKsFi05mazMGYRog0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nZV3c/btsIRvpA7Is/I9n1vKsFi05mazMGYRog0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nZV3c/btsIRvpA7Is/I9n1vKsFi05mazMGYRog0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnZV3c%2FbtsIRvpA7Is%2FI9n1vKsFi05mazMGYRog0k%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;735&quot; height=&quot;322&quot; data-origin-width=&quot;735&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2.3. StoreAttackTokens (예외 상황 처리용&amp;nbsp;Function)&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1473&quot; data-origin-height=&quot;492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuAKA2/btsIReawsIU/Xg2E9oqgr0QV2VC6N4qd9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuAKA2/btsIReawsIU/Xg2E9oqgr0QV2VC6N4qd9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuAKA2/btsIReawsIU/Xg2E9oqgr0QV2VC6N4qd9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuAKA2%2FbtsIReawsIU%2FXg2E9oqgr0QV2VC6N4qd9k%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;1473&quot; height=&quot;492&quot; data-origin-width=&quot;1473&quot; data-origin-height=&quot;492&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2.4. Die (예외 상황 처리용 Function)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사망 시, Map에 저장된 Token을 BPC_DamageSystem에 반환&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2670&quot; data-origin-height=&quot;453&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dq2m2A/btsIRevieh3/mdPRLwUvSDKSAKtCkDotK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dq2m2A/btsIRevieh3/mdPRLwUvSDKSAKtCkDotK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dq2m2A/btsIRevieh3/mdPRLwUvSDKSAKtCkDotK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdq2m2A%2FbtsIRevieh3%2FmdPRLwUvSDKSAKtCkDotK0%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;2670&quot; height=&quot;453&quot; data-origin-width=&quot;2670&quot; data-origin-height=&quot;453&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;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. Behavior Tree&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3.1. BT_EnemyMelee&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1061&quot; data-origin-height=&quot;373&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b16pzb/btsISIog79l/KQqfURauskmujI6tkJFFlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b16pzb/btsISIog79l/KQqfURauskmujI6tkJFFlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b16pzb/btsISIog79l/KQqfURauskmujI6tkJFFlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb16pzb%2FbtsISIog79l%2FKQqfURauskmujI6tkJFFlK%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;1061&quot; height=&quot;373&quot; data-origin-width=&quot;1061&quot; data-origin-height=&quot;373&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 수정 후&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3.1.1. BTT_MeleeAttack&lt;/span&gt;&lt;/b&gt;&lt;/h4&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;2901&quot; data-origin-height=&quot;556&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PmKLx/btsIRdip5eT/mfq1KLKItf74FUaRNM0nPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PmKLx/btsIRdip5eT/mfq1KLKItf74FUaRNM0nPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PmKLx/btsIRdip5eT/mfq1KLKItf74FUaRNM0nPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPmKLx%2FbtsIRdip5eT%2Fmfq1KLKItf74FUaRNM0nPK%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;2901&quot; height=&quot;556&quot; data-origin-width=&quot;2901&quot; data-origin-height=&quot;556&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;468&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xLF6w/btsIQL7xYwd/tshYwLbApm0QH6aYy4JyS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xLF6w/btsIQL7xYwd/tshYwLbApm0QH6aYy4JyS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xLF6w/btsIQL7xYwd/tshYwLbApm0QH6aYy4JyS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxLF6w%2FbtsIQL7xYwd%2FtshYwLbApm0QH6aYy4JyS1%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;671&quot; height=&quot;468&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;468&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3.2. BT_EnemyRange&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3.2.1. BTT_RangeAttack&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;토근 획득 후 공격&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1860&quot; data-origin-height=&quot;499&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rTLIR/btsIRf8KUl5/q2MZ2T8PGBbNuh1VoYG3uK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rTLIR/btsIRf8KUl5/q2MZ2T8PGBbNuh1VoYG3uK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rTLIR/btsIRf8KUl5/q2MZ2T8PGBbNuh1VoYG3uK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrTLIR%2FbtsIRf8KUl5%2Fq2MZ2T8PGBbNuh1VoYG3uK%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;1860&quot; height=&quot;499&quot; data-origin-width=&quot;1860&quot; data-origin-height=&quot;499&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;2029&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cifrOQ/btsITf0AElf/MNIBmJs4kV1clyqmfsV5W0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cifrOQ/btsITf0AElf/MNIBmJs4kV1clyqmfsV5W0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cifrOQ/btsITf0AElf/MNIBmJs4kV1clyqmfsV5W0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcifrOQ%2FbtsITf0AElf%2FMNIBmJs4kV1clyqmfsV5W0%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;2029&quot; height=&quot;700&quot; data-origin-width=&quot;2029&quot; data-origin-height=&quot;700&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;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <category>attack</category>
      <category>behavior</category>
      <category>Mutex</category>
      <category>Task</category>
      <category>token</category>
      <category>tree</category>
      <category>UE5</category>
      <category>Unreal</category>
      <category>공격</category>
      <category>언리얼</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/375</guid>
      <comments>https://kyunstudio.tistory.com/375#entry375comment</comments>
      <pubDate>Thu, 1 Aug 2024 21:55:17 +0900</pubDate>
    </item>
    <item>
      <title>[UE5] C++와 블루프린트 연결 방법 (C++에서 Blueprint Event 시점 제어, BlueprintNativeEvent, BlueprintImplementableEvent)</title>
      <link>https://kyunstudio.tistory.com/374</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;0. 서문&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-message-id=&quot;0213d4d8-f1b9-4e24-a5d0-94a069de38c6&quot; data-message-author-role=&quot;assistant&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C++ 함수의 동작 중 Blueprint의 이벤트를 발생시키는 방법을 찾는 과정에서 Delegate와 UFUNCTION을 사용하여 C++과 Blueprint를 연결하는 방법을 발견했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히, C++에서 'BlueprintNativeEvent'와 'BlueprintImplementableEvent'를 사용하는 과정을 정리해 보았습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1. 함수 생성&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2408&quot; data-origin-height=&quot;1279&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkoFiL/btsIBA5FZwq/blj8gNYyQ4c5WWKgDjqLNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkoFiL/btsIBA5FZwq/blj8gNYyQ4c5WWKgDjqLNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkoFiL/btsIBA5FZwq/blj8gNYyQ4c5WWKgDjqLNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkoFiL%2FbtsIBA5FZwq%2Fblj8gNYyQ4c5WWKgDjqLNK%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;2408&quot; height=&quot;1279&quot; data-origin-width=&quot;2408&quot; data-origin-height=&quot;1279&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.1. 블루프린트 구현가능 이벤트 생성 (BlueprintImplementableEvent)&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.1.1. 함수 생성 방법&lt;/h4&gt;
&lt;pre id=&quot;code_1721136473217&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public:
	UFUNCTION(BlueprintImplementableEvent)
	void AttackDone();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 방법의 경우, 함수의 구현 없이 활용한다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.1.2. Blueprint 활용 방법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Event 혹은 Function 동작이 필요한 경우 호출을 통해 활용이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 예시: Attack Function 동작 중간, AttackDone() 함수 동작이 필요한 경우&lt;/p&gt;
&lt;pre id=&quot;code_1721137572136&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void Attack()
{
	// ... 코드 생략
	UE_LOG(LogTemp, Display, TEXT(&quot;AttackDone Start!&quot;));
	AttackDone();
	UE_LOG(LogTemp, Display, TEXT(&quot;AttackDone Finish!&quot;));
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1.1.2.1. 단순 호출&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;848&quot; data-origin-height=&quot;224&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lLYQP/btsICjCbbYK/CKKnHdjZZeTKKda0gcZjD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lLYQP/btsICjCbbYK/CKKnHdjZZeTKKda0gcZjD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lLYQP/btsICjCbbYK/CKKnHdjZZeTKKda0gcZjD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlLYQP%2FbtsICjCbbYK%2FCKKnHdjZZeTKKda0gcZjD0%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;848&quot; height=&quot;224&quot; data-origin-width=&quot;848&quot; data-origin-height=&quot;224&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;632&quot; data-origin-height=&quot;71&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KWi8S/btsIAQ2vc7M/TfgWlFIxtrsGahhNCxkVq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KWi8S/btsIAQ2vc7M/TfgWlFIxtrsGahhNCxkVq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KWi8S/btsIAQ2vc7M/TfgWlFIxtrsGahhNCxkVq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKWi8S%2FbtsIAQ2vc7M%2FTfgWlFIxtrsGahhNCxkVq0%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;632&quot; height=&quot;71&quot; data-origin-width=&quot;632&quot; data-origin-height=&quot;71&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1.1.2.2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;호출 간 Async 동작이 포함되는 경우&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1648&quot; data-origin-height=&quot;337&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AWava/btsIBdQtSku/UcNioeOtrvrpeuVDbS7Rz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AWava/btsIBdQtSku/UcNioeOtrvrpeuVDbS7Rz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AWava/btsIBdQtSku/UcNioeOtrvrpeuVDbS7Rz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAWava%2FbtsIBdQtSku%2FUcNioeOtrvrpeuVDbS7Rz1%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;1648&quot; height=&quot;337&quot; data-origin-width=&quot;1648&quot; data-origin-height=&quot;337&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;71&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2Pn2B/btsICYdbZ4T/6l9b4cvtcv8SIRydCUTM90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2Pn2B/btsICYdbZ4T/6l9b4cvtcv8SIRydCUTM90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2Pn2B/btsICYdbZ4T/6l9b4cvtcv8SIRydCUTM90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2Pn2B%2FbtsICYdbZ4T%2F6l9b4cvtcv8SIRydCUTM90%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;631&quot; height=&quot;71&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;71&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1.1.3. 오류 발생 경우&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만일, 다음과 같이 함수 내부를 구현하는 경우, 오류가 발생한다.&lt;/p&gt;
&lt;pre id=&quot;code_1721137260276&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void APlayerBase::AttackDone()
{
	UE_LOG(LogTemp, Warning, TEXT(&quot;AttackDone Event!&quot;));
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1461&quot; data-origin-height=&quot;74&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T0LoN/btsIANEEOjH/xhql1plMO7M32hto8beLg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T0LoN/btsIANEEOjH/xhql1plMO7M32hto8beLg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T0LoN/btsIANEEOjH/xhql1plMO7M32hto8beLg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT0LoN%2FbtsIANEEOjH%2Fxhql1plMO7M32hto8beLg1%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;1461&quot; height=&quot;74&quot; data-origin-width=&quot;1461&quot; data-origin-height=&quot;74&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1.2. 블루프린트 네이티브 이벤트 생성 (BlueprintNativeEvent)&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1.2.1. 함수 생성 방법&lt;/h4&gt;
&lt;pre id=&quot;code_1721136433404&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public:
	UFUNCTION(BlueprintNativeEvent)
	void AttackDone();
	virtual void AttackDone_Implementation(); // 해당 코드의 유무와 무관하게 컴파일 및 동작 가능&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1721137050313&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void AttackDone_Implementation()
{
	UE_LOG(LogTemp, Warning, TEXT(&quot;AttackDone Implementation Event!&quot;));
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수의 구현이 필요한 경우, '_Implementation'을 함수 끝에 추가하는 경우 사용이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이때, 'virtual void AttackDone_Implementation()' 선언이 header에서 생략된 경우에도 동일하게 동작한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1.2.2. Blueprint 활용 방법&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 예시:&lt;span&gt;&amp;nbsp;&lt;/span&gt;Attack Function 동작 간, AttackDone() 함수 호출&lt;/p&gt;
&lt;pre id=&quot;code_1721140147688&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;void Attack()
{
	// ... 코드 생략
	UE_LOG(LogTemp, Display, TEXT(&quot;AttackDone Start!&quot;));
	AttackDone();
	UE_LOG(LogTemp, Display, TEXT(&quot;AttackDone Finish!&quot;));
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1.2.2.1. Override가 없는 경우&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;456&quot; data-origin-height=&quot;60&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpqQ0x/btsIBnyyqHL/k4EBNsMPuQBjcO68AAkigK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpqQ0x/btsIBnyyqHL/k4EBNsMPuQBjcO68AAkigK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpqQ0x/btsIBnyyqHL/k4EBNsMPuQBjcO68AAkigK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpqQ0x%2FbtsIBnyyqHL%2Fk4EBNsMPuQBjcO68AAkigK%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;456&quot; height=&quot;60&quot; data-origin-width=&quot;456&quot; data-origin-height=&quot;60&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1.2.2.2. Override(Event 생성)를 적용한 경우&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;303&quot; data-origin-height=&quot;136&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Fs58P/btsICXrPi4H/cSQ9OpB63NrsimOkykHFt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Fs58P/btsICXrPi4H/cSQ9OpB63NrsimOkykHFt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Fs58P/btsICXrPi4H/cSQ9OpB63NrsimOkykHFt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFs58P%2FbtsICXrPi4H%2FcSQ9OpB63NrsimOkykHFt1%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;303&quot; height=&quot;136&quot; data-origin-width=&quot;303&quot; data-origin-height=&quot;136&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;336&quot; data-origin-height=&quot;44&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OmFUh/btsIAtM5zvl/53xrcqBf2k4ozqBNjVYCH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OmFUh/btsIAtM5zvl/53xrcqBf2k4ozqBNjVYCH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OmFUh/btsIAtM5zvl/53xrcqBf2k4ozqBNjVYCH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOmFUh%2FbtsIAtM5zvl%2F53xrcqBf2k4ozqBNjVYCH0%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;336&quot; height=&quot;44&quot; data-origin-width=&quot;336&quot; data-origin-height=&quot;44&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;1049&quot; data-origin-height=&quot;261&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dUJ9mA/btsIBAR8IqI/2vVMRHRhR4CRkJsatclXjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dUJ9mA/btsIBAR8IqI/2vVMRHRhR4CRkJsatclXjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dUJ9mA/btsIBAR8IqI/2vVMRHRhR4CRkJsatclXjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdUJ9mA%2FbtsIBAR8IqI%2F2vVMRHRhR4CRkJsatclXjK%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;1049&quot; height=&quot;261&quot; data-origin-width=&quot;1049&quot; data-origin-height=&quot;261&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;83&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mOynC/btsICnkdESQ/zvGCJ9XL7u1GVWxkzk5Luk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mOynC/btsICnkdESQ/zvGCJ9XL7u1GVWxkzk5Luk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mOynC/btsICnkdESQ/zvGCJ9XL7u1GVWxkzk5Luk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmOynC%2FbtsICnkdESQ%2FzvGCJ9XL7u1GVWxkzk5Luk%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;635&quot; height=&quot;83&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;83&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1.2.2.3. Override(Event 생성) 후, 부모 클래스의 Attack Done을 호출 한 경우&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;467&quot; data-origin-height=&quot;729&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCyq1b/btsIA0jymuL/ijHtTyKvwCtkHBDvmTHbT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCyq1b/btsIA0jymuL/ijHtTyKvwCtkHBDvmTHbT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCyq1b/btsIA0jymuL/ijHtTyKvwCtkHBDvmTHbT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCyq1b%2FbtsIA0jymuL%2FijHtTyKvwCtkHBDvmTHbT0%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;467&quot; height=&quot;729&quot; data-origin-width=&quot;467&quot; data-origin-height=&quot;729&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;1229&quot; data-origin-height=&quot;250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M73ZN/btsICiJ5nVF/IdVlXVkIo3u4rB2Z7czZJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M73ZN/btsICiJ5nVF/IdVlXVkIo3u4rB2Z7czZJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M73ZN/btsICiJ5nVF/IdVlXVkIo3u4rB2Z7czZJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM73ZN%2FbtsICiJ5nVF%2FIdVlXVkIo3u4rB2Z7czZJ0%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;1229&quot; height=&quot;250&quot; data-origin-width=&quot;1229&quot; data-origin-height=&quot;250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;98&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AaIg9/btsIARNDNpv/mzk3jHAA5Ygri3UeEgVjc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AaIg9/btsIARNDNpv/mzk3jHAA5Ygri3UeEgVjc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AaIg9/btsIARNDNpv/mzk3jHAA5Ygri3UeEgVjc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAaIg9%2FbtsIARNDNpv%2Fmzk3jHAA5Ygri3UeEgVjc1%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;631&quot; height=&quot;98&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;98&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;1246&quot; data-origin-height=&quot;249&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IzPTR/btsIBc5hVCJ/hR51aetPBIP1Z4YpcmQnf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IzPTR/btsIBc5hVCJ/hR51aetPBIP1Z4YpcmQnf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IzPTR/btsIBc5hVCJ/hR51aetPBIP1Z4YpcmQnf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIzPTR%2FbtsIBc5hVCJ%2FhR51aetPBIP1Z4YpcmQnf1%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;1246&quot; height=&quot;249&quot; data-origin-width=&quot;1246&quot; data-origin-height=&quot;249&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eyP6jD/btsIBBKhRDP/Yp17ICnKSKq3zVZ7kNPajk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eyP6jD/btsIBBKhRDP/Yp17ICnKSKq3zVZ7kNPajk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eyP6jD/btsIBBKhRDP/Yp17ICnKSKq3zVZ7kNPajk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeyP6jD%2FbtsIBBKhRDP%2FYp17ICnKSKq3zVZ7kNPajk%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;660&quot; height=&quot;100&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;100&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 참고자료&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://forums.unrealengine.com/t/i-want-to-add-component-event-in-c/673416&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://forums.unrealengine.com/t/i-want-to-add-component-event-in-c/673416&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1721049068334&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;I want to add component event in c++&quot; data-og-description=&quot;Hi I&amp;rsquo;m converting Blueprint to c++ and i got Some problem. In Blueprint, I could call component event in actor easley but in c++ I dont know how to call it. how can i call component event in c++ Actor that owns it?&quot; data-og-host=&quot;forums.unrealengine.com&quot; data-og-source-url=&quot;https://forums.unrealengine.com/t/i-want-to-add-component-event-in-c/673416&quot; data-og-url=&quot;https://forums.unrealengine.com/t/i-want-to-add-component-event-in-c/673416&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/doP5Bm/hyWzrG0cyQ/uEAXpTbtaYc8IEvJkZkOR0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/Le3SU/hyWzDUVJly/RL14Bj4K7v7opKaQOfic1K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://forums.unrealengine.com/t/i-want-to-add-component-event-in-c/673416&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://forums.unrealengine.com/t/i-want-to-add-component-event-in-c/673416&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/doP5Bm/hyWzrG0cyQ/uEAXpTbtaYc8IEvJkZkOR0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/Le3SU/hyWzDUVJly/RL14Bj4K7v7opKaQOfic1K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;I want to add component event in c++&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Hi I&amp;rsquo;m converting Blueprint to c++ and i got Some problem. In Blueprint, I could call component event in actor easley but in c++ I dont know how to call it. how can i call component event in c++ Actor that owns it?&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;forums.unrealengine.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://forums.unrealengine.com/t/how-do-i-create-a-custom-event-in-c/286942/16&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://forums.unrealengine.com/t/how-do-i-create-a-custom-event-in-c/286942/16&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1721049310232&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;How do I create a Custom Event in C++?&quot; data-og-description=&quot;Hi! Sorry to hear you&amp;rsquo;re having trouble with this - Are you trying to do BlueprintImplementableEvent or BlueprintNativeEvent? The first one will only have behavior written in Blueprints, but the second one can also have C++ behavior. If you want a Bluepr&quot; data-og-host=&quot;forums.unrealengine.com&quot; data-og-source-url=&quot;https://forums.unrealengine.com/t/how-do-i-create-a-custom-event-in-c/286942/16&quot; data-og-url=&quot;https://forums.unrealengine.com/t/how-do-i-create-a-custom-event-in-c/286942/16&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cCz4SD/hyWCAoJZex/Tmp3JIGxdZCQSKW6KTSl8k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/eUffT/hyWCCtkbtb/lS4fvd8fxfUPkjyYpTjr4K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://forums.unrealengine.com/t/how-do-i-create-a-custom-event-in-c/286942/16&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://forums.unrealengine.com/t/how-do-i-create-a-custom-event-in-c/286942/16&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cCz4SD/hyWCAoJZex/Tmp3JIGxdZCQSKW6KTSl8k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/eUffT/hyWCCtkbtb/lS4fvd8fxfUPkjyYpTjr4K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;How do I create a Custom Event in C++?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Hi! Sorry to hear you&amp;rsquo;re having trouble with this - Are you trying to do BlueprintImplementableEvent or BlueprintNativeEvent? The first one will only have behavior written in Blueprints, but the second one can also have C++ behavior. If you want a Bluepr&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;forums.unrealengine.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://medium.com/@rdolivo/unreal-engine-how-to-declare-a-custom-event-in-c-313cc5dd975a&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://medium.com/@rdolivo/unreal-engine-how-to-declare-a-custom-event-in-c-313cc5dd975a&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1721049950423&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Unreal Engine: How to declare a custom event in C++&quot; data-og-description=&quot;This tutorial will show you how to declare a custom event in C++ and expose it to Blueprints.&quot; data-og-host=&quot;medium.com&quot; data-og-source-url=&quot;https://medium.com/@rdolivo/unreal-engine-how-to-declare-a-custom-event-in-c-313cc5dd975a&quot; data-og-url=&quot;https://medium.com/@rdolivo/unreal-engine-how-to-declare-a-custom-event-in-c-313cc5dd975a&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/3xEta/hyWztY4wx8/KiBoA3cOibwZMfUKvh2sv1/img.png?width=735&amp;amp;height=485&amp;amp;face=0_0_735_485,https://scrap.kakaocdn.net/dn/dATNyu/hyWzD8wvRx/eKo0xpMwCWMg2YrfRX4CN0/img.png?width=989&amp;amp;height=742&amp;amp;face=0_0_989_742,https://scrap.kakaocdn.net/dn/vXPfL/hyWCKETh49/cpUIGXwVkPNldudf7KDax0/img.png?width=989&amp;amp;height=742&amp;amp;face=0_0_989_742&quot;&gt;&lt;a href=&quot;https://medium.com/@rdolivo/unreal-engine-how-to-declare-a-custom-event-in-c-313cc5dd975a&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://medium.com/@rdolivo/unreal-engine-how-to-declare-a-custom-event-in-c-313cc5dd975a&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/3xEta/hyWztY4wx8/KiBoA3cOibwZMfUKvh2sv1/img.png?width=735&amp;amp;height=485&amp;amp;face=0_0_735_485,https://scrap.kakaocdn.net/dn/dATNyu/hyWzD8wvRx/eKo0xpMwCWMg2YrfRX4CN0/img.png?width=989&amp;amp;height=742&amp;amp;face=0_0_989_742,https://scrap.kakaocdn.net/dn/vXPfL/hyWCKETh49/cpUIGXwVkPNldudf7KDax0/img.png?width=989&amp;amp;height=742&amp;amp;face=0_0_989_742');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Unreal Engine: How to declare a custom event in C++&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;This tutorial will show you how to declare a custom event in C++ and expose it to Blueprints.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;medium.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/Delegates/Events/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/Delegates/Events/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1721049946953&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Events&quot; data-og-description=&quot;Delegates that can be bound to multiple functions and execute them all at once.&quot; data-og-host=&quot;docs.unrealengine.com&quot; data-og-source-url=&quot;https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/Delegates/Events/&quot; data-og-url=&quot;https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/Delegates/Events/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dPHaWd/hyWCNInFk1/ZvH1g0uSrsB5VUG2kCokI1/img.png?width=1080&amp;amp;height=608&amp;amp;face=0_0_1080_608&quot;&gt;&lt;a href=&quot;https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/Delegates/Events/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/Delegates/Events/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dPHaWd/hyWCNInFk1/ZvH1g0uSrsB5VUG2kCokI1/img.png?width=1080&amp;amp;height=608&amp;amp;face=0_0_1080_608');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Events&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Delegates that can be bound to multiple functions and execute them all at once.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.unrealengine.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://forums.unrealengine.com/t/why-cant-i-tag-a-delegate-created-with-declare-event-as-a-uproperty/343501&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://forums.unrealengine.com/t/why-cant-i-tag-a-delegate-created-with-declare-event-as-a-uproperty/343501&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1721050856152&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Why can't I tag a delegate created with DECLARE_EVENT as a UPROPERTY&quot; data-og-description=&quot;I have a class I want to add some Events to that are exposed to Blueprints. It looks something like this: UCLASS(Blueprintable, BlueprintType) class MONSTERHOCKEY_API APeriodManager : public AInfo { GENERATED_BODY() ... public: DECLARE_EVENT(APeriodManager&quot; data-og-host=&quot;forums.unrealengine.com&quot; data-og-source-url=&quot;https://forums.unrealengine.com/t/why-cant-i-tag-a-delegate-created-with-declare-event-as-a-uproperty/343501&quot; data-og-url=&quot;https://forums.unrealengine.com/t/why-cant-i-tag-a-delegate-created-with-declare-event-as-a-uproperty/343501&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/NirO9/hyWCBgSI64/Dn8ljn1tiBuemTyfMu4mV0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/L6WCZ/hyWCPGcxsx/1Z714joXt7ok7pJGylD780/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://forums.unrealengine.com/t/why-cant-i-tag-a-delegate-created-with-declare-event-as-a-uproperty/343501&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://forums.unrealengine.com/t/why-cant-i-tag-a-delegate-created-with-declare-event-as-a-uproperty/343501&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/NirO9/hyWCBgSI64/Dn8ljn1tiBuemTyfMu4mV0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/L6WCZ/hyWCPGcxsx/1Z714joXt7ok7pJGylD780/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Why can't I tag a delegate created with DECLARE_EVENT as a UPROPERTY&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I have a class I want to add some Events to that are exposed to Blueprints. It looks something like this: UCLASS(Blueprintable, BlueprintType) class MONSTERHOCKEY_API APeriodManager : public AInfo { GENERATED_BODY() ... public: DECLARE_EVENT(APeriodManager&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;forums.unrealengine.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://darkcatgame.tistory.com/66&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://darkcatgame.tistory.com/66&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1721135783996&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;UE4 C++ Delegate 정리 &amp;amp; 샘플 프로젝트&quot; data-og-description=&quot;개인적으로 UE4 C++에서 Delegate를 사용할 때 처음에 굉장히 에러를 많이 겪었습니다, 그래서 이번 포스팅은 UE4 C++에서 Delegate를 사용하는 방법에 대해 정리하고 샘플프로젝트도 만들었습니다. https&quot; data-og-host=&quot;darkcatgame.tistory.com&quot; data-og-source-url=&quot;https://darkcatgame.tistory.com/66&quot; data-og-url=&quot;https://darkcatgame.tistory.com/66&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/0COaN/hyWCNuZnVt/0sJ6kmNgJtN6WtzBHXYB81/img.png?width=800&amp;amp;height=223&amp;amp;face=0_0_800_223,https://scrap.kakaocdn.net/dn/ZOao6/hyWCGvRFYi/gjpk5CzHidTyuKCAfhHwk1/img.png?width=800&amp;amp;height=223&amp;amp;face=0_0_800_223,https://scrap.kakaocdn.net/dn/cDHU2D/hyWzE0L5r1/Fr23sdnP5KaBFP50dKVAx0/img.png?width=1179&amp;amp;height=497&amp;amp;face=0_0_1179_497&quot;&gt;&lt;a href=&quot;https://darkcatgame.tistory.com/66&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://darkcatgame.tistory.com/66&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/0COaN/hyWCNuZnVt/0sJ6kmNgJtN6WtzBHXYB81/img.png?width=800&amp;amp;height=223&amp;amp;face=0_0_800_223,https://scrap.kakaocdn.net/dn/ZOao6/hyWCGvRFYi/gjpk5CzHidTyuKCAfhHwk1/img.png?width=800&amp;amp;height=223&amp;amp;face=0_0_800_223,https://scrap.kakaocdn.net/dn/cDHU2D/hyWzE0L5r1/Fr23sdnP5KaBFP50dKVAx0/img.png?width=1179&amp;amp;height=497&amp;amp;face=0_0_1179_497');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;UE4 C++ Delegate 정리 &amp;amp; 샘플 프로젝트&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;개인적으로 UE4 C++에서 Delegate를 사용할 때 처음에 굉장히 에러를 많이 겪었습니다, 그래서 이번 포스팅은 UE4 C++에서 Delegate를 사용하는 방법에 대해 정리하고 샘플프로젝트도 만들었습니다. https&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;darkcatgame.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://woo-dev.tistory.com/331&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://woo-dev.tistory.com/331&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1721135832399&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;BlueprintNativeEvent - UFUNCTION 매크로 지정자&quot; data-og-description=&quot;UFUNCTION 매크로에 BlueprintNativeEvent 라는 지정자를 넣어줄 수 있다. 이 지정자의 의도는 기본적으로 우리가 C++에서 함수 구현을 할 것이지만, 필요하다면 블루프린트에서 함수 재정의를 할 수 있도&quot; data-og-host=&quot;woo-dev.tistory.com&quot; data-og-source-url=&quot;https://woo-dev.tistory.com/331&quot; data-og-url=&quot;https://woo-dev.tistory.com/331&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/lbUw9/hyWzzSF9aL/YrNY7XqMb6NtJ93KeJtuB1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cxwJof/hyWCIAr7A8/ISEWt4uzO0SO1nVgIU7VKk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://woo-dev.tistory.com/331&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://woo-dev.tistory.com/331&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/lbUw9/hyWzzSF9aL/YrNY7XqMb6NtJ93KeJtuB1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cxwJof/hyWCIAr7A8/ISEWt4uzO0SO1nVgIU7VKk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;BlueprintNativeEvent - UFUNCTION 매크로 지정자&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;UFUNCTION 매크로에 BlueprintNativeEvent 라는 지정자를 넣어줄 수 있다. 이 지정자의 의도는 기본적으로 우리가 C++에서 함수 구현을 할 것이지만, 필요하다면 블루프린트에서 함수 재정의를 할 수 있도&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;woo-dev.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/Blueprints/TechnicalGuide/ExtendingBlueprints/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/Blueprints/TechnicalGuide/ExtendingBlueprints/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1721136566368&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;블루프린트에 게임플레이 요소 노출시키기&quot; data-og-description=&quot;게임플레이 요소를 블루프린트에 노출시키는 게임플레이 프로그래머를 위한 기술 안내서입니다.&quot; data-og-host=&quot;docs.unrealengine.com&quot; data-og-source-url=&quot;https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/Blueprints/TechnicalGuide/ExtendingBlueprints/&quot; data-og-url=&quot;https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/Blueprints/TechnicalGuide/ExtendingBlueprints/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bUUlnI/hyWCPsOEAQ/jk0EOZKkehKscxuosHGxgk/img.png?width=1080&amp;amp;height=608&amp;amp;face=0_0_1080_608&quot;&gt;&lt;a href=&quot;https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/Blueprints/TechnicalGuide/ExtendingBlueprints/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/Blueprints/TechnicalGuide/ExtendingBlueprints/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bUUlnI/hyWCPsOEAQ/jk0EOZKkehKscxuosHGxgk/img.png?width=1080&amp;amp;height=608&amp;amp;face=0_0_1080_608');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;블루프린트에 게임플레이 요소 노출시키기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;게임플레이 요소를 블루프린트에 노출시키는 게임플레이 프로그래머를 위한 기술 안내서입니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.unrealengine.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <category>blueprint</category>
      <category>blueprintimplementableevent</category>
      <category>blueprintnativeevent</category>
      <category>c++</category>
      <category>delegate</category>
      <category>EVENT</category>
      <category>ufunction</category>
      <category>Unreal</category>
      <category>상속</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/374</guid>
      <comments>https://kyunstudio.tistory.com/374#entry374comment</comments>
      <pubDate>Tue, 16 Jul 2024 23:39:42 +0900</pubDate>
    </item>
    <item>
      <title>[Unreal] Day 16 - Damage System 구현</title>
      <link>https://kyunstudio.tistory.com/373</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;- 서문&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다양한 클래스에서 일괄적으로 활용할 수 있도록&amp;nbsp; Damage 처리에 대한 시스템을 만들었다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Enum&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.1. E_DamageResponse&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1897&quot; data-origin-height=&quot;340&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ns8nv/btsIzpcqWKB/LS92PxSrATaKG17wgCCf2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ns8nv/btsIzpcqWKB/LS92PxSrATaKG17wgCCf2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ns8nv/btsIzpcqWKB/LS92PxSrATaKG17wgCCf2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNs8nv%2FbtsIzpcqWKB%2FLS92PxSrATaKG17wgCCf2K%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;1897&quot; height=&quot;340&quot; data-origin-width=&quot;1897&quot; data-origin-height=&quot;340&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.2. E_DamageType&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1907&quot; data-origin-height=&quot;339&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KtoCy/btsIzze74jj/QAthuMRVN78yaKHr9Dk6S0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KtoCy/btsIzze74jj/QAthuMRVN78yaKHr9Dk6S0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KtoCy/btsIzze74jj/QAthuMRVN78yaKHr9Dk6S0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKtoCy%2FbtsIzze74jj%2FQAthuMRVN78yaKHr9Dk6S0%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;1907&quot; height=&quot;339&quot; data-origin-width=&quot;1907&quot; data-origin-height=&quot;339&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Structure&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1. S_DamageInfo&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;739&quot; data-origin-height=&quot;351&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMVK1h/btsIAxt7Rex/2mkbdO5o7ugls3vjohGRg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMVK1h/btsIAxt7Rex/2mkbdO5o7ugls3vjohGRg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMVK1h/btsIAxt7Rex/2mkbdO5o7ugls3vjohGRg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMVK1h%2FbtsIAxt7Rex%2F2mkbdO5o7ugls3vjohGRg1%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;739&quot; height=&quot;351&quot; data-origin-width=&quot;739&quot; data-origin-height=&quot;351&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. Blueprint Interface&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.1. BPI_Damagable&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터페이스의 경우 C++ 대신 Blueprint를 활용하여 상속이 간편하도록 만들어주었다.&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;429&quot; data-origin-height=&quot;225&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k8sUH/btsIBfzDrfd/5ViZD0c6KyvgnWD98mYX0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k8sUH/btsIBfzDrfd/5ViZD0c6KyvgnWD98mYX0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k8sUH/btsIBfzDrfd/5ViZD0c6KyvgnWD98mYX0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk8sUH%2FbtsIBfzDrfd%2F5ViZD0c6KyvgnWD98mYX0K%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;429&quot; height=&quot;225&quot; data-origin-width=&quot;429&quot; data-origin-height=&quot;225&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;h2 data-ke-size=&quot;size26&quot;&gt;4. BPC_DamageSystem&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Blueprint Component로 제작하였다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Blueprint Component의 경우 Component와 내장 함수를 포함하여 Damage System에 필요한 요소를 총합하였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7PpWp/btsIBBvx0MZ/ptgMAXCpnPdeTfWzsvQRo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7PpWp/btsIBBvx0MZ/ptgMAXCpnPdeTfWzsvQRo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7PpWp/btsIBBvx0MZ/ptgMAXCpnPdeTfWzsvQRo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7PpWp%2FbtsIBBvx0MZ%2FptgMAXCpnPdeTfWzsvQRo0%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;550&quot; height=&quot;700&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;700&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.1. TakeDamage&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2969&quot; data-origin-height=&quot;1033&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MRnBw/btsIzUXBP5Z/a4ezmhuGTnNspdHPlZyXZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MRnBw/btsIzUXBP5Z/a4ezmhuGTnNspdHPlZyXZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MRnBw/btsIzUXBP5Z/a4ezmhuGTnNspdHPlZyXZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMRnBw%2FbtsIzUXBP5Z%2Fa4ezmhuGTnNspdHPlZyXZ1%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;2969&quot; height=&quot;1033&quot; data-origin-width=&quot;2969&quot; data-origin-height=&quot;1033&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4.1.1. CanBeDamaged (Macro)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1760&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M0eur/btsIzALSbWv/MsQok1FTRFIYUOhFsSQUR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M0eur/btsIzALSbWv/MsQok1FTRFIYUOhFsSQUR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M0eur/btsIzALSbWv/MsQok1FTRFIYUOhFsSQUR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM0eur%2FbtsIzALSbWv%2FMsQok1FTRFIYUOhFsSQUR0%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;1760&quot; height=&quot;640&quot; data-origin-width=&quot;1760&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.2. Heal&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1594&quot; data-origin-height=&quot;448&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkkTBA/btsIBkAN5aY/kppETh8E8o4RJitywKEQK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkkTBA/btsIBkAN5aY/kppETh8E8o4RJitywKEQK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkkTBA/btsIBkAN5aY/kppETh8E8o4RJitywKEQK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkkTBA%2FbtsIBkAN5aY%2FkppETh8E8o4RJitywKEQK1%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;1594&quot; height=&quot;448&quot; data-origin-width=&quot;1594&quot; data-origin-height=&quot;448&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 활용 예제&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5.1. BP_Player&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5.1.1. 적용 방법&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) Component내 BPC_DamageSystem 추가&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;580&quot; data-origin-height=&quot;366&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rEDLy/btsIzMkSwEk/gMJrmFuI53MztQWJTMZ5KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rEDLy/btsIzMkSwEk/gMJrmFuI53MztQWJTMZ5KK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rEDLy/btsIzMkSwEk/gMJrmFuI53MztQWJTMZ5KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrEDLy%2FbtsIzMkSwEk%2FgMJrmFuI53MztQWJTMZ5KK%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;580&quot; height=&quot;366&quot; data-origin-width=&quot;580&quot; data-origin-height=&quot;366&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) Class Setting 내 Interface 추가&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1088&quot; data-origin-height=&quot;783&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCZ2X2/btsIAbrivtm/2mrB0RkBbiJBfQKRnAgvWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCZ2X2/btsIAbrivtm/2mrB0RkBbiJBfQKRnAgvWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCZ2X2/btsIAbrivtm/2mrB0RkBbiJBfQKRnAgvWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCZ2X2%2FbtsIAbrivtm%2F2mrB0RkBbiJBfQKRnAgvWk%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;1088&quot; height=&quot;783&quot; data-origin-width=&quot;1088&quot; data-origin-height=&quot;783&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2-1) Interface 상속 및 구현&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;- Take Damage 예제&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데미지 처리 후 Effect 발생 동작 추가&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1887&quot; data-origin-height=&quot;745&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6cetp/btsIARMwJC4/3UohI2in0E1XSa73maElGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6cetp/btsIARMwJC4/3UohI2in0E1XSa73maElGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6cetp/btsIARMwJC4/3UohI2in0E1XSa73maElGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6cetp%2FbtsIARMwJC4%2F3UohI2in0E1XSa73maElGK%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;1887&quot; height=&quot;745&quot; data-origin-width=&quot;1887&quot; data-origin-height=&quot;745&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3-1) Event 활용 방법 (Custom Event 생성)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1524&quot; data-origin-height=&quot;594&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/61fKz/btsIBj2YdOf/QBJ4AmcLkuPjj0cqlTCQd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/61fKz/btsIBj2YdOf/QBJ4AmcLkuPjj0cqlTCQd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/61fKz/btsIBj2YdOf/QBJ4AmcLkuPjj0cqlTCQd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F61fKz%2FbtsIBj2YdOf%2FQBJ4AmcLkuPjj0cqlTCQd0%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;1524&quot; height=&quot;594&quot; data-origin-width=&quot;1524&quot; data-origin-height=&quot;594&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q5ur9/btsIzbyNbKL/f4W4A4wlnbpAteGatPnHNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q5ur9/btsIzbyNbKL/f4W4A4wlnbpAteGatPnHNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q5ur9/btsIzbyNbKL/f4W4A4wlnbpAteGatPnHNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq5ur9%2FbtsIzbyNbKL%2Ff4W4A4wlnbpAteGatPnHNk%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;714&quot; height=&quot;650&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;650&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;3-2) Event 활용 방법 (event 호출)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1447&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhvBkA/btsIBzLgr9g/06kAzyBgqkwRWAnDqXHVWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhvBkA/btsIBzLgr9g/06kAzyBgqkwRWAnDqXHVWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhvBkA/btsIBzLgr9g/06kAzyBgqkwRWAnDqXHVWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhvBkA%2FbtsIBzLgr9g%2F06kAzyBgqkwRWAnDqXHVWk%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;1447&quot; height=&quot;355&quot; data-origin-width=&quot;1447&quot; data-origin-height=&quot;355&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;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <category>blueprint</category>
      <category>c++</category>
      <category>Component</category>
      <category>damage</category>
      <category>EVENT</category>
      <category>Interface</category>
      <category>System</category>
      <category>Unreal</category>
      <category>상속</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/373</guid>
      <comments>https://kyunstudio.tistory.com/373#entry373comment</comments>
      <pubDate>Mon, 15 Jul 2024 22:05:33 +0900</pubDate>
    </item>
    <item>
      <title>[UE5] Static Mesh 속성 변경 in C++ (Collision Preset)</title>
      <link>https://kyunstudio.tistory.com/372</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Static Mesh Default 값 변경&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Static Mesh 속성 중 Collision Presets의 Default 값을 변경하기 위한 방법이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2198&quot; data-origin-height=&quot;1096&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEayAx/btsIyGdCOZj/dls9mZ14MToExHKbPENXCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEayAx/btsIyGdCOZj/dls9mZ14MToExHKbPENXCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEayAx/btsIyGdCOZj/dls9mZ14MToExHKbPENXCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEayAx%2FbtsIyGdCOZj%2Fdls9mZ14MToExHKbPENXCK%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;2198&quot; height=&quot;1096&quot; data-origin-width=&quot;2198&quot; data-origin-height=&quot;1096&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;909&quot; data-origin-height=&quot;721&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAgD0z/btsIzbjVuNZ/0r4QdkhseNTUQABXcVcBFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAgD0z/btsIzbjVuNZ/0r4QdkhseNTUQABXcVcBFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAgD0z/btsIzbjVuNZ/0r4QdkhseNTUQABXcVcBFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAgD0z%2FbtsIzbjVuNZ%2F0r4QdkhseNTUQABXcVcBFk%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;909&quot; height=&quot;721&quot; data-origin-width=&quot;909&quot; data-origin-height=&quot;721&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2. Collision Profile in C++&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목적에 따라 Static Mesh Componenet에 NoCollision 속성을 부여해야 하는 경우, C++에서 다음과 같이 제어가 가능하다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1 WeaponBase.h&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;411&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpF6zY/btsIy5xipUG/oSeKcjKLMwxoLMYrq5KEM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpF6zY/btsIy5xipUG/oSeKcjKLMwxoLMYrq5KEM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpF6zY/btsIy5xipUG/oSeKcjKLMwxoLMYrq5KEM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpF6zY%2FbtsIy5xipUG%2FoSeKcjKLMwxoLMYrq5KEM0%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;686&quot; height=&quot;411&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;411&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2.2 WeaponBase.cpp&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l6Zz3/btsIy46cjoP/dd9rIUjcomLtvSCiphtdi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l6Zz3/btsIy46cjoP/dd9rIUjcomLtvSCiphtdi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l6Zz3/btsIy46cjoP/dd9rIUjcomLtvSCiphtdi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl6Zz3%2FbtsIy46cjoP%2Fdd9rIUjcomLtvSCiphtdi1%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;711&quot; height=&quot;152&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;152&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;3. 결과&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'NoCollision' 속성이 할당됨&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;1028&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuA8Cm/btsIyjpv8mG/WkM5gKpXdgHklxTYR99YNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuA8Cm/btsIyjpv8mG/WkM5gKpXdgHklxTYR99YNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuA8Cm/btsIyjpv8mG/WkM5gKpXdgHklxTYR99YNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuA8Cm%2FbtsIyjpv8mG%2FWkM5gKpXdgHklxTYR99YNk%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;990&quot; height=&quot;1028&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;1028&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;4. 참고자료&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://forums.unrealengine.com/t/staticmesh-collision-presets-collision-object-type-information-is-not-readable-from-an-object-of-ustaticmesh/739807&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://forums.unrealengine.com/t/staticmesh-collision-presets-collision-object-type-information-is-not-readable-from-an-object-of-ustaticmesh/739807&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1720920489529&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;StaticMesh Collision Presets / Collision Object type information is not readable from an Object of UStaticMesh?&quot; data-og-description=&quot;Hi! I can&amp;rsquo;t access Collision Profile / Collision Preset information, wich I set up in the Static Mesh Editor UI, in C++&amp;hellip; Where I can access this information? Even the BodySetup just shows me an Enum with BodyCollisionEnabled or Disabled / A TraceTag wi&quot; data-og-host=&quot;forums.unrealengine.com&quot; data-og-source-url=&quot;https://forums.unrealengine.com/t/staticmesh-collision-presets-collision-object-type-information-is-not-readable-from-an-object-of-ustaticmesh/739807&quot; data-og-url=&quot;https://forums.unrealengine.com/t/staticmesh-collision-presets-collision-object-type-information-is-not-readable-from-an-object-of-ustaticmesh/739807&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cCOSPq/hyWzDNIlaG/kLWAszdvULflxZVbN8QKCK/img.png?width=555&amp;amp;height=306&amp;amp;face=0_0_555_306,https://scrap.kakaocdn.net/dn/bKHpKG/hyWzwgKMBu/LfFFByjglenHGrCrCdAfQK/img.png?width=555&amp;amp;height=306&amp;amp;face=0_0_555_306,https://scrap.kakaocdn.net/dn/uv0gJ/hyWztEku8C/6FDCYjPVILHIg56ZSvp7P0/img.png?width=690&amp;amp;height=301&amp;amp;face=0_0_690_301&quot;&gt;&lt;a href=&quot;https://forums.unrealengine.com/t/staticmesh-collision-presets-collision-object-type-information-is-not-readable-from-an-object-of-ustaticmesh/739807&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://forums.unrealengine.com/t/staticmesh-collision-presets-collision-object-type-information-is-not-readable-from-an-object-of-ustaticmesh/739807&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cCOSPq/hyWzDNIlaG/kLWAszdvULflxZVbN8QKCK/img.png?width=555&amp;amp;height=306&amp;amp;face=0_0_555_306,https://scrap.kakaocdn.net/dn/bKHpKG/hyWzwgKMBu/LfFFByjglenHGrCrCdAfQK/img.png?width=555&amp;amp;height=306&amp;amp;face=0_0_555_306,https://scrap.kakaocdn.net/dn/uv0gJ/hyWztEku8C/6FDCYjPVILHIg56ZSvp7P0/img.png?width=690&amp;amp;height=301&amp;amp;face=0_0_690_301');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;StaticMesh Collision Presets / Collision Object type information is not readable from an Object of UStaticMesh?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Hi! I can&amp;rsquo;t access Collision Profile / Collision Preset information, wich I set up in the Static Mesh Editor UI, in C++&amp;hellip; Where I can access this information? Even the BodySetup just shows me an Enum with BodyCollisionEnabled or Disabled / A TraceTag wi&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;forums.unrealengine.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://forums.unrealengine.com/t/collision-presets-and-ccd-in-c/372528&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://forums.unrealengine.com/t/collision-presets-and-ccd-in-c/372528&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1720920384917&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Collision Presets and CCD in C++&quot; data-og-description=&quot;Is there a way to set collision presets in C++? Also, how to set CCD to true in C++?&quot; data-og-host=&quot;forums.unrealengine.com&quot; data-og-source-url=&quot;https://forums.unrealengine.com/t/collision-presets-and-ccd-in-c/372528&quot; data-og-url=&quot;https://forums.unrealengine.com/t/collision-presets-and-ccd-in-c/372528&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sgFbD/hyWzzxKpmb/YxOUBDx9sd7UIeTebbl5g0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/duaFNR/hyWzpPt2G4/uZMU5GcdKoUpRRdU3L36c0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://forums.unrealengine.com/t/collision-presets-and-ccd-in-c/372528&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://forums.unrealengine.com/t/collision-presets-and-ccd-in-c/372528&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sgFbD/hyWzzxKpmb/YxOUBDx9sd7UIeTebbl5g0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/duaFNR/hyWzpPt2G4/uZMU5GcdKoUpRRdU3L36c0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Collision Presets and CCD in C++&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Is there a way to set collision presets in C++? Also, how to set CCD to true in C++?&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;forums.unrealengine.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <category>c++</category>
      <category>collision</category>
      <category>collision preset</category>
      <category>default</category>
      <category>mesh</category>
      <category>Static</category>
      <category>Unreal</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/372</guid>
      <comments>https://kyunstudio.tistory.com/372#entry372comment</comments>
      <pubDate>Sun, 14 Jul 2024 10:55:24 +0900</pubDate>
    </item>
    <item>
      <title>[Unreal] Day 15 - Enemy Type 구현 (Blueprint, Behavior Tree)</title>
      <link>https://kyunstudio.tistory.com/371</link>
      <description>&lt;h2 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. Blueprint&lt;/span&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1.1. BP_EnemyBase&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 Interface 및 변수 관리&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;580&quot; data-origin-height=&quot;1070&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFX5Wp/btsIxeWIS5j/koCw4qey086e75Y3K5hpC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFX5Wp/btsIxeWIS5j/koCw4qey086e75Y3K5hpC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFX5Wp/btsIxeWIS5j/koCw4qey086e75Y3K5hpC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFX5Wp%2FbtsIxeWIS5j%2FkoCw4qey086e75Y3K5hpC0%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;580&quot; height=&quot;1070&quot; data-origin-width=&quot;580&quot; data-origin-height=&quot;1070&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1.2. BP_EnemyMelee&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Base Class 상속 및 Melee에 따른 함수 구현&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2024&quot; data-origin-height=&quot;1396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z1Zsr/btsIxGk9mk5/v5WmCWv8QBHutvkAJiAMC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z1Zsr/btsIxGk9mk5/v5WmCWv8QBHutvkAJiAMC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z1Zsr/btsIxGk9mk5/v5WmCWv8QBHutvkAJiAMC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ1Zsr%2FbtsIxGk9mk5%2Fv5WmCWv8QBHutvkAJiAMC1%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;2024&quot; height=&quot;1396&quot; data-origin-width=&quot;2024&quot; data-origin-height=&quot;1396&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1.3. BP_EnemyRange&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Base Class 상속 및 Range에 따른 동작 구현&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1639&quot; data-origin-height=&quot;807&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sLoFB/btsIywCkYAk/QPg3r4IhfKLuHfoZ6m7Ryk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sLoFB/btsIywCkYAk/QPg3r4IhfKLuHfoZ6m7Ryk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sLoFB/btsIywCkYAk/QPg3r4IhfKLuHfoZ6m7Ryk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsLoFB%2FbtsIywCkYAk%2FQPg3r4IhfKLuHfoZ6m7Ryk%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;1639&quot; height=&quot;807&quot; data-origin-width=&quot;1639&quot; data-origin-height=&quot;807&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;2. Behavior Tree&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1. BT_EnemyBase&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1510&quot; data-origin-height=&quot;753&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tlnuo/btsIx3gjZdl/aIkNxHLVE93faKI21isMvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tlnuo/btsIx3gjZdl/aIkNxHLVE93faKI21isMvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tlnuo/btsIx3gjZdl/aIkNxHLVE93faKI21isMvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftlnuo%2FbtsIx3gjZdl%2FaIkNxHLVE93faKI21isMvK%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;1510&quot; height=&quot;753&quot; data-origin-width=&quot;1510&quot; data-origin-height=&quot;753&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.1.1. BT_SubTree_Investigating&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1236&quot; data-origin-height=&quot;631&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byW6RI/btsIzdB0J4G/toym8rvM8xapTkPgLKizkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byW6RI/btsIzdB0J4G/toym8rvM8xapTkPgLKizkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byW6RI/btsIzdB0J4G/toym8rvM8xapTkPgLKizkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyW6RI%2FbtsIzdB0J4G%2Ftoym8rvM8xapTkPgLKizkK%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;1236&quot; height=&quot;631&quot; data-origin-width=&quot;1236&quot; data-origin-height=&quot;631&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.1.2. BT_SubTree_Passive&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1683&quot; data-origin-height=&quot;827&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rJyEI/btsIyAR0etK/JMp5oTfuCw6CCMYaE0KH0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rJyEI/btsIyAR0etK/JMp5oTfuCw6CCMYaE0KH0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rJyEI/btsIyAR0etK/JMp5oTfuCw6CCMYaE0KH0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrJyEI%2FbtsIyAR0etK%2FJMp5oTfuCw6CCMYaE0KH0K%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;1683&quot; height=&quot;827&quot; data-origin-width=&quot;1683&quot; data-origin-height=&quot;827&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2.2. BT_EnemyMelee&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3149&quot; data-origin-height=&quot;1036&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CgnX2/btsIx40A2dc/R7VbqWPETZ2qRQF6YC5KmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CgnX2/btsIx40A2dc/R7VbqWPETZ2qRQF6YC5KmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CgnX2/btsIx40A2dc/R7VbqWPETZ2qRQF6YC5KmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCgnX2%2FbtsIx40A2dc%2FR7VbqWPETZ2qRQF6YC5KmK%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;3149&quot; height=&quot;1036&quot; data-origin-width=&quot;3149&quot; data-origin-height=&quot;1036&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2.3. BT_EnemyRange&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1559&quot; data-origin-height=&quot;694&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E9vhV/btsIyI3jWO3/rbBEZi96OgzUtD0Wh3UM3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E9vhV/btsIyI3jWO3/rbBEZi96OgzUtD0Wh3UM3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E9vhV/btsIyI3jWO3/rbBEZi96OgzUtD0Wh3UM3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE9vhV%2FbtsIyI3jWO3%2FrbBEZi96OgzUtD0Wh3UM3K%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;1559&quot; height=&quot;694&quot; data-origin-width=&quot;1559&quot; data-origin-height=&quot;694&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=UDsbwnuD22Q&amp;amp;list=PLNwKK6OwH7eW1n49TW6-FmiZhqRn97cRy&amp;amp;index=5&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=UDsbwnuD22Q&amp;amp;list=PLNwKK6OwH7eW1n49TW6-FmiZhqRn97cRy&amp;amp;index=5&lt;/a&gt;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <category>behavior</category>
      <category>blueprint</category>
      <category>CLASS</category>
      <category>inheritance</category>
      <category>subtree</category>
      <category>tree</category>
      <category>Unreal</category>
      <category>상속</category>
      <category>서브트리</category>
      <category>트리</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/371</guid>
      <comments>https://kyunstudio.tistory.com/371#entry371comment</comments>
      <pubDate>Sat, 13 Jul 2024 22:08:16 +0900</pubDate>
    </item>
    <item>
      <title>[Unreal] Day 14 - Enemy AI 구현 (Perception)</title>
      <link>https://kyunstudio.tistory.com/370</link>
      <description>&lt;h2 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. &lt;/span&gt;Enemy AI -&lt;/b&gt;&amp;nbsp;&lt;b&gt;AI Controller (AIC_EnemyBase)&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. AI Perception&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;255&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LxG4o/btsInnLoDBh/NzTWoOKNO4KWozbyufkJmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LxG4o/btsInnLoDBh/NzTWoOKNO4KWozbyufkJmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LxG4o/btsInnLoDBh/NzTWoOKNO4KWozbyufkJmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLxG4o%2FbtsInnLoDBh%2FNzTWoOKNO4KWozbyufkJmk%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;640&quot; height=&quot;255&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;255&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.1. Senses Config 항목 추가&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;839&quot; data-origin-height=&quot;220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OJPnj/btsIk0Ellxz/gUo1JU7MHN1T6TarRX59t1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OJPnj/btsIk0Ellxz/gUo1JU7MHN1T6TarRX59t1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OJPnj/btsIk0Ellxz/gUo1JU7MHN1T6TarRX59t1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOJPnj%2FbtsIk0Ellxz%2FgUo1JU7MHN1T6TarRX59t1%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;839&quot; height=&quot;220&quot; data-origin-width=&quot;839&quot; data-origin-height=&quot;220&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-size: 1.25em;&quot;&gt;1.2. 'On Perception Updated' Event 추가&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 1.25em;&quot;&gt;- Events 추가 방법 (AI Perception 선택 후 Events 항목 선택)&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;838&quot; data-origin-height=&quot;248&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tJL1q/btsInYxAhe3/yleUKHTmCRFBlTTj93HA6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tJL1q/btsInYxAhe3/yleUKHTmCRFBlTTj93HA6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tJL1q/btsInYxAhe3/yleUKHTmCRFBlTTj93HA6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtJL1q%2FbtsInYxAhe3%2FyleUKHTmCRFBlTTj93HA6K%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;838&quot; height=&quot;248&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;248&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Blueprint&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2579&quot; data-origin-height=&quot;1230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Iu8y6/btsIk1QOltz/tXc91zQaiEpP3r8ImGFf70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Iu8y6/btsIk1QOltz/tXc91zQaiEpP3r8ImGFf70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Iu8y6/btsIk1QOltz/tXc91zQaiEpP3r8ImGFf70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIu8y6%2FbtsIk1QOltz%2FtXc91zQaiEpP3r8ImGFf70%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;2579&quot; height=&quot;1230&quot; data-origin-width=&quot;2579&quot; data-origin-height=&quot;1230&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;&lt;br /&gt;1.2.1. 'CanSenseActor' 함수 구현&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- input&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;839&quot; data-origin-height=&quot;112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Hubhh/btsInl7RSor/OHIOs9ecnAHAVFqF2JJqp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Hubhh/btsInl7RSor/OHIOs9ecnAHAVFqF2JJqp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Hubhh/btsInl7RSor/OHIOs9ecnAHAVFqF2JJqp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHubhh%2FbtsInl7RSor%2FOHIOs9ecnAHAVFqF2JJqp0%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;839&quot; height=&quot;112&quot; data-origin-width=&quot;839&quot; data-origin-height=&quot;112&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Output&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;107&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czOZpJ/btsIlFs4kwf/MUyvQRfCOg4GjH6Ux1qUM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czOZpJ/btsIlFs4kwf/MUyvQRfCOg4GjH6Ux1qUM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czOZpJ/btsIlFs4kwf/MUyvQRfCOg4GjH6Ux1qUM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczOZpJ%2FbtsIlFs4kwf%2FMUyvQRfCOg4GjH6Ux1qUM0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;107&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;107&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Blueprint&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2639&quot; data-origin-height=&quot;744&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHm7CH/btsImNjl0xA/SRdVyPEuVq315XcTFbDLJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHm7CH/btsImNjl0xA/SRdVyPEuVq315XcTFbDLJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHm7CH/btsImNjl0xA/SRdVyPEuVq315XcTFbDLJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHm7CH%2FbtsImNjl0xA%2FSRdVyPEuVq315XcTFbDLJ0%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;2639&quot; height=&quot;744&quot; data-origin-width=&quot;2639&quot; data-origin-height=&quot;744&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;1.2.1. 'HandleSensedSight' 함수 구현&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 동작:&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;'Passive', 'Investigating' State인 경우, 'Attack' State로 전환&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- Input&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;80&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WRGGw/btsInYdhD1J/dsbezf5PG2SQbNao3irCU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WRGGw/btsInYdhD1J/dsbezf5PG2SQbNao3irCU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WRGGw/btsInYdhD1J/dsbezf5PG2SQbNao3irCU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWRGGw%2FbtsInYdhD1J%2Fdsbezf5PG2SQbNao3irCU0%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;705&quot; height=&quot;80&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;80&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- Blueprint&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;1690&quot; data-origin-height=&quot;525&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kUBSJ/btsIll9ujvO/8zv7RkoSlDpOvUXzm9kogK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kUBSJ/btsIll9ujvO/8zv7RkoSlDpOvUXzm9kogK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kUBSJ/btsIll9ujvO/8zv7RkoSlDpOvUXzm9kogK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkUBSJ%2FbtsIll9ujvO%2F8zv7RkoSlDpOvUXzm9kogK%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;1690&quot; height=&quot;525&quot; data-origin-width=&quot;1690&quot; data-origin-height=&quot;525&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;1.2.1.1. 'GetCurrentState' 함수 구현&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 목적: Blackboard(BB_EnemyBase)의 State 반환&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- Output&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;82&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dO0VOL/btsIlym13us/BNkCuNZcsQbS0aUKHzOCV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dO0VOL/btsIlym13us/BNkCuNZcsQbS0aUKHzOCV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dO0VOL/btsIlym13us/BNkCuNZcsQbS0aUKHzOCV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdO0VOL%2FbtsIlym13us%2FBNkCuNZcsQbS0aUKHzOCV1%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;704&quot; height=&quot;82&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;82&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- Blueprint&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;1107&quot; data-origin-height=&quot;380&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/P29nk/btsIlfuufMK/2GlnAc1hQV718BckKgnyVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/P29nk/btsIlfuufMK/2GlnAc1hQV718BckKgnyVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/P29nk/btsIlfuufMK/2GlnAc1hQV718BckKgnyVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FP29nk%2FbtsIlfuufMK%2F2GlnAc1hQV718BckKgnyVk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1107&quot; height=&quot;380&quot; data-origin-width=&quot;1107&quot; data-origin-height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;1.2.1.2. 'SetStateAsAttacking' 함수 구현&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 목적:&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;1) Blackboard 내 'AttackTarget' 변수 할당&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&gt;2) Blackboard 내 'State' 변수 할당&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- Input&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;78&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KRKN5/btsInowLdFx/hFlZHbP6KnY5loXW28hn3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KRKN5/btsInowLdFx/hFlZHbP6KnY5loXW28hn3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KRKN5/btsInowLdFx/hFlZHbP6KnY5loXW28hn3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKRKN5%2FbtsInowLdFx%2FhFlZHbP6KnY5loXW28hn3k%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;781&quot; height=&quot;78&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;78&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- Blueprint&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;2224&quot; data-origin-height=&quot;531&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dRePsd/btsInvJjCZQ/UkgFIuZKLuWWSe040UJNwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dRePsd/btsInvJjCZQ/UkgFIuZKLuWWSe040UJNwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dRePsd/btsInvJjCZQ/UkgFIuZKLuWWSe040UJNwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdRePsd%2FbtsInvJjCZQ%2FUkgFIuZKLuWWSe040UJNwk%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;2224&quot; height=&quot;531&quot; data-origin-width=&quot;2224&quot; data-origin-height=&quot;531&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;1.2.2. 'HandleSensedSound' 함수 구현&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- Input&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;71&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vKRan/btsImCCriCv/tt26PTeXzqFzI43BzPNUN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vKRan/btsImCCriCv/tt26PTeXzqFzI43BzPNUN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vKRan/btsImCCriCv/tt26PTeXzqFzI43BzPNUN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvKRan%2FbtsImCCriCv%2Ftt26PTeXzqFzI43BzPNUN1%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;702&quot; height=&quot;71&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;71&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- Blueprint&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;1313&quot; data-origin-height=&quot;359&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XJG3P/btsImftKq3v/PfMRdPuxaDncaEw03e93fK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XJG3P/btsImftKq3v/PfMRdPuxaDncaEw03e93fK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XJG3P/btsImftKq3v/PfMRdPuxaDncaEw03e93fK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXJG3P%2FbtsImftKq3v%2FPfMRdPuxaDncaEw03e93fK%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;1313&quot; height=&quot;359&quot; data-origin-width=&quot;1313&quot; data-origin-height=&quot;359&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;1.2.2.1 'SetStateAsInvestigating' 함수 구현&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- Input&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;71&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vKRan/btsImCCriCv/tt26PTeXzqFzI43BzPNUN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vKRan/btsImCCriCv/tt26PTeXzqFzI43BzPNUN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vKRan/btsImCCriCv/tt26PTeXzqFzI43BzPNUN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvKRan%2FbtsImCCriCv%2Ftt26PTeXzqFzI43BzPNUN1%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;702&quot; height=&quot;71&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;71&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- Blueprint&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;1656&quot; data-origin-height=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pDhPU/btsInmZZUf7/F36Qjv3AtTotm87Lx7w04k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pDhPU/btsInmZZUf7/F36Qjv3AtTotm87Lx7w04k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pDhPU/btsInmZZUf7/F36Qjv3AtTotm87Lx7w04k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpDhPU%2FbtsInmZZUf7%2FF36Qjv3AtTotm87Lx7w04k%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;1656&quot; height=&quot;580&quot; data-origin-width=&quot;1656&quot; data-origin-height=&quot;580&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;1.2.3. 'HandleSensedDamage' 함수 구현&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- Input&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;80&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WRGGw/btsInYdhD1J/dsbezf5PG2SQbNao3irCU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WRGGw/btsInYdhD1J/dsbezf5PG2SQbNao3irCU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WRGGw/btsInYdhD1J/dsbezf5PG2SQbNao3irCU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWRGGw%2FbtsInYdhD1J%2Fdsbezf5PG2SQbNao3irCU0%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;705&quot; height=&quot;80&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;80&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Blueprint&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1359&quot; data-origin-height=&quot;385&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u8lSm/btsIlfgXCYq/zW4zHbKuGjUdE4a55bfKc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u8lSm/btsIlfgXCYq/zW4zHbKuGjUdE4a55bfKc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u8lSm/btsIlfgXCYq/zW4zHbKuGjUdE4a55bfKc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu8lSm%2FbtsIlfgXCYq%2FzW4zHbKuGjUdE4a55bfKc1%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;1359&quot; height=&quot;385&quot; data-origin-width=&quot;1359&quot; data-origin-height=&quot;385&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;h2 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Enemy AI -&lt;/b&gt;&amp;nbsp;&lt;b&gt;Behavior Tree&lt;/b&gt;&lt;/h2&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;TODO....&lt;br /&gt;&lt;br /&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. TODO&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Delegate&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(1) C++ Class 내 Event 선언 및 Bind를 통한 활용 구현&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dev.epicgames.com/documentation/ko-kr/unreal-engine/delegates-and-lamba-functions-in-unreal-engine?application_version=5.4&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://dev.epicgames.com/documentation/ko-kr/unreal-engine/delegates-and-lamba-functions-in-unreal-engine?application_version=5.4&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- AIC&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(1) Event에 따른 Blackboard 변수 제어 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(2) 초기 Delay 적용이 생략된 경우 Error 발생, compile 순서에 따른 버그로 추정됨 -&amp;gt; 추후에 Error 원인을 분석해서 개선&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- behavior&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(1) perception 기능 추가 중&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(2) EQS 기능 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- EnemyBase&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(1) 근거리, 원거리에 따른 상속 구현&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <category>Ai</category>
      <category>behavior</category>
      <category>Behavior Tree</category>
      <category>blackboard</category>
      <category>blueprint interface</category>
      <category>c++</category>
      <category>CLASS</category>
      <category>Controller</category>
      <category>Unreal</category>
      <category>상속</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/370</guid>
      <comments>https://kyunstudio.tistory.com/370#entry370comment</comments>
      <pubDate>Thu, 4 Jul 2024 01:39:49 +0900</pubDate>
    </item>
    <item>
      <title>[Unreal] Day 13 - Enemy AI 구현 (Behavior Tree)</title>
      <link>https://kyunstudio.tistory.com/369</link>
      <description>&lt;h2 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1. Enemy AI&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;1. Blackboard (BB_EnemyBase)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Behavior Tree에서 활용할 변수 선언&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;186&quot; data-origin-height=&quot;193&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VS1FV/btsIkradEob/YfSI3ol1ERCjnGq4Mmxtkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VS1FV/btsIkradEob/YfSI3ol1ERCjnGq4Mmxtkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VS1FV/btsIkradEob/YfSI3ol1ERCjnGq4Mmxtkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVS1FV%2FbtsIkradEob%2FYfSI3ol1ERCjnGq4Mmxtkk%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;186&quot; height=&quot;193&quot; data-origin-width=&quot;186&quot; data-origin-height=&quot;193&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;2. Blueprint Interface (BPI_EnemyAI)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;357&quot; data-origin-height=&quot;327&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bID5OU/btsIlltALCc/jBLJvwwJGI0jWXIbiNeGoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bID5OU/btsIlltALCc/jBLJvwwJGI0jWXIbiNeGoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bID5OU/btsIlltALCc/jBLJvwwJGI0jWXIbiNeGoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbID5OU%2FbtsIlltALCc%2FjBLJvwwJGI0jWXIbiNeGoK%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;357&quot; height=&quot;327&quot; data-origin-width=&quot;357&quot; data-origin-height=&quot;327&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;3. Behavior Tree (BT_EnemyBase)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1945&quot; data-origin-height=&quot;771&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckwaWp/btsIlC2WPUD/fHbvSUexaXewzgy0aJ7Am0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckwaWp/btsIlC2WPUD/fHbvSUexaXewzgy0aJ7Am0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckwaWp/btsIlC2WPUD/fHbvSUexaXewzgy0aJ7Am0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckwaWp%2FbtsIlC2WPUD%2FfHbvSUexaXewzgy0aJ7Am0%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;1945&quot; height=&quot;771&quot; data-origin-width=&quot;1945&quot; data-origin-height=&quot;771&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;3.1. BTT_SetMovementSpeed&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;959&quot; data-origin-height=&quot;319&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bL8OA1/btsIj9gCYCf/v6OH5XRsRRky6yDDHbRZhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bL8OA1/btsIj9gCYCf/v6OH5XRsRRky6yDDHbRZhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bL8OA1/btsIj9gCYCf/v6OH5XRsRRky6yDDHbRZhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbL8OA1%2FbtsIj9gCYCf%2Fv6OH5XRsRRky6yDDHbRZhk%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;959&quot; height=&quot;319&quot; data-origin-width=&quot;959&quot; data-origin-height=&quot;319&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;3.2. BTT_ClearFocus&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1007&quot; data-origin-height=&quot;258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NGDu6/btsIkGdXUri/ZyFXQw7QeWkimqMSEs3Nkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NGDu6/btsIkGdXUri/ZyFXQw7QeWkimqMSEs3Nkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NGDu6/btsIkGdXUri/ZyFXQw7QeWkimqMSEs3Nkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNGDu6%2FbtsIkGdXUri%2FZyFXQw7QeWkimqMSEs3Nkk%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;1007&quot; height=&quot;258&quot; data-origin-width=&quot;1007&quot; data-origin-height=&quot;258&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;3.3. BTT_FocusTarget&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1294&quot; data-origin-height=&quot;379&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kJ7Z1/btsIkM6jGaJ/J0JKMhwS9xktpqWUs8LK8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kJ7Z1/btsIkM6jGaJ/J0JKMhwS9xktpqWUs8LK8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kJ7Z1/btsIkM6jGaJ/J0JKMhwS9xktpqWUs8LK8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkJ7Z1%2FbtsIkM6jGaJ%2FJ0JKMhwS9xktpqWUs8LK8K%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;1294&quot; height=&quot;379&quot; data-origin-width=&quot;1294&quot; data-origin-height=&quot;379&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;3.4. BTT_DefaultAttack&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1450&quot; data-origin-height=&quot;514&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BxChW/btsImeAv5c2/b6wLllJWqDfvKIIkX95ark/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BxChW/btsImeAv5c2/b6wLllJWqDfvKIIkX95ark/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BxChW/btsImeAv5c2/b6wLllJWqDfvKIIkX95ark/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBxChW%2FbtsImeAv5c2%2Fb6wLllJWqDfvKIIkX95ark%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;1450&quot; height=&quot;514&quot; data-origin-width=&quot;1450&quot; data-origin-height=&quot;514&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;4. AI Controller (AIC_EnemyBase)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Controller 동작:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) Blackboard 변수 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) TODO: Event에 따른 Blackboard 변수 제어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+) 초기 Delay 적용이 생략된 경우 Error 발생 (compile 순서에 따른 버그로 추정됨 -&amp;gt; 추후에 Error 원인을 분석해서 개선해보도록 하자)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2015&quot; data-origin-height=&quot;477&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dXMXfU/btsIlCaMmcD/lwueZ39LKRCbp3b2KWqJlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dXMXfU/btsIlCaMmcD/lwueZ39LKRCbp3b2KWqJlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dXMXfU/btsIlCaMmcD/lwueZ39LKRCbp3b2KWqJlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdXMXfU%2FbtsIlCaMmcD%2FlwueZ39LKRCbp3b2KWqJlK%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;2015&quot; height=&quot;477&quot; data-origin-width=&quot;2015&quot; data-origin-height=&quot;477&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;5. Character Blueprint (BP_EnemyBase)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 동작:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) Attack: BPI 호출 시, Montage 동작 함수 구현&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1889&quot; data-origin-height=&quot;645&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c5EMh9/btsIlWz6nqq/jDQQKwGZo1mL42wIjrtPi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c5EMh9/btsIlWz6nqq/jDQQKwGZo1mL42wIjrtPi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c5EMh9/btsIlWz6nqq/jDQQKwGZo1mL42wIjrtPi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc5EMh9%2FbtsIlWz6nqq%2FjDQQKwGZo1mL42wIjrtPi1%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;1889&quot; height=&quot;645&quot; data-origin-width=&quot;1889&quot; data-origin-height=&quot;645&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TODO: 추후 Interface를 만들어 C++ Base Class에서 기초 Animation을 함수화 하는 방향 고민 중&lt;/p&gt;
&lt;pre id=&quot;code_1719937790685&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#pragma once

#include &quot;WeaponBase.h&quot;
#include &quot;CoreMinimal.h&quot;
#include &quot;GameFramework/Character.h&quot;
#include &quot;EnemyBase.generated.h&quot;

class AWeaponBase;
DECLARE_DELEGATE(FDele_Single);

UCLASS()
class OPENWORLD_3D_V0_3_API AEnemyBase : public ACharacter
{
	GENERATED_BODY()

public:
	// Sets default values for this character's properties
	AEnemyBase();

private:
	UPROPERTY(EditAnyWhere, BlueprintReadWrite, Category = &quot;Equip&quot;, meta = (AllowPrivateAccess = &quot;true&quot;))
	AWeaponBase* WeaponActor;
	UPROPERTY(EditAnyWhere, BlueprintReadWrite, Category = &quot;Equip&quot;, meta = (AllowPrivateAccess = &quot;true&quot;))
	bool bIsWieldingWeapon;

	FDele_Single Fuc_DeleSingle;
protected:

};&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. TODO&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Delegate&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(1) C++ Class 내 Event 선언 및 Bind를 통한 활용 구현&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dev.epicgames.com/documentation/ko-kr/unreal-engine/delegates-and-lamba-functions-in-unreal-engine?application_version=5.4&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://dev.epicgames.com/documentation/ko-kr/unreal-engine/delegates-and-lamba-functions-in-unreal-engine?application_version=5.4&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- AIC&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(1) Event에 따른 Blackboard 변수 제어 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(2) 초기 Delay 적용이 생략된 경우 Error 발생, compile 순서에 따른 버그로 추정됨 -&amp;gt; 추후에 Error 원인을 분석해서 개선&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- behavior&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(1) perception 기능 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(2) EQS 기능 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- EnemyBase&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(1) 근거리, 원거리에 따른 상속 구현&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <category>Ai</category>
      <category>behavior</category>
      <category>Behavior Tree</category>
      <category>blackboard</category>
      <category>blueprint interface</category>
      <category>c++</category>
      <category>CLASS</category>
      <category>Controller</category>
      <category>Unreal</category>
      <category>상속</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/369</guid>
      <comments>https://kyunstudio.tistory.com/369#entry369comment</comments>
      <pubDate>Wed, 3 Jul 2024 01:36:05 +0900</pubDate>
    </item>
    <item>
      <title>[Unreal] Day 12 - Enemy AI 반복개발</title>
      <link>https://kyunstudio.tistory.com/368</link>
      <description>&lt;h2 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1. Enemy AI&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. Blueprint 생성&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;2. Nav Mesh Bounds Volume 생성&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;3. Animation Montage 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2. Task&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1. BTT_SetMovementSpeed&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;2. BTT_ClearFocus&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;3. BTT_FocusTarget&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;4. BTT_FocusTarget&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3. Behavior Tree&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1. Enemy AI&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1. Blueprint 생성&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;963&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cF7wBG/btsIjb6cLoQ/ci5E2ifBkluDz6K7KKkPzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cF7wBG/btsIjb6cLoQ/ci5E2ifBkluDz6K7KKkPzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cF7wBG/btsIjb6cLoQ/ci5E2ifBkluDz6K7KKkPzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcF7wBG%2FbtsIjb6cLoQ%2Fci5E2ifBkluDz6K7KKkPzk%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;1464&quot; height=&quot;963&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;963&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 애니메이션 오류 시 옵션 변경&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bC6eAB/btsIiwJCK54/LlS90Ea4BbxWMeLKe1SGz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bC6eAB/btsIiwJCK54/LlS90Ea4BbxWMeLKe1SGz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bC6eAB/btsIiwJCK54/LlS90Ea4BbxWMeLKe1SGz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbC6eAB%2FbtsIiwJCK54%2FLlS90Ea4BbxWMeLKe1SGz1%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;779&quot; height=&quot;112&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;112&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;2. Nav Mesh Bounds Volume 생성&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;407&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qNOLx/btsIjyz4AsP/u1kXQQ6VXHKE2Ikxcjefh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qNOLx/btsIjyz4AsP/u1kXQQ6VXHKE2Ikxcjefh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qNOLx/btsIjyz4AsP/u1kXQQ6VXHKE2Ikxcjefh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqNOLx%2FbtsIjyz4AsP%2Fu1kXQQ6VXHKE2Ikxcjefh1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;407&quot; height=&quot;384&quot; data-origin-width=&quot;407&quot; data-origin-height=&quot;384&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;1264&quot; data-origin-height=&quot;1228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lTvx4/btsIiRNDDtA/D9cGom8YtKxTqXRLYi5ZKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lTvx4/btsIiRNDDtA/D9cGom8YtKxTqXRLYi5ZKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lTvx4/btsIiRNDDtA/D9cGom8YtKxTqXRLYi5ZKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlTvx4%2FbtsIiRNDDtA%2FD9cGom8YtKxTqXRLYi5ZKk%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;1264&quot; height=&quot;1228&quot; data-origin-width=&quot;1264&quot; data-origin-height=&quot;1228&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;3. Animation Montage 생성&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2305&quot; data-origin-height=&quot;331&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DR6Sr/btsIkP1TZ85/2M7KiHbOYK7WUKK8hrKQl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DR6Sr/btsIkP1TZ85/2M7KiHbOYK7WUKK8hrKQl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DR6Sr/btsIkP1TZ85/2M7KiHbOYK7WUKK8hrKQl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDR6Sr%2FbtsIkP1TZ85%2F2M7KiHbOYK7WUKK8hrKQl0%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;2305&quot; height=&quot;331&quot; data-origin-width=&quot;2305&quot; data-origin-height=&quot;331&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;2020&quot; data-origin-height=&quot;878&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kT6sp/btsIiVWIOBP/IwGqKkILglXVKAs1kxjQRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kT6sp/btsIiVWIOBP/IwGqKkILglXVKAs1kxjQRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kT6sp/btsIiVWIOBP/IwGqKkILglXVKAs1kxjQRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkT6sp%2FbtsIiVWIOBP%2FIwGqKkILglXVKAs1kxjQRk%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;2020&quot; height=&quot;878&quot; data-origin-width=&quot;2020&quot; data-origin-height=&quot;878&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2. Task&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1. BTT_SetMovementSpeed&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;974&quot; data-origin-height=&quot;307&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDSTNq/btsIjMdZzaE/PjGyIEHx3ticn1HG9bJJ60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDSTNq/btsIjMdZzaE/PjGyIEHx3ticn1HG9bJJ60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDSTNq/btsIjMdZzaE/PjGyIEHx3ticn1HG9bJJ60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDSTNq%2FbtsIjMdZzaE%2FPjGyIEHx3ticn1HG9bJJ60%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;974&quot; height=&quot;307&quot; data-origin-width=&quot;974&quot; data-origin-height=&quot;307&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;2. BTT_ClearFocus&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;993&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2pPCJ/btsIjL689Q8/Qaf12lkUQEJJpIPe5iTyBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2pPCJ/btsIjL689Q8/Qaf12lkUQEJJpIPe5iTyBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2pPCJ/btsIjL689Q8/Qaf12lkUQEJJpIPe5iTyBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2pPCJ%2FbtsIjL689Q8%2FQaf12lkUQEJJpIPe5iTyBk%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;993&quot; height=&quot;257&quot; data-origin-width=&quot;993&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;3. BTT_FocusTarget&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1056&quot; data-origin-height=&quot;398&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ektWTL/btsIj7I0kKn/wFSAQr7yxoucZY5nak9KV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ektWTL/btsIj7I0kKn/wFSAQr7yxoucZY5nak9KV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ektWTL/btsIj7I0kKn/wFSAQr7yxoucZY5nak9KV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FektWTL%2FbtsIj7I0kKn%2FwFSAQr7yxoucZY5nak9KV0%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;1056&quot; height=&quot;398&quot; data-origin-width=&quot;1056&quot; data-origin-height=&quot;398&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;4. BTT_DefaultAttack&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;401&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zcmN5/btsIkfzZHUZ/dfmQkASY8vgZ0k1guIWSa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zcmN5/btsIkfzZHUZ/dfmQkASY8vgZ0k1guIWSa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zcmN5/btsIkfzZHUZ/dfmQkASY8vgZ0k1guIWSa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzcmN5%2FbtsIkfzZHUZ%2FdfmQkASY8vgZ0k1guIWSa0%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;1065&quot; height=&quot;401&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;401&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3. Behavior Tree&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1608&quot; data-origin-height=&quot;737&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwqvkq/btsIj5j7CGE/EKmnO02lTfPcoJMhdP7zT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwqvkq/btsIj5j7CGE/EKmnO02lTfPcoJMhdP7zT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwqvkq/btsIj5j7CGE/EKmnO02lTfPcoJMhdP7zT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbwqvkq%2FbtsIj5j7CGE%2FEKmnO02lTfPcoJMhdP7zT1%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;1608&quot; height=&quot;737&quot; data-origin-width=&quot;1608&quot; data-origin-height=&quot;737&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/368</guid>
      <comments>https://kyunstudio.tistory.com/368#entry368comment</comments>
      <pubDate>Mon, 1 Jul 2024 21:18:51 +0900</pubDate>
    </item>
    <item>
      <title>[Unreal] Day 11 - 반복 개발</title>
      <link>https://kyunstudio.tistory.com/367</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. Animation Import&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.1. Mixamo Asset Import&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.2. Sword Animation Import&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.2.1. Import&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.2.2. Blend Space (BS_Sword_Strafe)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.3. Rifle Animation Import&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.3.1. Blend Space (BS_Rifle_Jog&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.4 IK Lig (IK_Mixamo)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.5 IK Retargeter (RTG_Mixamo_To_Manneyquine)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. HUD&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.1. HUD Base Class 생성 (HUDBase.cpp)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.2. Widget Blueprint 생성 (WB_AimingPoint, WB_HealthBar)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.2.1. WB_AimingPoint&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.2.2. WB_HealthBar&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.2.2.1. Bind Function 구현&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.2.2.1.1. Event Construction&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.2.2.1.2. FillColorAndOpacity&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.2.2.1.3. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Player_Percent&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.3. HUD Base Blueprint 생성 (BP_OurHUD)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.3.1 Viewport 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. Input&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3.1. Input Action (IA_*)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3.2. Input Mapping Context (IMC_Default)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. Player&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.1. Input 함수 구현&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.1.1. Jump&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.1.2. Move&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.1.3. Look&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.1.4. Zoom&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.1.5. Dash&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.1.6. Attack&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. Enemy&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5.1. Enum&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5.1.1. AISense&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1299&quot; data-origin-height=&quot;315&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uw8AC/btsIiQz5TCO/tS5AU0eAURqMLaChrxPt01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uw8AC/btsIiQz5TCO/tS5AU0eAURqMLaChrxPt01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uw8AC/btsIiQz5TCO/tS5AU0eAURqMLaChrxPt01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fuw8AC%2FbtsIiQz5TCO%2FtS5AU0eAURqMLaChrxPt01%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;1299&quot; height=&quot;315&quot; data-origin-width=&quot;1299&quot; data-origin-height=&quot;315&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5.1.2. AIState&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1273&quot; data-origin-height=&quot;352&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mluyP/btsIiVuAcZW/M3gxgKyvQeWMBQ2gJK4grK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mluyP/btsIiVuAcZW/M3gxgKyvQeWMBQ2gJK4grK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mluyP/btsIiVuAcZW/M3gxgKyvQeWMBQ2gJK4grK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmluyP%2FbtsIiVuAcZW%2FM3gxgKyvQeWMBQ2gJK4grK%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;1273&quot; height=&quot;352&quot; data-origin-width=&quot;1273&quot; data-origin-height=&quot;352&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5.1.3. MovementSpeed&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1276&quot; data-origin-height=&quot;309&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JOcPA/btsIgNyngGE/rM6ULCI1jdsckkrlnMfmK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JOcPA/btsIgNyngGE/rM6ULCI1jdsckkrlnMfmK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JOcPA/btsIgNyngGE/rM6ULCI1jdsckkrlnMfmK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJOcPA%2FbtsIgNyngGE%2FrM6ULCI1jdsckkrlnMfmK0%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;1276&quot; height=&quot;309&quot; data-origin-width=&quot;1276&quot; data-origin-height=&quot;309&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5.2. BlackBoard&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1304&quot; data-origin-height=&quot;549&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nIhsq/btsIjhYtc0S/fFhrdk5achhCI2NqZFyfa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nIhsq/btsIjhYtc0S/fFhrdk5achhCI2NqZFyfa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nIhsq/btsIjhYtc0S/fFhrdk5achhCI2NqZFyfa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnIhsq%2FbtsIjhYtc0S%2FfFhrdk5achhCI2NqZFyfa0%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;1304&quot; height=&quot;549&quot; data-origin-width=&quot;1304&quot; data-origin-height=&quot;549&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5.3. AIC&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5.3.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;9. 버그 개선&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;9.1. Force Compile&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. Animation Import&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.1. Mixamo Asset Import&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;995&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCkBdn/btsIiTDht0B/EwnOVtN6ZLi8GeMWRFtSN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCkBdn/btsIiTDht0B/EwnOVtN6ZLi8GeMWRFtSN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCkBdn/btsIiTDht0B/EwnOVtN6ZLi8GeMWRFtSN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCkBdn%2FbtsIiTDht0B%2FEwnOVtN6ZLi8GeMWRFtSN1%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;586&quot; height=&quot;995&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;995&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;2341&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3Zg7h/btsIiqalASH/FWEOkdPB31RTe5j0vRP1g1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3Zg7h/btsIiqalASH/FWEOkdPB31RTe5j0vRP1g1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3Zg7h/btsIiqalASH/FWEOkdPB31RTe5j0vRP1g1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3Zg7h%2FbtsIiqalASH%2FFWEOkdPB31RTe5j0vRP1g1%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;2341&quot; height=&quot;502&quot; data-origin-width=&quot;2341&quot; data-origin-height=&quot;502&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;892&quot; data-origin-height=&quot;1095&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tqN5d/btsIhePHRGb/0dpIadAXJBxkseHU0NRKTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tqN5d/btsIhePHRGb/0dpIadAXJBxkseHU0NRKTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tqN5d/btsIhePHRGb/0dpIadAXJBxkseHU0NRKTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtqN5d%2FbtsIhePHRGb%2F0dpIadAXJBxkseHU0NRKTK%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;892&quot; height=&quot;1095&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;1095&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.2.1. Import&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1401&quot; data-origin-height=&quot;248&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BljJx/btsIgDCsAgL/b9JMCrnFlfI2HH3BYRpnq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BljJx/btsIgDCsAgL/b9JMCrnFlfI2HH3BYRpnq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BljJx/btsIgDCsAgL/b9JMCrnFlfI2HH3BYRpnq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBljJx%2FbtsIgDCsAgL%2Fb9JMCrnFlfI2HH3BYRpnq1%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;248&quot; data-origin-width=&quot;1401&quot; data-origin-height=&quot;248&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;1013&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOrlcP/btsIizdYi1S/o0ilVqSvVscrMi5EhiweFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOrlcP/btsIizdYi1S/o0ilVqSvVscrMi5EhiweFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOrlcP/btsIizdYi1S/o0ilVqSvVscrMi5EhiweFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOrlcP%2FbtsIizdYi1S%2Fo0ilVqSvVscrMi5EhiweFK%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;785&quot; height=&quot;1013&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;1013&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;1.2.2. Blend Space (BS_Sword_Strafe)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;814&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CsCEk/btsIg4M9SU8/3GLmmNW5ksIIWxjkLDljh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CsCEk/btsIg4M9SU8/3GLmmNW5ksIIWxjkLDljh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CsCEk/btsIg4M9SU8/3GLmmNW5ksIIWxjkLDljh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCsCEk%2FbtsIg4M9SU8%2F3GLmmNW5ksIIWxjkLDljh0%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;667&quot; height=&quot;814&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;814&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;2590&quot; data-origin-height=&quot;1923&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AMviO/btsIhiRTYrV/kUgbxk3MqPLmZQMUe1nKK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AMviO/btsIhiRTYrV/kUgbxk3MqPLmZQMUe1nKK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AMviO/btsIhiRTYrV/kUgbxk3MqPLmZQMUe1nKK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAMviO%2FbtsIhiRTYrV%2FkUgbxk3MqPLmZQMUe1nKK1%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;2590&quot; height=&quot;1923&quot; data-origin-width=&quot;2590&quot; data-origin-height=&quot;1923&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.3. Rifle Animation Import&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.3.1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;Blend Space (BS_Rifle_Jog&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3066&quot; data-origin-height=&quot;1932&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBAG3Z/btsIhyAbmVS/m0pUXGHQh60PiiEHpYQau0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBAG3Z/btsIhyAbmVS/m0pUXGHQh60PiiEHpYQau0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBAG3Z/btsIhyAbmVS/m0pUXGHQh60PiiEHpYQau0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBAG3Z%2FbtsIhyAbmVS%2Fm0pUXGHQh60PiiEHpYQau0%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;3066&quot; height=&quot;1932&quot; data-origin-width=&quot;3066&quot; data-origin-height=&quot;1932&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;1.4 IK Lig (IK_Mixamo)&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;650&quot; data-origin-height=&quot;356&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/be95Z7/btsIhbyEYpl/P9K08jQqXLXiMuEUKK7Kx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/be95Z7/btsIhbyEYpl/P9K08jQqXLXiMuEUKK7Kx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/be95Z7/btsIhbyEYpl/P9K08jQqXLXiMuEUKK7Kx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbe95Z7%2FbtsIhbyEYpl%2FP9K08jQqXLXiMuEUKK7Kx0%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;650&quot; height=&quot;356&quot; data-origin-width=&quot;650&quot; data-origin-height=&quot;356&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;621&quot; data-origin-height=&quot;496&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lFgII/btsIhPhnWeo/KFQy6gC6UkfsZgwR1ZGPw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lFgII/btsIhPhnWeo/KFQy6gC6UkfsZgwR1ZGPw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lFgII/btsIhPhnWeo/KFQy6gC6UkfsZgwR1ZGPw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlFgII%2FbtsIhPhnWeo%2FKFQy6gC6UkfsZgwR1ZGPw0%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;621&quot; height=&quot;496&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;496&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;598&quot; data-origin-height=&quot;498&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CgfdP/btsIhNcZKT9/kgzqMEHkkvrEknNudapo90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CgfdP/btsIhNcZKT9/kgzqMEHkkvrEknNudapo90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CgfdP/btsIhNcZKT9/kgzqMEHkkvrEknNudapo90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCgfdP%2FbtsIhNcZKT9%2FkgzqMEHkkvrEknNudapo90%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;598&quot; height=&quot;498&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;498&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;501&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BzK2i/btsIhWAIOfy/TvjZqelQgqPpTzbiL9yOWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BzK2i/btsIhWAIOfy/TvjZqelQgqPpTzbiL9yOWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BzK2i/btsIhWAIOfy/TvjZqelQgqPpTzbiL9yOWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBzK2i%2FbtsIhWAIOfy%2FTvjZqelQgqPpTzbiL9yOWk%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;501&quot; height=&quot;252&quot; data-origin-width=&quot;501&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;642&quot; data-origin-height=&quot;1414&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2HSjN/btsIiVny8nZ/Dwm56ilWBSdTwrW6gIPpt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2HSjN/btsIiVny8nZ/Dwm56ilWBSdTwrW6gIPpt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2HSjN/btsIiVny8nZ/Dwm56ilWBSdTwrW6gIPpt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2HSjN%2FbtsIiVny8nZ%2FDwm56ilWBSdTwrW6gIPpt1%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;642&quot; height=&quot;1414&quot; data-origin-width=&quot;642&quot; data-origin-height=&quot;1414&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;1.5 IK Retargeter (RTG_Mixamo_To_Manneyquine)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;673&quot; data-origin-height=&quot;1680&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lS9NC/btsIjaLD6DI/BZCwUCAkD4HTeXMKcaqg1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lS9NC/btsIjaLD6DI/BZCwUCAkD4HTeXMKcaqg1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lS9NC/btsIjaLD6DI/BZCwUCAkD4HTeXMKcaqg1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlS9NC%2FbtsIjaLD6DI%2FBZCwUCAkD4HTeXMKcaqg1K%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;673&quot; height=&quot;1680&quot; data-origin-width=&quot;673&quot; data-origin-height=&quot;1680&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;562&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bL4uMd/btsIhWHuUb9/unJDgRP5YySdqMTnIl1sa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bL4uMd/btsIhWHuUb9/unJDgRP5YySdqMTnIl1sa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bL4uMd/btsIhWHuUb9/unJDgRP5YySdqMTnIl1sa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbL4uMd%2FbtsIhWHuUb9%2FunJDgRP5YySdqMTnIl1sa0%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;662&quot; height=&quot;562&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;562&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;539&quot; data-origin-height=&quot;185&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sRkER/btsIiicu03z/TZnVQKpYiFUyvrhvEnvhhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sRkER/btsIiicu03z/TZnVQKpYiFUyvrhvEnvhhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sRkER/btsIiicu03z/TZnVQKpYiFUyvrhvEnvhhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsRkER%2FbtsIiicu03z%2FTZnVQKpYiFUyvrhvEnvhhk%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;539&quot; height=&quot;185&quot; data-origin-width=&quot;539&quot; data-origin-height=&quot;185&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;1752&quot; data-origin-height=&quot;938&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EWooq/btsIiTJ4iGu/pFkNahz2IkjpixGQPytAM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EWooq/btsIiTJ4iGu/pFkNahz2IkjpixGQPytAM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EWooq/btsIiTJ4iGu/pFkNahz2IkjpixGQPytAM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEWooq%2FbtsIiTJ4iGu%2FpFkNahz2IkjpixGQPytAM1%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;1752&quot; height=&quot;938&quot; data-origin-width=&quot;1752&quot; data-origin-height=&quot;938&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1186&quot; data-origin-height=&quot;635&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o0cSK/btsIhRTPLzE/h8HkFv6jKmPzDSISsN8Zv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o0cSK/btsIhRTPLzE/h8HkFv6jKmPzDSISsN8Zv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o0cSK/btsIhRTPLzE/h8HkFv6jKmPzDSISsN8Zv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo0cSK%2FbtsIhRTPLzE%2Fh8HkFv6jKmPzDSISsN8Zv0%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;1186&quot; height=&quot;635&quot; data-origin-width=&quot;1186&quot; data-origin-height=&quot;635&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;662&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wssho/btsIioQ8bJg/CeKcHwPQmKOhdaElkQL2C1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wssho/btsIioQ8bJg/CeKcHwPQmKOhdaElkQL2C1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wssho/btsIioQ8bJg/CeKcHwPQmKOhdaElkQL2C1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwssho%2FbtsIioQ8bJg%2FCeKcHwPQmKOhdaElkQL2C1%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;662&quot; height=&quot;419&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;419&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. HUD&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.1. HUD Base Class 생성 (HUDBase.cpp)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1906&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcxz2a/btsIjgZpYXA/kqiuYiqoI5NdYp1BPkB811/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcxz2a/btsIjgZpYXA/kqiuYiqoI5NdYp1BPkB811/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcxz2a/btsIjgZpYXA/kqiuYiqoI5NdYp1BPkB811/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbcxz2a%2FbtsIjgZpYXA%2FkqiuYiqoI5NdYp1BPkB811%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;1906&quot; height=&quot;480&quot; data-origin-width=&quot;1906&quot; data-origin-height=&quot;480&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;1198&quot; data-origin-height=&quot;734&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctwrCZ/btsIhhMkN2q/R6SvivRJVfzdhTpGf6JMkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctwrCZ/btsIhhMkN2q/R6SvivRJVfzdhTpGf6JMkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctwrCZ/btsIhhMkN2q/R6SvivRJVfzdhTpGf6JMkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctwrCZ%2FbtsIhhMkN2q%2FR6SvivRJVfzdhTpGf6JMkK%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;1198&quot; height=&quot;734&quot; data-origin-width=&quot;1198&quot; data-origin-height=&quot;734&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.2. Widget Blueprint 생성 (WB_AimingPoint, WB_HealthBar)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.2.1. WB_AimingPoint&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;519&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HvkUq/btsIhASovOc/9QaFhIaeygTfLHkVkzEQr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HvkUq/btsIhASovOc/9QaFhIaeygTfLHkVkzEQr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HvkUq/btsIhASovOc/9QaFhIaeygTfLHkVkzEQr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHvkUq%2FbtsIhASovOc%2F9QaFhIaeygTfLHkVkzEQr0%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;894&quot; height=&quot;519&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;519&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Anchor 설정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;389&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bf5ypv/btsIg0YxoGB/VhhMweTMxSgItEITGPiYQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bf5ypv/btsIg0YxoGB/VhhMweTMxSgItEITGPiYQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bf5ypv/btsIg0YxoGB/VhhMweTMxSgItEITGPiYQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf5ypv%2FbtsIg0YxoGB%2FVhhMweTMxSgItEITGPiYQK%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;552&quot; height=&quot;389&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;389&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.2.2. WB_HealthBar&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;462&quot; data-origin-height=&quot;114&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8WWQn/btsIiSdsVwW/7lQY6VggoFxlS5CWEh9tVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8WWQn/btsIiSdsVwW/7lQY6VggoFxlS5CWEh9tVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8WWQn/btsIiSdsVwW/7lQY6VggoFxlS5CWEh9tVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8WWQn%2FbtsIiSdsVwW%2F7lQY6VggoFxlS5CWEh9tVk%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;462&quot; height=&quot;114&quot; data-origin-width=&quot;462&quot; data-origin-height=&quot;114&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;466&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwaWL9/btsIgOqmAsR/ddAJ05fBg4Gknq8pcbShkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwaWL9/btsIgOqmAsR/ddAJ05fBg4Gknq8pcbShkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwaWL9/btsIgOqmAsR/ddAJ05fBg4Gknq8pcbShkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwaWL9%2FbtsIgOqmAsR%2FddAJ05fBg4Gknq8pcbShkK%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;825&quot; height=&quot;466&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;466&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;1825&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUJuBF/btsIjgSIgCN/CFJ3I6rNRM9CG1Mdz3gkJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUJuBF/btsIjgSIgCN/CFJ3I6rNRM9CG1Mdz3gkJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUJuBF/btsIjgSIgCN/CFJ3I6rNRM9CG1Mdz3gkJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUJuBF%2FbtsIjgSIgCN%2FCFJ3I6rNRM9CG1Mdz3gkJK%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;732&quot; height=&quot;1825&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;1825&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.2.2.1. Bind Function 구현 (ProgressBar 제어)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;725&quot; data-origin-height=&quot;335&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boSPj7/btsIgC4IFI9/ZigSizXTiQKbUuFkiLBTO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boSPj7/btsIgC4IFI9/ZigSizXTiQKbUuFkiLBTO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boSPj7/btsIgC4IFI9/ZigSizXTiQKbUuFkiLBTO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboSPj7%2FbtsIgC4IFI9%2FZigSizXTiQKbUuFkiLBTO0%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;725&quot; height=&quot;335&quot; data-origin-width=&quot;725&quot; data-origin-height=&quot;335&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;참조할 Player 정보를 설정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1201&quot; data-origin-height=&quot;262&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYeSgx/btsIiwn89MA/9nsEIg581mT50sq6JjnLg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYeSgx/btsIiwn89MA/9nsEIg581mT50sq6JjnLg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYeSgx/btsIiwn89MA/9nsEIg581mT50sq6JjnLg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYeSgx%2FbtsIiwn89MA%2F9nsEIg581mT50sq6JjnLg0%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;1201&quot; height=&quot;262&quot; data-origin-width=&quot;1201&quot; data-origin-height=&quot;262&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.2.2.1.1. Event Construction&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1340&quot; data-origin-height=&quot;299&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UIYCm/btsIiO92KVO/VFdnxy7t49jvQxHkOfyk50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UIYCm/btsIiO92KVO/VFdnxy7t49jvQxHkOfyk50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UIYCm/btsIiO92KVO/VFdnxy7t49jvQxHkOfyk50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUIYCm%2FbtsIiO92KVO%2FVFdnxy7t49jvQxHkOfyk50%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;1340&quot; height=&quot;299&quot; data-origin-width=&quot;1340&quot; data-origin-height=&quot;299&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.2.2.1.2. FillColorAndOpacity&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1417&quot; data-origin-height=&quot;312&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nK0xP/btsIhPPpCnw/O6voh8d28A9knbL3mkr0P0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nK0xP/btsIhPPpCnw/O6voh8d28A9knbL3mkr0P0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nK0xP/btsIhPPpCnw/O6voh8d28A9knbL3mkr0P0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnK0xP%2FbtsIhPPpCnw%2FO6voh8d28A9knbL3mkr0P0%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;1417&quot; height=&quot;312&quot; data-origin-width=&quot;1417&quot; data-origin-height=&quot;312&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.2.2.1.3. Player_Percent&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1152&quot; data-origin-height=&quot;292&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/coaE4U/btsIiwPf3Da/gILZApNbm6n9BqC4CEsV60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/coaE4U/btsIiwPf3Da/gILZApNbm6n9BqC4CEsV60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/coaE4U/btsIiwPf3Da/gILZApNbm6n9BqC4CEsV60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoaE4U%2FbtsIiwPf3Da%2FgILZApNbm6n9BqC4CEsV60%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;1152&quot; height=&quot;292&quot; data-origin-width=&quot;1152&quot; data-origin-height=&quot;292&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.3. HUD Base Blueprint 생성 (BP_OurHUD)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;801&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0RaLV/btsIhwvRq8z/tsVH98iRJYdXa8PCNlp42K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0RaLV/btsIhwvRq8z/tsVH98iRJYdXa8PCNlp42K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0RaLV/btsIhwvRq8z/tsVH98iRJYdXa8PCNlp42K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0RaLV%2FbtsIhwvRq8z%2FtsVH98iRJYdXa8PCNlp42K%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;801&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;801&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.3.1 Viewport 추가&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;429&quot; data-origin-height=&quot;653&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cD4Z8B/btsIhAdPPr0/kA2jh6jowkV4yfvUO7UzRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cD4Z8B/btsIhAdPPr0/kA2jh6jowkV4yfvUO7UzRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cD4Z8B/btsIhAdPPr0/kA2jh6jowkV4yfvUO7UzRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcD4Z8B%2FbtsIhAdPPr0%2FkA2jh6jowkV4yfvUO7UzRk%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;429&quot; height=&quot;653&quot; data-origin-width=&quot;429&quot; data-origin-height=&quot;653&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;2677&quot; data-origin-height=&quot;506&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vk2Jo/btsIhzFZZMV/hYzzlze7tOLkoms8lxaaVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vk2Jo/btsIhzFZZMV/hYzzlze7tOLkoms8lxaaVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vk2Jo/btsIhzFZZMV/hYzzlze7tOLkoms8lxaaVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvk2Jo%2FbtsIhzFZZMV%2FhYzzlze7tOLkoms8lxaaVk%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;2677&quot; height=&quot;506&quot; data-origin-width=&quot;2677&quot; data-origin-height=&quot;506&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3. Input&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;776&quot; data-origin-height=&quot;999&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bH4vbr/btsIhQ8BBs5/5MOKpSb0qzLJWVXul1rajK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bH4vbr/btsIhQ8BBs5/5MOKpSb0qzLJWVXul1rajK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bH4vbr/btsIhQ8BBs5/5MOKpSb0qzLJWVXul1rajK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbH4vbr%2FbtsIhQ8BBs5%2F5MOKpSb0qzLJWVXul1rajK%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;776&quot; height=&quot;999&quot; data-origin-width=&quot;776&quot; data-origin-height=&quot;999&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3.1. Input Action (IA_*)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1360&quot; data-origin-height=&quot;349&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buvggO/btsIiVH3bts/sma9YoCAp0xCQJ2SvCzkx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buvggO/btsIiVH3bts/sma9YoCAp0xCQJ2SvCzkx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buvggO/btsIiVH3bts/sma9YoCAp0xCQJ2SvCzkx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuvggO%2FbtsIiVH3bts%2Fsma9YoCAp0xCQJ2SvCzkx0%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;1360&quot; height=&quot;349&quot; data-origin-width=&quot;1360&quot; data-origin-height=&quot;349&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3.2. Input Mapping Context (IMC_Default)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;931&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Kgahd/btsIhikeiQl/b1hitI7UMwwUZISoySia8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Kgahd/btsIhikeiQl/b1hitI7UMwwUZISoySia8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Kgahd/btsIhikeiQl/b1hitI7UMwwUZISoySia8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKgahd%2FbtsIhikeiQl%2Fb1hitI7UMwwUZISoySia8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;463&quot; height=&quot;931&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;931&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. Player&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.1. Input 함수 구현&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;382&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xzNFD/btsIhdDpz4W/bL6LH1tLubiVxehrQBdiv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xzNFD/btsIhdDpz4W/bL6LH1tLubiVxehrQBdiv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xzNFD/btsIhdDpz4W/bL6LH1tLubiVxehrQBdiv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxzNFD%2FbtsIhdDpz4W%2FbL6LH1tLubiVxehrQBdiv0%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;785&quot; height=&quot;382&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;382&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;563&quot; data-origin-height=&quot;268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwldB2/btsIhK1ObHR/7kEFvNaFX2wKqSEMh00RSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwldB2/btsIhK1ObHR/7kEFvNaFX2wKqSEMh00RSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwldB2/btsIhK1ObHR/7kEFvNaFX2wKqSEMh00RSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwldB2%2FbtsIhK1ObHR%2F7kEFvNaFX2wKqSEMh00RSK%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;563&quot; height=&quot;268&quot; data-origin-width=&quot;563&quot; data-origin-height=&quot;268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;664&quot; data-origin-height=&quot;575&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qyO1F/btsIhvcIwZn/3VkL6AcBKmy04yGAGEGVR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qyO1F/btsIhvcIwZn/3VkL6AcBKmy04yGAGEGVR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qyO1F/btsIhvcIwZn/3VkL6AcBKmy04yGAGEGVR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqyO1F%2FbtsIhvcIwZn%2F3VkL6AcBKmy04yGAGEGVR0%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;664&quot; height=&quot;575&quot; data-origin-width=&quot;664&quot; data-origin-height=&quot;575&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;659&quot; data-origin-height=&quot;572&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H5CRx/btsIhVPwrMq/1uW2zcaq6keXkaPp5sNH20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H5CRx/btsIhVPwrMq/1uW2zcaq6keXkaPp5sNH20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H5CRx/btsIhVPwrMq/1uW2zcaq6keXkaPp5sNH20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH5CRx%2FbtsIhVPwrMq%2F1uW2zcaq6keXkaPp5sNH20%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;659&quot; height=&quot;572&quot; data-origin-width=&quot;659&quot; data-origin-height=&quot;572&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;2092&quot; data-origin-height=&quot;591&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t4ipI/btsIix1G0Fr/nOKp7mWA4MKKS1zq1K5Dj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t4ipI/btsIix1G0Fr/nOKp7mWA4MKKS1zq1K5Dj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t4ipI/btsIix1G0Fr/nOKp7mWA4MKKS1zq1K5Dj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft4ipI%2FbtsIix1G0Fr%2FnOKp7mWA4MKKS1zq1K5Dj1%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;2092&quot; height=&quot;591&quot; data-origin-width=&quot;2092&quot; data-origin-height=&quot;591&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.1.1. Jump&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Blueprint&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;415&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyUN5J/btsIiq9p3k9/ZUv80k29YLU7EI3Trm4Z4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyUN5J/btsIiq9p3k9/ZUv80k29YLU7EI3Trm4Z4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyUN5J/btsIiq9p3k9/ZUv80k29YLU7EI3Trm4Z4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyUN5J%2FbtsIiq9p3k9%2FZUv80k29YLU7EI3Trm4Z4K%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;790&quot; height=&quot;415&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;415&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;842&quot; data-origin-height=&quot;69&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7hEAg/btsIheh1Zr4/fLHRO1qtQ43z1X2TzyMIx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7hEAg/btsIheh1Zr4/fLHRO1qtQ43z1X2TzyMIx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7hEAg/btsIheh1Zr4/fLHRO1qtQ43z1X2TzyMIx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7hEAg%2FbtsIheh1Zr4%2FfLHRO1qtQ43z1X2TzyMIx1%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;842&quot; height=&quot;69&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;69&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.1.2. Move&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Blueprint&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2186&quot; data-origin-height=&quot;320&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wTOqw/btsIg1QNn2s/tsOe9d3Jroo8WQZkrKzXr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wTOqw/btsIg1QNn2s/tsOe9d3Jroo8WQZkrKzXr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wTOqw/btsIg1QNn2s/tsOe9d3Jroo8WQZkrKzXr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwTOqw%2FbtsIg1QNn2s%2FtsOe9d3Jroo8WQZkrKzXr0%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;2186&quot; height=&quot;320&quot; data-origin-width=&quot;2186&quot; data-origin-height=&quot;320&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;785&quot; data-origin-height=&quot;52&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsYbFu/btsIiTDsyjO/7pFF0JuExY9kZ1XYkr1rYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsYbFu/btsIiTDsyjO/7pFF0JuExY9kZ1XYkr1rYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsYbFu/btsIiTDsyjO/7pFF0JuExY9kZ1XYkr1rYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsYbFu%2FbtsIiTDsyjO%2F7pFF0JuExY9kZ1XYkr1rYk%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;785&quot; height=&quot;52&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;52&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;398&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nOTXt/btsIiffXb0D/nQqWCjjnm7pRT77DwkGWI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nOTXt/btsIiffXb0D/nQqWCjjnm7pRT77DwkGWI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nOTXt/btsIiffXb0D/nQqWCjjnm7pRT77DwkGWI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnOTXt%2FbtsIiffXb0D%2FnQqWCjjnm7pRT77DwkGWI0%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;398&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;398&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.1.3. Look&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Blueprint&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1035&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yed4w/btsIibxTAmA/xlPUTOSnhxHumKk6mcDw11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yed4w/btsIibxTAmA/xlPUTOSnhxHumKk6mcDw11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yed4w/btsIibxTAmA/xlPUTOSnhxHumKk6mcDw11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fyed4w%2FbtsIibxTAmA%2FxlPUTOSnhxHumKk6mcDw11%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;1035&quot; height=&quot;294&quot; data-origin-width=&quot;1035&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- C++&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;46&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLPGSs/btsIg2IHbzb/2cH6uSbjcXmkkIYNeTsjJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLPGSs/btsIg2IHbzb/2cH6uSbjcXmkkIYNeTsjJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLPGSs/btsIg2IHbzb/2cH6uSbjcXmkkIYNeTsjJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLPGSs%2FbtsIg2IHbzb%2F2cH6uSbjcXmkkIYNeTsjJ1%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;46&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;46&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;452&quot; data-origin-height=&quot;224&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AM62Z/btsIhQAKo79/iAGjxEH9cq7jT3VcBjubl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AM62Z/btsIhQAKo79/iAGjxEH9cq7jT3VcBjubl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AM62Z/btsIhQAKo79/iAGjxEH9cq7jT3VcBjubl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAM62Z%2FbtsIhQAKo79%2FiAGjxEH9cq7jT3VcBjubl1%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;452&quot; height=&quot;224&quot; data-origin-width=&quot;452&quot; data-origin-height=&quot;224&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.1.4. Zoom&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Blueprint&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;533&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0n0jF/btsIhgmpu9K/9lQIOpB2zTbxm3syuReWHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0n0jF/btsIhgmpu9K/9lQIOpB2zTbxm3syuReWHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0n0jF/btsIhgmpu9K/9lQIOpB2zTbxm3syuReWHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0n0jF%2FbtsIhgmpu9K%2F9lQIOpB2zTbxm3syuReWHk%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;1032&quot; height=&quot;533&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;533&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- C++&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;45&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CPoMW/btsIjhKSTEq/2RZQ4UXfKTPWeflKtbWQyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CPoMW/btsIjhKSTEq/2RZQ4UXfKTPWeflKtbWQyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CPoMW/btsIjhKSTEq/2RZQ4UXfKTPWeflKtbWQyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCPoMW%2FbtsIjhKSTEq%2F2RZQ4UXfKTPWeflKtbWQyK%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;773&quot; height=&quot;45&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;45&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;84&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nmTLE/btsIgOxbzIi/eYXNyuhHxNrkOC3ZXEEz60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nmTLE/btsIgOxbzIi/eYXNyuhHxNrkOC3ZXEEz60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nmTLE/btsIgOxbzIi/eYXNyuhHxNrkOC3ZXEEz60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnmTLE%2FbtsIgOxbzIi%2FeYXNyuhHxNrkOC3ZXEEz60%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;445&quot; height=&quot;84&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;84&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.1.5. Dash&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Blueprint&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2062&quot; data-origin-height=&quot;542&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blEbSe/btsIhebgKIa/Hyg2TcXleHsbKAZ7typ9Nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blEbSe/btsIhebgKIa/Hyg2TcXleHsbKAZ7typ9Nk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blEbSe/btsIhebgKIa/Hyg2TcXleHsbKAZ7typ9Nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblEbSe%2FbtsIhebgKIa%2FHyg2TcXleHsbKAZ7typ9Nk%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;2062&quot; height=&quot;542&quot; data-origin-width=&quot;2062&quot; data-origin-height=&quot;542&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- C++&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u90f3/btsIhjcn4Kd/ljz4j21rHC0dDg39hK2Ls0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u90f3/btsIhjcn4Kd/ljz4j21rHC0dDg39hK2Ls0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u90f3/btsIhjcn4Kd/ljz4j21rHC0dDg39hK2Ls0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu90f3%2FbtsIhjcn4Kd%2Fljz4j21rHC0dDg39hK2Ls0%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;789&quot; height=&quot;64&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;64&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;221&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bncN60/btsIgMzokso/OlkHN6pF5U1ZUAkJueSDp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bncN60/btsIgMzokso/OlkHN6pF5U1ZUAkJueSDp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bncN60/btsIgMzokso/OlkHN6pF5U1ZUAkJueSDp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbncN60%2FbtsIgMzokso%2FOlkHN6pF5U1ZUAkJueSDp0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;463&quot; height=&quot;221&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;221&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.1.6. Attack&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Blueprint&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1177&quot; data-origin-height=&quot;524&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjLXbJ/btsIjhD6B6I/jj3wKknKXEb4EFDHbGuAXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjLXbJ/btsIjhD6B6I/jj3wKknKXEb4EFDHbGuAXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjLXbJ/btsIjhD6B6I/jj3wKknKXEb4EFDHbGuAXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjLXbJ%2FbtsIjhD6B6I%2Fjj3wKknKXEb4EFDHbGuAXk%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;1177&quot; height=&quot;524&quot; data-origin-width=&quot;1177&quot; data-origin-height=&quot;524&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;position: absolute;&quot; 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;1482&quot; data-origin-height=&quot;979&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/coAHbW/btsIhxVIOzi/vNgOhgfS10rtenxZYcFs70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/coAHbW/btsIhxVIOzi/vNgOhgfS10rtenxZYcFs70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/coAHbW/btsIhxVIOzi/vNgOhgfS10rtenxZYcFs70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoAHbW%2FbtsIhxVIOzi%2FvNgOhgfS10rtenxZYcFs70%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;1482&quot; height=&quot;979&quot; data-origin-width=&quot;1482&quot; data-origin-height=&quot;979&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;331&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MveSq/btsIhfH1fNj/colHjHc96C4p9eZphxDN20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MveSq/btsIhfH1fNj/colHjHc96C4p9eZphxDN20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MveSq/btsIhfH1fNj/colHjHc96C4p9eZphxDN20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMveSq%2FbtsIhfH1fNj%2FcolHjHc96C4p9eZphxDN20%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;740&quot; height=&quot;331&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;331&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;3239&quot; data-origin-height=&quot;563&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dVxja7/btsIg2Cat0h/mM1O8IUGj7QXfh8jbSAUF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dVxja7/btsIg2Cat0h/mM1O8IUGj7QXfh8jbSAUF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dVxja7/btsIg2Cat0h/mM1O8IUGj7QXfh8jbSAUF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdVxja7%2FbtsIg2Cat0h%2FmM1O8IUGj7QXfh8jbSAUF0%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;3239&quot; height=&quot;563&quot; data-origin-width=&quot;3239&quot; data-origin-height=&quot;563&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;822&quot; data-origin-height=&quot;47&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9SCtn/btsIiP2cOLM/EwFpnmKL06lyyVbDiciQ1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9SCtn/btsIiP2cOLM/EwFpnmKL06lyyVbDiciQ1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9SCtn/btsIiP2cOLM/EwFpnmKL06lyyVbDiciQ1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9SCtn%2FbtsIiP2cOLM%2FEwFpnmKL06lyyVbDiciQ1K%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;822&quot; height=&quot;47&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;47&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;455&quot; data-origin-height=&quot;168&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ytS4y/btsIhSrQgvF/ofSXwXqRJzcAUwq6QqT1R0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ytS4y/btsIhSrQgvF/ofSXwXqRJzcAUwq6QqT1R0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ytS4y/btsIhSrQgvF/ofSXwXqRJzcAUwq6QqT1R0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FytS4y%2FbtsIhSrQgvF%2FofSXwXqRJzcAUwq6QqT1R0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;455&quot; height=&quot;168&quot; data-origin-width=&quot;455&quot; data-origin-height=&quot;168&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;665&quot; data-origin-height=&quot;222&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPJ6Kj/btsIiwPjgWD/vzBqk6rsDIKu8mtaQkIaqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPJ6Kj/btsIiwPjgWD/vzBqk6rsDIKu8mtaQkIaqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPJ6Kj/btsIiwPjgWD/vzBqk6rsDIKu8mtaQkIaqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPJ6Kj%2FbtsIiwPjgWD%2FvzBqk6rsDIKu8mtaQkIaqK%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;665&quot; height=&quot;222&quot; data-origin-width=&quot;665&quot; data-origin-height=&quot;222&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;416&quot; data-origin-height=&quot;57&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ce1eXS/btsIg9A9U0A/k6zvpLkHLKKkZro8FFVkmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ce1eXS/btsIg9A9U0A/k6zvpLkHLKKkZro8FFVkmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ce1eXS/btsIg9A9U0A/k6zvpLkHLKKkZro8FFVkmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fce1eXS%2FbtsIg9A9U0A%2Fk6zvpLkHLKKkZro8FFVkmK%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;416&quot; height=&quot;57&quot; data-origin-width=&quot;416&quot; data-origin-height=&quot;57&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;316&quot; data-origin-height=&quot;86&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvX0nA/btsIhNROIFO/JZK5ZVSusJ5to2xwFNd1C1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvX0nA/btsIhNROIFO/JZK5ZVSusJ5to2xwFNd1C1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvX0nA/btsIhNROIFO/JZK5ZVSusJ5to2xwFNd1C1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvX0nA%2FbtsIhNROIFO%2FJZK5ZVSusJ5to2xwFNd1C1%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;316&quot; height=&quot;86&quot; data-origin-width=&quot;316&quot; data-origin-height=&quot;86&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;738&quot; data-origin-height=&quot;267&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvx29A/btsIg9BaYqe/BPd4BhdY6vKq2VCmK9w7w1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvx29A/btsIg9BaYqe/BPd4BhdY6vKq2VCmK9w7w1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvx29A/btsIg9BaYqe/BPd4BhdY6vKq2VCmK9w7w1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbvx29A%2FbtsIg9BaYqe%2FBPd4BhdY6vKq2VCmK9w7w1%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;738&quot; height=&quot;267&quot; data-origin-width=&quot;738&quot; data-origin-height=&quot;267&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;- Animation Montage&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;659&quot; data-origin-height=&quot;847&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGNdg7/btsIhzzhvnq/cYZ0QpAIQLQ3182UVsGoEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGNdg7/btsIhzzhvnq/cYZ0QpAIQLQ3182UVsGoEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGNdg7/btsIhzzhvnq/cYZ0QpAIQLQ3182UVsGoEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGNdg7%2FbtsIhzzhvnq%2FcYZ0QpAIQLQ3182UVsGoEk%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;659&quot; height=&quot;847&quot; data-origin-width=&quot;659&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;- Animation Blueprint&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1006&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWVapQ/btsIiRsbDyQ/ePnIWIefDd7a2zsKM5s0jk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWVapQ/btsIiRsbDyQ/ePnIWIefDd7a2zsKM5s0jk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWVapQ/btsIiRsbDyQ/ePnIWIefDd7a2zsKM5s0jk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWVapQ%2FbtsIiRsbDyQ%2FePnIWIefDd7a2zsKM5s0jk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1006&quot; height=&quot;328&quot; data-origin-width=&quot;1006&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Enemy Class 구현&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Retargeter&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=xT5UxPQ9Opk&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=xT5UxPQ9Opk&lt;/a&gt;&lt;/p&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;Line Trace&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://forums.unrealengine.com/t/how-would-i-use-line-trace-in-c/275534/9&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://forums.unrealengine.com/t/how-would-i-use-line-trace-in-c/275534/9&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=50h2U_d1XVc&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=50h2U_d1XVc&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/Tracing/Overview/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/Tracing/Overview/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1719752092812&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;트레이스 개요&quot; data-og-description=&quot;언리얼 엔진 4 의 트레이스 시스템 개요입니다.&quot; data-og-host=&quot;docs.unrealengine.com&quot; data-og-source-url=&quot;https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/Tracing/Overview/&quot; data-og-url=&quot;https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/Tracing/Overview/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bx610Z/hyWvPGnTrB/3weXoqo81gKgNMBTyreklK/img.png?width=1080&amp;amp;height=608&amp;amp;face=0_0_1080_608&quot;&gt;&lt;a href=&quot;https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/Tracing/Overview/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/Tracing/Overview/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bx610Z/hyWvPGnTrB/3weXoqo81gKgNMBTyreklK/img.png?width=1080&amp;amp;height=608&amp;amp;face=0_0_1080_608');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;트레이스 개요&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;언리얼 엔진 4 의 트레이스 시스템 개요입니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.unrealengine.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://forums.unrealengine.com/t/line-trace-by-channel-and-line-trace-for-objects/427388/3&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://forums.unrealengine.com/t/line-trace-by-channel-and-line-trace-for-objects/427388/3&lt;/a&gt; (channel vs object)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://forums.unrealengine.com/t/old-play-montage-node-vs-new-montage-play-and-play-anim-montage/140221&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://forums.unrealengine.com/t/old-play-montage-node-vs-new-montage-play-and-play-anim-montage/140221&lt;/a&gt; (play montage vs play anim montage)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;9. 버그 개선&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;9.1. Force Compile&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@woolzam/%EC%96%B8%EB%A6%AC%EC%96%BC-Unreal-C-%ED%81%B4%EB%9E%98%EC%8A%A4%EA%B0%80-%EC%82%AC%EB%9D%BC%EC%A7%88-%EB%95%8C&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://velog.io/@woolzam/%EC%96%B8%EB%A6%AC%EC%96%BC-Unreal-C-%ED%81%B4%EB%9E%98%EC%8A%A4%EA%B0%80-%EC%82%AC%EB%9D%BC%EC%A7%88-%EB%95%8C&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://forums.unrealengine.com/t/my-c-classes-disappear-after-reopening-the-project-why/535990/2&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://forums.unrealengine.com/t/my-c-classes-disappear-after-reopening-the-project-why/535990/2&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/367</guid>
      <comments>https://kyunstudio.tistory.com/367#entry367comment</comments>
      <pubDate>Sun, 30 Jun 2024 23:12:18 +0900</pubDate>
    </item>
    <item>
      <title>[Unreal] Day 10 - Enemy AI (Enemy Type)</title>
      <link>https://kyunstudio.tistory.com/366</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. Rifle jog 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. ABP_Manny_Range&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.1. Control Rig (Alpha = 0, for Disable Foot LK)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.2. Idle&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.3. Walk/Run&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;Montage_Rifle_Fire&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3.1 Notifies&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4. BP_Enemy_Base 상속 구현&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.1. BPI_EnemyAI&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.2. BP_Enemy_Melee&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.3. BP_Enemy_Range&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. Rifle jog 추가&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2300&quot; data-origin-height=&quot;1896&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d8YaHS/btsIeHK92Gm/ryNtLrUqY8JhkKfV6NoAFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d8YaHS/btsIeHK92Gm/ryNtLrUqY8JhkKfV6NoAFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d8YaHS/btsIeHK92Gm/ryNtLrUqY8JhkKfV6NoAFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd8YaHS%2FbtsIeHK92Gm%2FryNtLrUqY8JhkKfV6NoAFK%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;2300&quot; height=&quot;1896&quot; data-origin-width=&quot;2300&quot; data-origin-height=&quot;1896&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. ABP_Manny_Range&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Control Rig (Alpha = 0, for Disable Foot LK)&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;767&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KabMB/btsIfkIGBND/CIWrkafxB1JZAPnWYkwHyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KabMB/btsIfkIGBND/CIWrkafxB1JZAPnWYkwHyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KabMB/btsIfkIGBND/CIWrkafxB1JZAPnWYkwHyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKabMB%2FbtsIfkIGBND%2FCIWrkafxB1JZAPnWYkwHyK%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;767&quot; data-origin-width=&quot;1494&quot; data-origin-height=&quot;767&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Idle&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Li9AV/btsIfE0Zp8m/Wmg4EcxAX0oLsbSioffDZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Li9AV/btsIfE0Zp8m/Wmg4EcxAX0oLsbSioffDZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Li9AV/btsIfE0Zp8m/Wmg4EcxAX0oLsbSioffDZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLi9AV%2FbtsIfE0Zp8m%2FWmg4EcxAX0oLsbSioffDZK%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;975&quot; height=&quot;280&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;280&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Walk/Run&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1153&quot; data-origin-height=&quot;460&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyJ0OT/btsId5MvKpp/Kwcvx8eUEngAqd9KgkxDkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyJ0OT/btsId5MvKpp/Kwcvx8eUEngAqd9KgkxDkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyJ0OT/btsId5MvKpp/Kwcvx8eUEngAqd9KgkxDkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyJ0OT%2FbtsId5MvKpp%2FKwcvx8eUEngAqd9KgkxDkK%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;1153&quot; height=&quot;460&quot; data-origin-width=&quot;1153&quot; data-origin-height=&quot;460&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;figure data-ke-type=&quot;image&quot; data-ke-style=&quot;alignCenter&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Montage_Rifle_Fire&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Notifies&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2323&quot; data-origin-height=&quot;1945&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bemcPL/btsId8bnaBN/1A7h3Y4zOlSVWQpkvJNfDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bemcPL/btsId8bnaBN/1A7h3Y4zOlSVWQpkvJNfDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bemcPL/btsId8bnaBN/1A7h3Y4zOlSVWQpkvJNfDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbemcPL%2FbtsId8bnaBN%2F1A7h3Y4zOlSVWQpkvJNfDk%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;2323&quot; height=&quot;1945&quot; data-origin-width=&quot;2323&quot; data-origin-height=&quot;1945&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4. BP_Enemy_Base 상속 구현&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.1. BPI_EnemyAI&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;304&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfcdDt/btsIgDh7TNp/vMfGTTaiJcrjdkLvNhKgn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfcdDt/btsIgDh7TNp/vMfGTTaiJcrjdkLvNhKgn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfcdDt/btsIgDh7TNp/vMfGTTaiJcrjdkLvNhKgn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfcdDt%2FbtsIgDh7TNp%2FvMfGTTaiJcrjdkLvNhKgn1%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;304&quot; height=&quot;294&quot; data-origin-width=&quot;304&quot; data-origin-height=&quot;294&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.2. BP_Enemy_Melee&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2698&quot; data-origin-height=&quot;1138&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJRMmY/btsIhxVwoqW/rKckCgjOcaiDF2X8H0XcZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJRMmY/btsIhxVwoqW/rKckCgjOcaiDF2X8H0XcZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJRMmY/btsIhxVwoqW/rKckCgjOcaiDF2X8H0XcZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJRMmY%2FbtsIhxVwoqW%2FrKckCgjOcaiDF2X8H0XcZ0%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;2698&quot; height=&quot;1138&quot; data-origin-width=&quot;2698&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;4.3. BP_Enemy_Range&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Equip Weapon 전체 기능 부모 Class로 합병&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이때, Play Montage의 함수가 Interface 내에 포함되지 않는 문제 발생&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 문제 해결을 위해 C++로 Enemy_Base 클래스를 재 구현할 예정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;721&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qUX6q/btsIhf8GMbL/rKK63WxlQxPFNX33iiYb60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qUX6q/btsIhf8GMbL/rKK63WxlQxPFNX33iiYb60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qUX6q/btsIhf8GMbL/rKK63WxlQxPFNX33iiYb60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqUX6q%2FbtsIhf8GMbL%2FrKK63WxlQxPFNX33iiYb60%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;812&quot; height=&quot;721&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;721&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Blueprint 확장성을 위해 C++로 Enemy_Base 클래스 재구현&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 프로젝트 버그 수정을 위해 프로젝트 환경 재 구축&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=UDsbwnuD22Q&amp;amp;list=PLNwKK6OwH7eW1n49TW6-FmiZhqRn97cRy&amp;amp;index=5&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=UDsbwnuD22Q&amp;amp;list=PLNwKK6OwH7eW1n49TW6-FmiZhqRn97cRy&amp;amp;index=5&lt;/a&gt;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/366</guid>
      <comments>https://kyunstudio.tistory.com/366#entry366comment</comments>
      <pubDate>Sat, 29 Jun 2024 23:27:45 +0900</pubDate>
    </item>
    <item>
      <title>[Unreal] Day 9 - Enemy AI (EQS 구현)</title>
      <link>https://kyunstudio.tistory.com/365</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. Blend State 제작&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 'Direction', 'Speed'에 따라 Animation이 Blend 되도록 설정&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Animation 동작 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- '기본 모션'과 '무기 착용 모션' 간 선택 로직 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. EQS(Environment Queries System) 제작&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3.1. EQS_Strafe&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 플레이어 반경 순회 선택 로직&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3.2. EQS_FindCover&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 지형 탐색 로직&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3.3. EQS_Context_AttackTarget (Parent Class: Env Query Context Blueprint Base)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- EQS 동작 시 타겟 전달 로직&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. Behavior Tree 내 EQS 활용&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4.1. Behavior Tree Task 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4.1.1. BTT_MoveToIdealRange&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Parameter로 설정한 Player 주변 반경으로 이동&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4.2. Behavior Tree Decorator 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4.2.1. BTD_IsWithinIdealRange&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Target과 거리 측정&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4.3. Tree 내 로직 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.3.1. Strafe&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 'EQS_Strafe' 활용,&amp;nbsp; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;플레이어 주변 맴도는&lt;span&gt; 로직 구현&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.3.2. FindCover&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 'EQS_FindCover' 활용, 주변 지형과 상호작용하는 로직 구현&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. Blend State 제작&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 'Direction', 'Speed'에 따라 Animation이 Blend 되도록 설정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2301&quot; data-origin-height=&quot;1901&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dRejeO/btsIe2GSZfg/TkqtqIzTBJXq3zlb1uz8Pk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dRejeO/btsIe2GSZfg/TkqtqIzTBJXq3zlb1uz8Pk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dRejeO/btsIe2GSZfg/TkqtqIzTBJXq3zlb1uz8Pk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdRejeO%2FbtsIe2GSZfg%2FTkqtqIzTBJXq3zlb1uz8Pk%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;2301&quot; height=&quot;1901&quot; data-origin-width=&quot;2301&quot; data-origin-height=&quot;1901&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Animation 동작 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- '기본 모션'과 '무기 착용 모션' 간 선택 로직 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1) 'Direction' &amp;amp; 'IsFocusingTarget' value update logic 추가&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1508&quot; data-origin-height=&quot;1356&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lXUJN/btsIeltqMJn/9Ta6WkcKoIBIR5Xd0ECAG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lXUJN/btsIeltqMJn/9Ta6WkcKoIBIR5Xd0ECAG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lXUJN/btsIeltqMJn/9Ta6WkcKoIBIR5Xd0ECAG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlXUJN%2FbtsIeltqMJn%2F9Ta6WkcKoIBIR5Xd0ECAG1%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;1508&quot; height=&quot;1356&quot; data-origin-width=&quot;1508&quot; data-origin-height=&quot;1356&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 'Idle', 'Walk/Run' State 내 Animation 동작 방식 추가&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deCjWR/btsIda0Kw8L/8oguRG1FczzLD2m1KvQLGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deCjWR/btsIda0Kw8L/8oguRG1FczzLD2m1KvQLGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deCjWR/btsIda0Kw8L/8oguRG1FczzLD2m1KvQLGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeCjWR%2FbtsIda0Kw8L%2F8oguRG1FczzLD2m1KvQLGk%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;845&quot; height=&quot;350&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;350&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;1205&quot; data-origin-height=&quot;513&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FngNb/btsId5qOm3P/NYeubYqcu4YnPxlf0tKVRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FngNb/btsId5qOm3P/NYeubYqcu4YnPxlf0tKVRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FngNb/btsId5qOm3P/NYeubYqcu4YnPxlf0tKVRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFngNb%2FbtsId5qOm3P%2FNYeubYqcu4YnPxlf0tKVRK%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;1205&quot; height=&quot;513&quot; data-origin-width=&quot;1205&quot; data-origin-height=&quot;513&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;1509&quot; data-origin-height=&quot;835&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FodzS/btsIcz1bTLY/LXK9ULkaMFiuISq0AqGbV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FodzS/btsIcz1bTLY/LXK9ULkaMFiuISq0AqGbV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FodzS/btsIcz1bTLY/LXK9ULkaMFiuISq0AqGbV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFodzS%2FbtsIcz1bTLY%2FLXK9ULkaMFiuISq0AqGbV0%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;1509&quot; height=&quot;835&quot; data-origin-width=&quot;1509&quot; data-origin-height=&quot;835&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. EQS(Environment Queries System) 제작&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3.1. EQS_Strafe&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 플레이어 반경 순회 선택 로직&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kJfAK/btsIdS6mh0Z/rxN212ANeftGx4J5Ccpkn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kJfAK/btsIdS6mh0Z/rxN212ANeftGx4J5Ccpkn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kJfAK/btsIdS6mh0Z/rxN212ANeftGx4J5Ccpkn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkJfAK%2FbtsIdS6mh0Z%2FrxN212ANeftGx4J5Ccpkn0%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;996&quot; height=&quot;642&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;642&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3.2. EQS_FindCover&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 지형 탐색 로직&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;594&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dYSZdl/btsIeDUXMFl/4ubAUDD2eT1jz3MaQz6JN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dYSZdl/btsIeDUXMFl/4ubAUDD2eT1jz3MaQz6JN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dYSZdl/btsIeDUXMFl/4ubAUDD2eT1jz3MaQz6JN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdYSZdl%2FbtsIeDUXMFl%2F4ubAUDD2eT1jz3MaQz6JN0%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;715&quot; height=&quot;594&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;594&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3.3. EQS_Context_AttackTarget (Parent Class: Env Query Context Blueprint Base)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- EQS 동작 시 타겟 전달 로직&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1705&quot; data-origin-height=&quot;711&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmrqdu/btsIcz1drLI/h7Vn7OqWhrCEPhTRfmVTF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmrqdu/btsIcz1drLI/h7Vn7OqWhrCEPhTRfmVTF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmrqdu/btsIcz1drLI/h7Vn7OqWhrCEPhTRfmVTF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcmrqdu%2FbtsIcz1drLI%2Fh7Vn7OqWhrCEPhTRfmVTF0%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;1705&quot; height=&quot;711&quot; data-origin-width=&quot;1705&quot; data-origin-height=&quot;711&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 탐색 예시 1: Circle 방식 (1 &amp;amp; 3번 방식 조합)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2745&quot; data-origin-height=&quot;1402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2Kow6/btsIdgGEAvg/jNlOM5sl741YYFbdPicfMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2Kow6/btsIdgGEAvg/jNlOM5sl741YYFbdPicfMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2Kow6/btsIdgGEAvg/jNlOM5sl741YYFbdPicfMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2Kow6%2FbtsIdgGEAvg%2FjNlOM5sl741YYFbdPicfMK%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;2745&quot; height=&quot;1402&quot; data-origin-width=&quot;2745&quot; data-origin-height=&quot;1402&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 탐색 예시 2: Grid 방식 (동작 예시)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2845&quot; data-origin-height=&quot;1311&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuJ6Qa/btsIcQn9K9e/NToy2KoFkT1jUe7sSmkPOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuJ6Qa/btsIcQn9K9e/NToy2KoFkT1jUe7sSmkPOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuJ6Qa/btsIcQn9K9e/NToy2KoFkT1jUe7sSmkPOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuJ6Qa%2FbtsIcQn9K9e%2FNToy2KoFkT1jUe7sSmkPOk%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;2845&quot; height=&quot;1311&quot; data-origin-width=&quot;2845&quot; data-origin-height=&quot;1311&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp; 탐색 예시 3: Grid와 Pathfinding &amp;amp; Trace &amp;amp; Distance 조합 방식 (2 &amp;amp; 3번 방식 조합)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2713&quot; data-origin-height=&quot;1392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baf9PR/btsIeSdhOez/W5xedk8HtDw7H0xvjOJHO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baf9PR/btsIeSdhOez/W5xedk8HtDw7H0xvjOJHO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baf9PR/btsIeSdhOez/W5xedk8HtDw7H0xvjOJHO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbaf9PR%2FbtsIeSdhOez%2FW5xedk8HtDw7H0xvjOJHO0%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;2713&quot; height=&quot;1392&quot; data-origin-width=&quot;2713&quot; data-origin-height=&quot;1392&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. Behavior Tree 내 EQS 활용&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4.1. Behavior Tree Task 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4.1.1. BTT_MoveToIdealRange&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Parameter로 설정한 Player 주변 반경으로 이동&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1690&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cx7Cfj/btsIeGRC2GT/U8CJmTkLHEhKbckRxfhhZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cx7Cfj/btsIeGRC2GT/U8CJmTkLHEhKbckRxfhhZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cx7Cfj/btsIeGRC2GT/U8CJmTkLHEhKbckRxfhhZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcx7Cfj%2FbtsIeGRC2GT%2FU8CJmTkLHEhKbckRxfhhZK%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;1690&quot; height=&quot;502&quot; data-origin-width=&quot;1690&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4.2. Behavior Tree Decorator 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4.2.1. BTD_IsWithinIdealRange&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Target과 거리 측정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 방법 1: Controller와 거리 비교&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2095&quot; data-origin-height=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pn3WY/btsIcRAx8H5/9vpMkpXCZ05dAKvklF6dwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pn3WY/btsIcRAx8H5/9vpMkpXCZ05dAKvklF6dwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pn3WY/btsIcRAx8H5/9vpMkpXCZ05dAKvklF6dwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpn3WY%2FbtsIcRAx8H5%2F9vpMkpXCZ05dAKvklF6dwK%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;2095&quot; height=&quot;580&quot; data-origin-width=&quot;2095&quot; data-origin-height=&quot;580&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 방법 2: BlackBoard에 저장된 값 응용&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2075&quot; data-origin-height=&quot;544&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lVWui/btsIe0Ckp44/tKYmM90GU5KvmVGi1CFGck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lVWui/btsIe0Ckp44/tKYmM90GU5KvmVGi1CFGck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lVWui/btsIe0Ckp44/tKYmM90GU5KvmVGi1CFGck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlVWui%2FbtsIe0Ckp44%2FtKYmM90GU5KvmVGi1CFGck%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;2075&quot; height=&quot;544&quot; data-origin-width=&quot;2075&quot; data-origin-height=&quot;544&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;1966&quot; data-origin-height=&quot;375&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5KA2A/btsId3zPeGk/ATjywAT3mFAzlp0amWy9oK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5KA2A/btsId3zPeGk/ATjywAT3mFAzlp0amWy9oK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5KA2A/btsId3zPeGk/ATjywAT3mFAzlp0amWy9oK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5KA2A%2FbtsId3zPeGk%2FATjywAT3mFAzlp0amWy9oK%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;1966&quot; height=&quot;375&quot; data-origin-width=&quot;1966&quot; data-origin-height=&quot;375&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4.3. Tree 내 로직 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.3.1. Strafe&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 'EQS_Strafe' 활용,&amp;nbsp;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;플레이어 주변 맴도는&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;로직 구현&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2587&quot; data-origin-height=&quot;814&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wTZ4v/btsIdf14UUi/kofTfv9OIALWasP0mWhug0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wTZ4v/btsIdf14UUi/kofTfv9OIALWasP0mWhug0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wTZ4v/btsIdf14UUi/kofTfv9OIALWasP0mWhug0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwTZ4v%2FbtsIdf14UUi%2FkofTfv9OIALWasP0mWhug0%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;2587&quot; height=&quot;814&quot; data-origin-width=&quot;2587&quot; data-origin-height=&quot;814&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 활용 예시&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2584&quot; data-origin-height=&quot;879&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZR4Ul/btsIdGkMYvz/9kh05mU8R7WGW38sIarpx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZR4Ul/btsIdGkMYvz/9kh05mU8R7WGW38sIarpx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZR4Ul/btsIdGkMYvz/9kh05mU8R7WGW38sIarpx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZR4Ul%2FbtsIdGkMYvz%2F9kh05mU8R7WGW38sIarpx0%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;2584&quot; height=&quot;879&quot; data-origin-width=&quot;2584&quot; data-origin-height=&quot;879&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.3.2. FindCover&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 'EQS_FindCover' 활용, 주변 지형과 상호작용하는 로직 구현&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2035&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bN9x2w/btsId5xAFoM/YZwMhfkvtWfODXTbMDSczk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bN9x2w/btsId5xAFoM/YZwMhfkvtWfODXTbMDSczk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bN9x2w/btsId5xAFoM/YZwMhfkvtWfODXTbMDSczk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbN9x2w%2FbtsId5xAFoM%2FYZwMhfkvtWfODXTbMDSczk%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;2035&quot; height=&quot;505&quot; data-origin-width=&quot;2035&quot; data-origin-height=&quot;505&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;+) 현재 Tree 구조&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3643&quot; data-origin-height=&quot;1105&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjSOQf/btsId7PHp8z/lJpQku8nHjPUCnBY9Eckvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjSOQf/btsId7PHp8z/lJpQku8nHjPUCnBY9Eckvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjSOQf/btsId7PHp8z/lJpQku8nHjPUCnBY9Eckvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjSOQf%2FbtsId7PHp8z%2FlJpQku8nHjPUCnBY9Eckvk%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;3643&quot; height=&quot;1105&quot; data-origin-width=&quot;3643&quot; data-origin-height=&quot;1105&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Enemy Type&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;a href=&quot;https://docs.unrealengine.com/4.27/en-US/PythonAPI/class/EnvQueryContext_BlueprintBase.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unrealengine.com/4.27/en-US/PythonAPI/class/EnvQueryContext_BlueprintBase.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1719415052880&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;unreal.EnvQueryContext_BlueprintBase &amp;mdash; Unreal Python 4.27 (Experimental) documentation&quot; data-og-description=&quot;resulting_location_set (Array(Vector)):&quot; data-og-host=&quot;docs.unrealengine.com&quot; data-og-source-url=&quot;https://docs.unrealengine.com/4.27/en-US/PythonAPI/class/EnvQueryContext_BlueprintBase.html&quot; data-og-url=&quot;https://docs.unrealengine.com/4.27/en-US/PythonAPI/class/EnvQueryContext_BlueprintBase.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.unrealengine.com/4.27/en-US/PythonAPI/class/EnvQueryContext_BlueprintBase.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.unrealengine.com/4.27/en-US/PythonAPI/class/EnvQueryContext_BlueprintBase.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;unreal.EnvQueryContext_BlueprintBase &amp;mdash; Unreal Python 4.27 (Experimental) documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;resulting_location_set (Array(Vector)):&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.unrealengine.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unrealengine.com/4.27/en-US/InteractiveExperiences/ArtificialIntelligence/EQS/EQSNodeReference/EQSNodeReferenceContexts/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unrealengine.com/4.27/en-US/InteractiveExperiences/ArtificialIntelligence/EQS/EQSNodeReference/EQSNodeReferenceContexts/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1719415090914&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;EQS Node Reference: Contexts&quot; data-og-description=&quot;Describes how Contexts are used within Tests and Generators in the EQS system.&quot; data-og-host=&quot;docs.unrealengine.com&quot; data-og-source-url=&quot;https://docs.unrealengine.com/4.27/en-US/InteractiveExperiences/ArtificialIntelligence/EQS/EQSNodeReference/EQSNodeReferenceContexts/&quot; data-og-url=&quot;https://docs.unrealengine.com/4.27/en-US/InteractiveExperiences/ArtificialIntelligence/EQS/EQSNodeReference/EQSNodeReferenceContexts/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/roa19/hyWrMQ2ZsV/5olckKjAKxdVS6zF31fjs1/img.png?width=418&amp;amp;height=160&amp;amp;face=0_0_418_160&quot;&gt;&lt;a href=&quot;https://docs.unrealengine.com/4.27/en-US/InteractiveExperiences/ArtificialIntelligence/EQS/EQSNodeReference/EQSNodeReferenceContexts/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.unrealengine.com/4.27/en-US/InteractiveExperiences/ArtificialIntelligence/EQS/EQSNodeReference/EQSNodeReferenceContexts/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/roa19/hyWrMQ2ZsV/5olckKjAKxdVS6zF31fjs1/img.png?width=418&amp;amp;height=160&amp;amp;face=0_0_418_160');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;EQS Node Reference: Contexts&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Describes how Contexts are used within Tests and Generators in the EQS system.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.unrealengine.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Oy_LojjRiWo&amp;amp;list=PLNwKK6OwH7eW1n49TW6-FmiZhqRn97cRy&amp;amp;index=4&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=Oy_LojjRiWo&amp;amp;list=PLNwKK6OwH7eW1n49TW6-FmiZhqRn97cRy&amp;amp;index=4&lt;/a&gt;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <category>behavior</category>
      <category>decorator</category>
      <category>EQS</category>
      <category>Query</category>
      <category>Task</category>
      <category>tree</category>
      <category>Unreal</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/365</guid>
      <comments>https://kyunstudio.tistory.com/365#entry365comment</comments>
      <pubDate>Thu, 27 Jun 2024 00:32:32 +0900</pubDate>
    </item>
    <item>
      <title>[Unreal] Day 8 - Enemy AI (Perception 구현)</title>
      <link>https://kyunstudio.tistory.com/364</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. Perception 구현&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.1. AI Perception 추가 (AIC_Enemy_Base)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.2. Perception Updated 시 Event 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- HandleSensedSight&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- HandleSensedSound&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- HandleSensedDamage&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.3. Black Board 내 변수 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- State (Enum)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Point Of Interest (Vector)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.4 Behavior Tree 내 State 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Investigating State&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 1. Perception 구현&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.1 AI Perception 추가 (AIC_Enemy_Base)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;259&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdYHZJ/btsIcTcBhZV/dSQApTw3ulNw4OT5ThzXm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdYHZJ/btsIcTcBhZV/dSQApTw3ulNw4OT5ThzXm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdYHZJ/btsIcTcBhZV/dSQApTw3ulNw4OT5ThzXm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdYHZJ%2FbtsIcTcBhZV%2FdSQApTw3ulNw4OT5ThzXm0%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;586&quot; height=&quot;259&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;259&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;1004&quot; data-origin-height=&quot;218&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yXZ1O/btsIbp44TLA/Fk1kQdrUhOo269i6wo2g50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yXZ1O/btsIbp44TLA/Fk1kQdrUhOo269i6wo2g50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yXZ1O/btsIbp44TLA/Fk1kQdrUhOo269i6wo2g50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyXZ1O%2FbtsIbp44TLA%2FFk1kQdrUhOo269i6wo2g50%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;1004&quot; height=&quot;218&quot; data-origin-width=&quot;1004&quot; data-origin-height=&quot;218&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.2 Perception Updated 시 Event 추가 &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2238&quot; data-origin-height=&quot;1067&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eFEolk/btsIdib37ld/o1y2jBjKcfTGw9fGx0ckEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eFEolk/btsIdib37ld/o1y2jBjKcfTGw9fGx0ckEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eFEolk/btsIdib37ld/o1y2jBjKcfTGw9fGx0ckEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeFEolk%2FbtsIdib37ld%2Fo1y2jBjKcfTGw9fGx0ckEK%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;2238&quot; height=&quot;1067&quot; data-origin-width=&quot;2238&quot; data-origin-height=&quot;1067&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- HandleSensedSight&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2672&quot; data-origin-height=&quot;613&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7sf7C/btsIbtzBlXs/IAu435JCbZl10FIN6PBKQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7sf7C/btsIbtzBlXs/IAu435JCbZl10FIN6PBKQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7sf7C/btsIbtzBlXs/IAu435JCbZl10FIN6PBKQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7sf7C%2FbtsIbtzBlXs%2FIAu435JCbZl10FIN6PBKQ1%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;2672&quot; height=&quot;613&quot; data-origin-width=&quot;2672&quot; data-origin-height=&quot;613&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- HandleSensedSound&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1552&quot; data-origin-height=&quot;333&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eimSVn/btsIcgzybyF/AEamZwbTY7Pqhbxn0cRwxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eimSVn/btsIcgzybyF/AEamZwbTY7Pqhbxn0cRwxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eimSVn/btsIcgzybyF/AEamZwbTY7Pqhbxn0cRwxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeimSVn%2FbtsIcgzybyF%2FAEamZwbTY7Pqhbxn0cRwxK%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;1552&quot; height=&quot;333&quot; data-origin-width=&quot;1552&quot; data-origin-height=&quot;333&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- HandleSensedDamage&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1539&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/do7peX/btsIcf1K3oe/Ueorg3LTgrZm4pGJs2hAK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/do7peX/btsIcf1K3oe/Ueorg3LTgrZm4pGJs2hAK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/do7peX/btsIcf1K3oe/Ueorg3LTgrZm4pGJs2hAK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdo7peX%2FbtsIcf1K3oe%2FUeorg3LTgrZm4pGJs2hAK0%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;1539&quot; height=&quot;362&quot; data-origin-width=&quot;1539&quot; data-origin-height=&quot;362&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.3. Black Board 내 변수 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- State (Enum)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;967&quot; data-origin-height=&quot;295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zMyw6/btsIbtl61T8/RZaXH2NH8ojkE9ZxIMbwe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zMyw6/btsIbtl61T8/RZaXH2NH8ojkE9ZxIMbwe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zMyw6/btsIbtl61T8/RZaXH2NH8ojkE9ZxIMbwe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzMyw6%2FbtsIbtl61T8%2FRZaXH2NH8ojkE9ZxIMbwe0%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;967&quot; height=&quot;295&quot; data-origin-width=&quot;967&quot; data-origin-height=&quot;295&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Point Of Interest (Vector)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;응용 예시는 HandleSensedSound 함수 참고&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.4 Behavior Tree 내 State 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Investigating State&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1521&quot; data-origin-height=&quot;552&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8YhbU/btsIbnF2vi4/ujUMUDyKp1GDqSwQMb0PR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8YhbU/btsIbnF2vi4/ujUMUDyKp1GDqSwQMb0PR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8YhbU/btsIbnF2vi4/ujUMUDyKp1GDqSwQMb0PR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8YhbU%2FbtsIbnF2vi4%2FujUMUDyKp1GDqSwQMb0PR0%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;1521&quot; height=&quot;552&quot; data-origin-width=&quot;1521&quot; data-origin-height=&quot;552&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 전체 동작&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3321&quot; data-origin-height=&quot;1029&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eILfv8/btsIczFCsVl/9cj1dodKnA9sjr6gOWgEHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eILfv8/btsIczFCsVl/9cj1dodKnA9sjr6gOWgEHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eILfv8/btsIczFCsVl/9cj1dodKnA9sjr6gOWgEHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeILfv8%2FbtsIczFCsVl%2F9cj1dodKnA9sjr6gOWgEHK%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;3321&quot; height=&quot;1029&quot; data-origin-width=&quot;3321&quot; data-origin-height=&quot;1029&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- Environment Query System(EQS) 추가&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=gsyZdKYAT_4&amp;amp;list=PLNwKK6OwH7eW1n49TW6-FmiZhqRn97cRy&amp;amp;index=3&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=gsyZdKYAT_4&amp;amp;list=PLNwKK6OwH7eW1n49TW6-FmiZhqRn97cRy&amp;amp;index=3&lt;/a&gt;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <category>Ai</category>
      <category>behavior</category>
      <category>Black</category>
      <category>blueprint</category>
      <category>borad</category>
      <category>perception</category>
      <category>SMART</category>
      <category>State</category>
      <category>tree</category>
      <category>Unreal</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/364</guid>
      <comments>https://kyunstudio.tistory.com/364#entry364comment</comments>
      <pubDate>Tue, 25 Jun 2024 22:35:58 +0900</pubDate>
    </item>
    <item>
      <title>[Unreal] Day 7 - Black Board &amp;amp; Behavior Tree State 구현</title>
      <link>https://kyunstudio.tistory.com/363</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 가속 동작오류 개선 (&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;BP_Enemy_Base&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Behavior Tree State 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. Sword 소환 및 제거 (BP_Enemy_Base)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. Behavior Tree 관리 (BT_Enemy_Base)&lt;/b&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 가속 동작오류 개선 (&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;BP_Enemy_Base&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Use Fixed Braking Distance for Paths 옵션을 disable하여, Path간 가속도로 인한 딜레이를 줄임&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;548&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czstt1/btsIbow56CK/NrjJkKhQDyQv9LVOI2r8ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czstt1/btsIbow56CK/NrjJkKhQDyQv9LVOI2r8ok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czstt1/btsIbow56CK/NrjJkKhQDyQv9LVOI2r8ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fczstt1%2FbtsIbow56CK%2FNrjJkKhQDyQv9LVOI2r8ok%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;912&quot; height=&quot;548&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;548&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Behavior Tree State 추가&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;190&quot; data-origin-height=&quot;119&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rEQQY/btsIbvW3IPJ/pRpp2LQPykrPyVm3Uajjl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rEQQY/btsIbvW3IPJ/pRpp2LQPykrPyVm3Uajjl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rEQQY/btsIbvW3IPJ/pRpp2LQPykrPyVm3Uajjl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrEQQY%2FbtsIbvW3IPJ%2FpRpp2LQPykrPyVm3Uajjl0%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;190&quot; height=&quot;119&quot; data-origin-width=&quot;190&quot; data-origin-height=&quot;119&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;434&quot; data-origin-height=&quot;203&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E6Vxe/btsH9rofcCA/2KBwskexv0ey03Hc7BqXw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E6Vxe/btsH9rofcCA/2KBwskexv0ey03Hc7BqXw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E6Vxe/btsH9rofcCA/2KBwskexv0ey03Hc7BqXw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE6Vxe%2FbtsH9rofcCA%2F2KBwskexv0ey03Hc7BqXw1%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;434&quot; height=&quot;203&quot; data-origin-width=&quot;434&quot; data-origin-height=&quot;203&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;1214&quot; data-origin-height=&quot;311&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HGJdw/btsIbhyfyNK/SAAnGbzUFILbh14qCs3Sg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HGJdw/btsIbhyfyNK/SAAnGbzUFILbh14qCs3Sg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HGJdw/btsIbhyfyNK/SAAnGbzUFILbh14qCs3Sg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHGJdw%2FbtsIbhyfyNK%2FSAAnGbzUFILbh14qCs3Sg1%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;1214&quot; height=&quot;311&quot; data-origin-width=&quot;1214&quot; data-origin-height=&quot;311&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;1066&quot; data-origin-height=&quot;497&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beyxTb/btsIbg0pXxU/mXdXkUpWijrhHkYaD1nL4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beyxTb/btsIbg0pXxU/mXdXkUpWijrhHkYaD1nL4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beyxTb/btsIbg0pXxU/mXdXkUpWijrhHkYaD1nL4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeyxTb%2FbtsIbg0pXxU%2FmXdXkUpWijrhHkYaD1nL4K%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;1066&quot; height=&quot;497&quot; data-origin-width=&quot;1066&quot; data-origin-height=&quot;497&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;1982&quot; data-origin-height=&quot;619&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baU8v4/btsIaQ1WwCq/jeRH6a5sM0qoAMkKs8ealk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baU8v4/btsIaQ1WwCq/jeRH6a5sM0qoAMkKs8ealk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baU8v4/btsIaQ1WwCq/jeRH6a5sM0qoAMkKs8ealk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaU8v4%2FbtsIaQ1WwCq%2FjeRH6a5sM0qoAMkKs8ealk%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;1982&quot; height=&quot;619&quot; data-origin-width=&quot;1982&quot; data-origin-height=&quot;619&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. Sword 소환 및 제거 (BP_Enemy_Base)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2706&quot; data-origin-height=&quot;1131&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLsuus/btsIaQt8vP0/2ogIEe9K01nSFelOTXwUd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLsuus/btsIaQt8vP0/2ogIEe9K01nSFelOTXwUd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLsuus/btsIaQt8vP0/2ogIEe9K01nSFelOTXwUd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLsuus%2FbtsIaQt8vP0%2F2ogIEe9K01nSFelOTXwUd1%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;2706&quot; height=&quot;1131&quot; data-origin-width=&quot;2706&quot; data-origin-height=&quot;1131&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;2290&quot; data-origin-height=&quot;1360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGoTUv/btsIaUiYfdp/jeNJiQyPjkDdBEY8H76e6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGoTUv/btsIaUiYfdp/jeNJiQyPjkDdBEY8H76e6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGoTUv/btsIaUiYfdp/jeNJiQyPjkDdBEY8H76e6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGoTUv%2FbtsIaUiYfdp%2FjeNJiQyPjkDdBEY8H76e6k%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;2290&quot; height=&quot;1360&quot; data-origin-width=&quot;2290&quot; data-origin-height=&quot;1360&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. Behavior Tree 관리 (BT_Enemy_Base)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2270&quot; data-origin-height=&quot;1014&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLH4rO/btsIaE1um46/5govwY5kEiI1IUdu9qQ450/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLH4rO/btsIaE1um46/5govwY5kEiI1IUdu9qQ450/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLH4rO/btsIaE1um46/5govwY5kEiI1IUdu9qQ450/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLH4rO%2FbtsIaE1um46%2F5govwY5kEiI1IUdu9qQ450%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;2270&quot; height=&quot;1014&quot; data-origin-width=&quot;2270&quot; data-origin-height=&quot;1014&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;1974&quot; data-origin-height=&quot;578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kYV0T/btsIaUiXVhP/DrGyrSsgcOoOZjYLUKjqw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kYV0T/btsIaUiXVhP/DrGyrSsgcOoOZjYLUKjqw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kYV0T/btsIaUiXVhP/DrGyrSsgcOoOZjYLUKjqw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkYV0T%2FbtsIaUiXVhP%2FDrGyrSsgcOoOZjYLUKjqw1%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;1974&quot; height=&quot;578&quot; data-origin-width=&quot;1974&quot; data-origin-height=&quot;578&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- Perception&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=gsyZdKYAT_4&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=gsyZdKYAT_4&lt;/a&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- Patrolling &amp;amp; States&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=WFV5IewGks8&amp;amp;t=965s&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=WFV5IewGks8&amp;amp;t=965s&lt;/a&gt;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <category>Ai</category>
      <category>behavior</category>
      <category>Behavior Tree</category>
      <category>Enum</category>
      <category>patrol route</category>
      <category>State</category>
      <category>tree</category>
      <category>Unreal</category>
      <category>언리얼</category>
      <category>패트롤</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/363</guid>
      <comments>https://kyunstudio.tistory.com/363#entry363comment</comments>
      <pubDate>Tue, 25 Jun 2024 00:47:22 +0900</pubDate>
    </item>
    <item>
      <title>[Unreal] Day 6 - AI, Patrol Route 구현 (패트롤)</title>
      <link>https://kyunstudio.tistory.com/362</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. Patrol Route 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. Route 반복 알고리즘 구현&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3. 움직임 알고리즘 구현&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2995&quot; data-origin-height=&quot;872&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qU14J/btsH8DoHhdM/3sokqKvbHDZR8rFN67rgL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qU14J/btsH8DoHhdM/3sokqKvbHDZR8rFN67rgL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qU14J/btsH8DoHhdM/3sokqKvbHDZR8rFN67rgL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqU14J%2FbtsH8DoHhdM%2F3sokqKvbHDZR8rFN67rgL0%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;2995&quot; height=&quot;872&quot; data-origin-width=&quot;2995&quot; data-origin-height=&quot;872&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;1765&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJVLgJ/btsIaElT8Qq/uZ9JNkm5f4crA3rMXniGR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJVLgJ/btsIaElT8Qq/uZ9JNkm5f4crA3rMXniGR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJVLgJ/btsIaElT8Qq/uZ9JNkm5f4crA3rMXniGR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJVLgJ%2FbtsIaElT8Qq%2FuZ9JNkm5f4crA3rMXniGR1%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;1765&quot; height=&quot;908&quot; data-origin-width=&quot;1765&quot; data-origin-height=&quot;908&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;1922&quot; data-origin-height=&quot;807&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpz3YE/btsH9hrAYsZ/tmRNGTuFYEu8wO9TW74BxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpz3YE/btsH9hrAYsZ/tmRNGTuFYEu8wO9TW74BxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpz3YE/btsH9hrAYsZ/tmRNGTuFYEu8wO9TW74BxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbpz3YE%2FbtsH9hrAYsZ%2FtmRNGTuFYEu8wO9TW74BxK%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;1922&quot; height=&quot;807&quot; data-origin-width=&quot;1922&quot; data-origin-height=&quot;807&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;987&quot; data-origin-height=&quot;652&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bc31tM/btsH8Sy0N1h/8hKjfk2lwh55dJOKOxwGn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bc31tM/btsH8Sy0N1h/8hKjfk2lwh55dJOKOxwGn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bc31tM/btsH8Sy0N1h/8hKjfk2lwh55dJOKOxwGn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbc31tM%2FbtsH8Sy0N1h%2F8hKjfk2lwh55dJOKOxwGn1%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;987&quot; height=&quot;652&quot; data-origin-width=&quot;987&quot; data-origin-height=&quot;652&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;2589&quot; data-origin-height=&quot;412&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPwrXC/btsIaGRyGrW/OOyrtl3kkvJU7DE9VvmgR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPwrXC/btsIaGRyGrW/OOyrtl3kkvJU7DE9VvmgR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPwrXC/btsIaGRyGrW/OOyrtl3kkvJU7DE9VvmgR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPwrXC%2FbtsIaGRyGrW%2FOOyrtl3kkvJU7DE9VvmgR1%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;2589&quot; height=&quot;412&quot; data-origin-width=&quot;2589&quot; data-origin-height=&quot;412&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;2723&quot; data-origin-height=&quot;1396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ci9iMO/btsH8C4lPtw/JsEJYAFSOnd2sI9N5uAKK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ci9iMO/btsH8C4lPtw/JsEJYAFSOnd2sI9N5uAKK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ci9iMO/btsH8C4lPtw/JsEJYAFSOnd2sI9N5uAKK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fci9iMO%2FbtsH8C4lPtw%2FJsEJYAFSOnd2sI9N5uAKK0%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;2723&quot; height=&quot;1396&quot; data-origin-width=&quot;2723&quot; data-origin-height=&quot;1396&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=WFV5IewGks8&amp;amp;t=965s&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=WFV5IewGks8&amp;amp;t=965s&lt;/a&gt;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <category>Ai</category>
      <category>patrol route</category>
      <category>Unreal</category>
      <category>언리얼</category>
      <category>패트롤</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/362</guid>
      <comments>https://kyunstudio.tistory.com/362#entry362comment</comments>
      <pubDate>Sun, 23 Jun 2024 20:59:34 +0900</pubDate>
    </item>
    <item>
      <title>[Unreal] Day5 - IK Rig, IK Retargeter, Behavior Trees, Control Rig &amp;amp; Alpha</title>
      <link>https://kyunstudio.tistory.com/361</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. IK Rig&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. IK Retargeter&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3. Behavior Trees&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4. Control Rig &amp;amp; Alpha&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. IK Rig&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;1323&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ck49JR/btsH9enVqlC/Dk4mfWDYhox6k6QERrAxYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ck49JR/btsH9enVqlC/Dk4mfWDYhox6k6QERrAxYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ck49JR/btsH9enVqlC/Dk4mfWDYhox6k6QERrAxYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fck49JR%2FbtsH9enVqlC%2FDk4mfWDYhox6k6QERrAxYK%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;619&quot; height=&quot;1323&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;1323&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. IK Retargeter&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1051&quot; data-origin-height=&quot;1659&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWt9fi/btsH85q4jti/2Lk55ALQz4XF0oAhkoF66k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWt9fi/btsH85q4jti/2Lk55ALQz4XF0oAhkoF66k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWt9fi/btsH85q4jti/2Lk55ALQz4XF0oAhkoF66k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWt9fi%2FbtsH85q4jti%2F2Lk55ALQz4XF0oAhkoF66k%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;1051&quot; height=&quot;1659&quot; data-origin-width=&quot;1051&quot; data-origin-height=&quot;1659&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 결과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1657&quot; data-origin-height=&quot;1138&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCBQZT/btsH8Ja0jmt/ZP0w0bBewBBd9rRBLV1ZH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCBQZT/btsH8Ja0jmt/ZP0w0bBewBBd9rRBLV1ZH0/img.png&quot; data-alt=&quot;- r&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCBQZT/btsH8Ja0jmt/ZP0w0bBewBBd9rRBLV1ZH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCBQZT%2FbtsH8Ja0jmt%2FZP0w0bBewBBd9rRBLV1ZH0%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;1657&quot; height=&quot;1138&quot; data-origin-width=&quot;1657&quot; data-origin-height=&quot;1138&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;- r&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Behavior Trees&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1899&quot; data-origin-height=&quot;609&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oY3lP/btsH8UKaCb3/s9rWGgwK0BWj4iTbtEsKQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oY3lP/btsH8UKaCb3/s9rWGgwK0BWj4iTbtEsKQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oY3lP/btsH8UKaCb3/s9rWGgwK0BWj4iTbtEsKQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoY3lP%2FbtsH8UKaCb3%2Fs9rWGgwK0BWj4iTbtEsKQ0%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;1899&quot; height=&quot;609&quot; data-origin-width=&quot;1899&quot; data-origin-height=&quot;609&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;1592&quot; data-origin-height=&quot;620&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LHHRn/btsH9mTHzdB/EwLUcIQGq0aQBl0hF9UaVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LHHRn/btsH9mTHzdB/EwLUcIQGq0aQBl0hF9UaVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LHHRn/btsH9mTHzdB/EwLUcIQGq0aQBl0hF9UaVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLHHRn%2FbtsH9mTHzdB%2FEwLUcIQGq0aQBl0hF9UaVK%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;1592&quot; height=&quot;620&quot; data-origin-width=&quot;1592&quot; data-origin-height=&quot;620&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;1975&quot; data-origin-height=&quot;1029&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byoSaf/btsH87oW7If/BIwJNMuuLcsJniPM1FksB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byoSaf/btsH87oW7If/BIwJNMuuLcsJniPM1FksB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byoSaf/btsH87oW7If/BIwJNMuuLcsJniPM1FksB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyoSaf%2FbtsH87oW7If%2FBIwJNMuuLcsJniPM1FksB0%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;1975&quot; height=&quot;1029&quot; data-origin-width=&quot;1975&quot; data-origin-height=&quot;1029&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;1755&quot; data-origin-height=&quot;1121&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQkbJc/btsH9oxecR8/CNMnUruQydDlETEkWCfxC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQkbJc/btsH9oxecR8/CNMnUruQydDlETEkWCfxC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQkbJc/btsH9oxecR8/CNMnUruQydDlETEkWCfxC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQkbJc%2FbtsH9oxecR8%2FCNMnUruQydDlETEkWCfxC0%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;1755&quot; height=&quot;1121&quot; data-origin-width=&quot;1755&quot; data-origin-height=&quot;1121&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. Control Rig &amp;amp; Alpha&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2298&quot; data-origin-height=&quot;339&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bx0q57/btsIai37pih/bNuoCTK5dfvEfEBQx8h69k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bx0q57/btsIai37pih/bNuoCTK5dfvEfEBQx8h69k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bx0q57/btsIai37pih/bNuoCTK5dfvEfEBQx8h69k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbx0q57%2FbtsIai37pih%2FbNuoCTK5dfvEfEBQx8h69k%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;2298&quot; height=&quot;339&quot; data-origin-width=&quot;2298&quot; data-origin-height=&quot;339&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;2288&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjagWs/btsH7Y7K8qG/EvMGZaD4UC1rIXlZceEme0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjagWs/btsH7Y7K8qG/EvMGZaD4UC1rIXlZceEme0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjagWs/btsH7Y7K8qG/EvMGZaD4UC1rIXlZceEme0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjagWs%2FbtsH7Y7K8qG%2FEvMGZaD4UC1rIXlZceEme0%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;2288&quot; height=&quot;908&quot; data-origin-width=&quot;2288&quot; data-origin-height=&quot;908&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;1959&quot; data-origin-height=&quot;955&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eMFtWB/btsH7Zr2Ha7/n8cN4m0VU2hgvjLooXXn21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eMFtWB/btsH7Zr2Ha7/n8cN4m0VU2hgvjLooXXn21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eMFtWB/btsH7Zr2Ha7/n8cN4m0VU2hgvjLooXXn21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeMFtWB%2FbtsH7Zr2Ha7%2Fn8cN4m0VU2hgvjLooXXn21%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;1959&quot; height=&quot;955&quot; data-origin-width=&quot;1959&quot; data-origin-height=&quot;955&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;2741&quot; data-origin-height=&quot;1389&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0TXx6/btsH7XA5NI5/qq6FOkWVfaaihG5NfeaTrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0TXx6/btsH7XA5NI5/qq6FOkWVfaaihG5NfeaTrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0TXx6/btsH7XA5NI5/qq6FOkWVfaaihG5NfeaTrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0TXx6%2FbtsH7XA5NI5%2Fqq6FOkWVfaaihG5NfeaTrK%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;2741&quot; height=&quot;1389&quot; data-origin-width=&quot;2741&quot; data-origin-height=&quot;1389&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;2708&quot; data-origin-height=&quot;1387&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bW0irO/btsH8D29flx/Xbg7krnsfnPsDNF0QpjLxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bW0irO/btsH8D29flx/Xbg7krnsfnPsDNF0QpjLxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bW0irO/btsH8D29flx/Xbg7krnsfnPsDNF0QpjLxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbW0irO%2FbtsH8D29flx%2FXbg7krnsfnPsDNF0QpjLxk%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;2708&quot; height=&quot;1387&quot; data-origin-width=&quot;2708&quot; data-origin-height=&quot;1387&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애니메이션 동작 시 Alpha 값을 0으로 설정하여 간섭이 없도록 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Control Rig와 Alpha 관련 동작&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://community.gamedev.tv/t/control-rig-and-alpha/234270&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://community.gamedev.tv/t/control-rig-and-alpha/234270&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1719064408523&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Control Rig and Alpha&quot; data-og-description=&quot;I am sorry but I fail to understand what are you doing at the end of the lesson, when we changing the Alpha value of the Control rig in the AnimGraph. I was able to do it, and crouching work without deforming the character, but I dont understand what is th&quot; data-og-host=&quot;community.gamedev.tv&quot; data-og-source-url=&quot;https://community.gamedev.tv/t/control-rig-and-alpha/234270&quot; data-og-url=&quot;https://community.gamedev.tv/t/control-rig-and-alpha/234270&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/e2eGG/hyWoO3pGGs/KQyM1uri1CCwchA6dpWXXk/img.png?width=1063&amp;amp;height=1063&amp;amp;face=0_0_1063_1063,https://scrap.kakaocdn.net/dn/ckWuRe/hyWoGdeq3j/2b3ABsEklocKPRCxWRdV71/img.png?width=1063&amp;amp;height=1063&amp;amp;face=0_0_1063_1063&quot;&gt;&lt;a href=&quot;https://community.gamedev.tv/t/control-rig-and-alpha/234270&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://community.gamedev.tv/t/control-rig-and-alpha/234270&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/e2eGG/hyWoO3pGGs/KQyM1uri1CCwchA6dpWXXk/img.png?width=1063&amp;amp;height=1063&amp;amp;face=0_0_1063_1063,https://scrap.kakaocdn.net/dn/ckWuRe/hyWoGdeq3j/2b3ABsEklocKPRCxWRdV71/img.png?width=1063&amp;amp;height=1063&amp;amp;face=0_0_1063_1063');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Control Rig and Alpha&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I am sorry but I fail to understand what are you doing at the end of the lesson, when we changing the Alpha value of the Control rig in the AnimGraph. I was able to do it, and crouching work without deforming the character, but I dont understand what is th&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;community.gamedev.tv&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unrealengine.com/4.27/en-US/AnimatingObjects/SkeletalMeshAnimation/ControlRig/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unrealengine.com/4.27/en-US/AnimatingObjects/SkeletalMeshAnimation/ControlRig/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 애니메이션 자동 리타게팅 (5.4)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=_d0D5uCO75M&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=_d0D5uCO75M&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 애니메이션 리타겟팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=FI9bNyZJsZs&amp;amp;t=29s&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=FI9bNyZJsZs&amp;amp;t=29s&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <category>Ai</category>
      <category>behavior trees</category>
      <category>control rig</category>
      <category>control rig &amp;amp; alpha</category>
      <category>ik retargeter</category>
      <category>ik rig</category>
      <category>rig</category>
      <category>Unreal</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/361</guid>
      <comments>https://kyunstudio.tistory.com/361#entry361comment</comments>
      <pubDate>Sun, 23 Jun 2024 00:02:56 +0900</pubDate>
    </item>
    <item>
      <title>[Unreal] Day 4 - 적 만들기 (Smart Enemy AI 구현)</title>
      <link>https://kyunstudio.tistory.com/360</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. Enemy Blueprint 생성&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. Navigation Mesh 생성&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. Enemy Blueprint 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1503&quot; data-origin-height=&quot;668&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmlWSJ/btsH9e84MyF/dotQ2op19IbGSMDyO2vmI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmlWSJ/btsH9e84MyF/dotQ2op19IbGSMDyO2vmI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmlWSJ/btsH9e84MyF/dotQ2op19IbGSMDyO2vmI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmlWSJ%2FbtsH9e84MyF%2FdotQ2op19IbGSMDyO2vmI1%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;1503&quot; height=&quot;668&quot; data-origin-width=&quot;1503&quot; data-origin-height=&quot;668&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. Navigation Mesh 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2750&quot; data-origin-height=&quot;1407&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4bwHK/btsH8VorKB0/QudwJcKZSQsr1NSn0Zf54k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4bwHK/btsH8VorKB0/QudwJcKZSQsr1NSn0Zf54k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4bwHK/btsH8VorKB0/QudwJcKZSQsr1NSn0Zf54k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4bwHK%2FbtsH8VorKB0%2FQudwJcKZSQsr1NSn0Zf54k%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;2750&quot; height=&quot;1407&quot; data-origin-width=&quot;2750&quot; data-origin-height=&quot;1407&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 결과 예시&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2739&quot; data-origin-height=&quot;1400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6zJXI/btsH8JhvQRc/8k1sh9eHXVVtY6mStCrIa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6zJXI/btsH8JhvQRc/8k1sh9eHXVVtY6mStCrIa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6zJXI/btsH8JhvQRc/8k1sh9eHXVVtY6mStCrIa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6zJXI%2FbtsH8JhvQRc%2F8k1sh9eHXVVtY6mStCrIa0%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;2739&quot; height=&quot;1400&quot; data-origin-width=&quot;2739&quot; data-origin-height=&quot;1400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. Infinite Navigation Mesh 구현&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. Enemy AI 기능 추가&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. Enemy AI&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=-t3PbGRazKg&amp;amp;list=PLNwKK6OwH7eW1n49TW6-FmiZhqRn97cRy&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=-t3PbGRazKg&amp;amp;list=PLNwKK6OwH7eW1n49TW6-FmiZhqRn97cRy&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. Open World Navigation Mesh&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=_GsZgGNuXJQ&quot;&gt;https://www.youtube.com/watch?v=_GsZgGNuXJQ&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <category>Ai</category>
      <category>blueprint</category>
      <category>Enemy</category>
      <category>mesh</category>
      <category>Navigation</category>
      <category>open</category>
      <category>Unreal</category>
      <category>World</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/360</guid>
      <comments>https://kyunstudio.tistory.com/360#entry360comment</comments>
      <pubDate>Fri, 21 Jun 2024 22:44:12 +0900</pubDate>
    </item>
    <item>
      <title>[Unreal] Day3 - UI 만들기 (HUD, HP Bar, Binding, Blueprint)</title>
      <link>https://kyunstudio.tistory.com/359</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;UI 활용을 위해 제어 방법 학습&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. 기존&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- HUD Widget 구현&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- BeginPlay 함수 동작 시 Player Controller에 연결&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. 현재&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- HUD Widget 동작에 따른 구현 분리&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Progress bar 활용&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Widget Blueprint 내 Binding 함수 구현&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 이전&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2217&quot; data-origin-height=&quot;374&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qeay0/btsH6uY5ov8/oqUP9id4x8qYePOzjKTMvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qeay0/btsH6uY5ov8/oqUP9id4x8qYePOzjKTMvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qeay0/btsH6uY5ov8/oqUP9id4x8qYePOzjKTMvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqeay0%2FbtsH6uY5ov8%2FoqUP9id4x8qYePOzjKTMvk%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;2217&quot; height=&quot;374&quot; data-origin-width=&quot;2217&quot; data-origin-height=&quot;374&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 현재&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. Widget Blueprint 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1539&quot; data-origin-height=&quot;1323&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dEqMXi/btsH6ikm2yL/vJbD1sZo2mAhcwBkdQ8bIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dEqMXi/btsH6ikm2yL/vJbD1sZo2mAhcwBkdQ8bIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dEqMXi/btsH6ikm2yL/vJbD1sZo2mAhcwBkdQ8bIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdEqMXi%2FbtsH6ikm2yL%2FvJbD1sZo2mAhcwBkdQ8bIk%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;1539&quot; height=&quot;1323&quot; data-origin-width=&quot;1539&quot; data-origin-height=&quot;1323&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Widget Blueprint 내 필요한 항목 추가&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;585&quot; data-origin-height=&quot;694&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/edByu3/btsH7FL8rSh/KfRXkPN4uitP5IUbvUepyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/edByu3/btsH7FL8rSh/KfRXkPN4uitP5IUbvUepyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/edByu3/btsH7FL8rSh/KfRXkPN4uitP5IUbvUepyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FedByu3%2FbtsH7FL8rSh%2FKfRXkPN4uitP5IUbvUepyK%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;585&quot; height=&quot;694&quot; data-origin-width=&quot;585&quot; data-origin-height=&quot;694&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;2421&quot; data-origin-height=&quot;1048&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6xKAT/btsH71akP9y/EdV1J1tZMqHGbDAv6IVXWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6xKAT/btsH71akP9y/EdV1J1tZMqHGbDAv6IVXWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6xKAT/btsH71akP9y/EdV1J1tZMqHGbDAv6IVXWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6xKAT%2FbtsH71akP9y%2FEdV1J1tZMqHGbDAv6IVXWK%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;2421&quot; height=&quot;1048&quot; data-origin-width=&quot;2421&quot; data-origin-height=&quot;1048&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;440&quot; data-origin-height=&quot;348&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfANqC/btsH66cnSQ8/SN05OSSsPYYEkcZIkuLcB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfANqC/btsH66cnSQ8/SN05OSSsPYYEkcZIkuLcB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfANqC/btsH66cnSQ8/SN05OSSsPYYEkcZIkuLcB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfANqC%2FbtsH66cnSQ8%2FSN05OSSsPYYEkcZIkuLcB1%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;440&quot; height=&quot;348&quot; data-origin-width=&quot;440&quot; data-origin-height=&quot;348&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필요에 따라 개별적인 위젯 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. World Settings 내 GameMode Override 적용&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1107&quot; data-origin-height=&quot;650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VEpkr/btsH6xIiNCP/s6mtBLS29S8NHwOTkremr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VEpkr/btsH6xIiNCP/s6mtBLS29S8NHwOTkremr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VEpkr/btsH6xIiNCP/s6mtBLS29S8NHwOTkremr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVEpkr%2FbtsH6xIiNCP%2Fs6mtBLS29S8NHwOTkremr0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1107&quot; height=&quot;650&quot; data-origin-width=&quot;1107&quot; data-origin-height=&quot;650&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;639&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ajmov/btsH6Myskpx/zYKoKCQflbWKNJagYEJki1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ajmov/btsH6Myskpx/zYKoKCQflbWKNJagYEJki1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ajmov/btsH6Myskpx/zYKoKCQflbWKNJagYEJki1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAjmov%2FbtsH6Myskpx%2FzYKoKCQflbWKNJagYEJki1%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;602&quot; height=&quot;639&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;639&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후, + 버튼을 통해 HUD 를 제어할 Blueprint 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 제어 방식 및 활용 예제&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;389&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9CsKx/btsH6QAQEiF/FKfFXoCMD08wbn63DcYKfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9CsKx/btsH6QAQEiF/FKfFXoCMD08wbn63DcYKfK/img.png&quot; data-alt=&quot;BP_OurHUD&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9CsKx/btsH6QAQEiF/FKfFXoCMD08wbn63DcYKfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9CsKx%2FbtsH6QAQEiF%2FFKfFXoCMD08wbn63DcYKfK%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;389&quot; data-origin-width=&quot;1908&quot; data-origin-height=&quot;389&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;BP_OurHUD&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1982&quot; data-origin-height=&quot;426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/U1cYq/btsH613ewGx/8jkKwCO9ZLNP78PiE1JRvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/U1cYq/btsH613ewGx/8jkKwCO9ZLNP78PiE1JRvK/img.png&quot; data-alt=&quot;BP_Char에서 BP_OurHUD 접근 및 제어&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/U1cYq/btsH613ewGx/8jkKwCO9ZLNP78PiE1JRvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FU1cYq%2FbtsH613ewGx%2F8jkKwCO9ZLNP78PiE1JRvK%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;1982&quot; height=&quot;426&quot; data-origin-width=&quot;1982&quot; data-origin-height=&quot;426&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;BP_Char에서 BP_OurHUD 접근 및 제어&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. Binding&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1771&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbDV5S/btsH62nv8El/G4Syz6Lr7PZNAgB1lzm60K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbDV5S/btsH62nv8El/G4Syz6Lr7PZNAgB1lzm60K/img.png&quot; data-alt=&quot;Detail 항목에서 Bind Function 추가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbDV5S/btsH62nv8El/G4Syz6Lr7PZNAgB1lzm60K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbDV5S%2FbtsH62nv8El%2FG4Syz6Lr7PZNAgB1lzm60K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1000&quot; height=&quot;1771&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1771&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Detail 항목에서 Bind Function 추가&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1971&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1w3az/btsH5wwMsSX/U7tXhtuun4wQpIcpMTt3dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1w3az/btsH5wwMsSX/U7tXhtuun4wQpIcpMTt3dk/img.png&quot; data-alt=&quot;EventGraph&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1w3az/btsH5wwMsSX/U7tXhtuun4wQpIcpMTt3dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1w3az%2FbtsH5wwMsSX%2FU7tXhtuun4wQpIcpMTt3dk%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;1971&quot; height=&quot;512&quot; data-origin-width=&quot;1971&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;EventGraph&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1951&quot; data-origin-height=&quot;532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQyUFk/btsH6SyHtp0/IDEG8XnootD5HWjLljSV90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQyUFk/btsH6SyHtp0/IDEG8XnootD5HWjLljSV90/img.png&quot; data-alt=&quot;Binding Function: Percent&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQyUFk/btsH6SyHtp0/IDEG8XnootD5HWjLljSV90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQyUFk%2FbtsH6SyHtp0%2FIDEG8XnootD5HWjLljSV90%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;1951&quot; height=&quot;532&quot; data-origin-width=&quot;1951&quot; data-origin-height=&quot;532&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Binding Function: Percent&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2264&quot; data-origin-height=&quot;519&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1adr5/btsH6Rfvms7/b29KBNNxlABrbGuuRweyk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1adr5/btsH6Rfvms7/b29KBNNxlABrbGuuRweyk0/img.png&quot; data-alt=&quot;Binding Function: FillColorAndOpacity&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1adr5/btsH6Rfvms7/b29KBNNxlABrbGuuRweyk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1adr5%2FbtsH6Rfvms7%2Fb29KBNNxlABrbGuuRweyk0%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;2264&quot; height=&quot;519&quot; data-origin-width=&quot;2264&quot; data-origin-height=&quot;519&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Binding Function: FillColorAndOpacity&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 결과 테스트용 함수 구현&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1752&quot; data-origin-height=&quot;714&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kHNPw/btsH6MrKxLj/rhBNGHiGvMDvfUG5UJspiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kHNPw/btsH6MrKxLj/rhBNGHiGvMDvfUG5UJspiK/img.png&quot; data-alt=&quot;BP_Char 내 F Key 입력 시 Health가 감소하는 로직 구현&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kHNPw/btsH6MrKxLj/rhBNGHiGvMDvfUG5UJspiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkHNPw%2FbtsH6MrKxLj%2FrhBNGHiGvMDvfUG5UJspiK%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;1752&quot; height=&quot;714&quot; data-origin-width=&quot;1752&quot; data-origin-height=&quot;714&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;BP_Char 내 F Key 입력 시 Health가 감소하는 로직 구현&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 결과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2738&quot; data-origin-height=&quot;1393&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DzyJ2/btsH7m668Sk/sRwkxKyUEOtIaR9qoNK8uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DzyJ2/btsH7m668Sk/sRwkxKyUEOtIaR9qoNK8uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DzyJ2/btsH7m668Sk/sRwkxKyUEOtIaR9qoNK8uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDzyJ2%2FbtsH7m668Sk%2FsRwkxKyUEOtIaR9qoNK8uk%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;2738&quot; height=&quot;1393&quot; data-origin-width=&quot;2738&quot; data-origin-height=&quot;1393&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;2751&quot; data-origin-height=&quot;1408&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/okqcJ/btsH50jUlLq/nfckKcdYh91pWKfFNHX9q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/okqcJ/btsH50jUlLq/nfckKcdYh91pWKfFNHX9q1/img.png&quot; data-alt=&quot;체력 감소 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/okqcJ/btsH50jUlLq/nfckKcdYh91pWKfFNHX9q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FokqcJ%2FbtsH50jUlLq%2FnfckKcdYh91pWKfFNHX9q1%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;2751&quot; height=&quot;1408&quot; data-origin-width=&quot;2751&quot; data-origin-height=&quot;1408&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;체력 감소 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;1. Player 구현 (이전 완료)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;2. 오픈월드 맵 구현 (1일차)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;3. HUD 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;4. 몬스터 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;5. 몬스터 AI 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;6. 사냥 시스템 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;7. NPC 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;8. 퀘스트 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;9. 지상 탈것 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;10. 공중 탈것 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;11. 투사체 공격 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;12. 공격 효과 구현&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=NGaBvXpPu18&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=NGaBvXpPu18&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=VpxCZ_m3B0s&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=VpxCZ_m3B0s&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=KrkYzeBzZ_U&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=KrkYzeBzZ_U&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://forums.unrealengine.com/t/is-event-construct-the-same-as-event-beginplay/138265&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://forums.unrealengine.com/t/is-event-construct-the-same-as-event-beginplay/138265&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/Blueprints/UserGuide/EventDispatcher/BindingAndUnbinding/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/Blueprints/UserGuide/EventDispatcher/BindingAndUnbinding/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/UMG/UserGuide/PropertyBinding/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/UMG/UserGuide/PropertyBinding/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <category>Binding</category>
      <category>blueprint</category>
      <category>HP</category>
      <category>HUD</category>
      <category>progress</category>
      <category>reference</category>
      <category>UI</category>
      <category>Unreal</category>
      <category>Update</category>
      <category>widget</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/359</guid>
      <comments>https://kyunstudio.tistory.com/359#entry359comment</comments>
      <pubDate>Fri, 21 Jun 2024 01:58:06 +0900</pubDate>
    </item>
    <item>
      <title>[Unreal] Day 2 - C++ Class 활용법 (UPROPERTY, AActor class 상속)</title>
      <link>https://kyunstudio.tistory.com/358</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;추후 개발 확장성을 위해 C++ Class 활용 방법에 대해 학습을 진행함.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. C++ Class 활용을 위한 환경 세팅&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. AActor class 상속&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3. UPROPERTY 적용&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4. UFUNCTION 적용&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;1. Player 구현 (이전 완료)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;2. 오픈월드 맵 구현 (1일차)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;3. 저장 시스템 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;4. HUD 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;5. 몬스터 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;6. 몬스터 AI 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;7. 사냥 시스템 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;8. NPC 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;9. 퀘스트 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;10. 지상 탈것 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;11. 공중 탈것 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;12. 투사체 공격 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;13. 공격 효과 구현&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/GameplayArchitecture/Properties/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/GameplayArchitecture/Properties/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-engine-actor-lifecycle&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-engine-actor-lifecycle&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/358</guid>
      <comments>https://kyunstudio.tistory.com/358#entry358comment</comments>
      <pubDate>Wed, 19 Jun 2024 00:50:28 +0900</pubDate>
    </item>
    <item>
      <title>[Unreal] Day 1 - Map 만들기</title>
      <link>https://kyunstudio.tistory.com/357</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오픈월드 활용 목적, 맵 만드는 작업 진행.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2738&quot; data-origin-height=&quot;1424&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csnb81/btsH2pQWDRm/NIx1Z2i6uCVLbnjyERQmak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csnb81/btsH2pQWDRm/NIx1Z2i6uCVLbnjyERQmak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csnb81/btsH2pQWDRm/NIx1Z2i6uCVLbnjyERQmak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcsnb81%2FbtsH2pQWDRm%2FNIx1Z2i6uCVLbnjyERQmak%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;2738&quot; height=&quot;1424&quot; data-origin-width=&quot;2738&quot; data-origin-height=&quot;1424&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;3828&quot; data-origin-height=&quot;2001&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpXhB1/btsH3mspYhl/ZW6GG4ksDrQWkMO5R8LAKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpXhB1/btsH3mspYhl/ZW6GG4ksDrQWkMO5R8LAKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpXhB1/btsH3mspYhl/ZW6GG4ksDrQWkMO5R8LAKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpXhB1%2FbtsH3mspYhl%2FZW6GG4ksDrQWkMO5R8LAKk%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;3828&quot; height=&quot;2001&quot; data-origin-width=&quot;3828&quot; data-origin-height=&quot;2001&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;1959&quot; data-origin-height=&quot;1244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/db6yaw/btsH2r2jFLS/PWtimxKvL7Gdob4kCHFNj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/db6yaw/btsH2r2jFLS/PWtimxKvL7Gdob4kCHFNj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/db6yaw/btsH2r2jFLS/PWtimxKvL7Gdob4kCHFNj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdb6yaw%2FbtsH2r2jFLS%2FPWtimxKvL7Gdob4kCHFNj0%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;1959&quot; height=&quot;1244&quot; data-origin-width=&quot;1959&quot; data-origin-height=&quot;1244&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;3833&quot; data-origin-height=&quot;1449&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LzQx4/btsH1mOa330/mSKKOYTfjWZE0Ey5s8kKG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LzQx4/btsH1mOa330/mSKKOYTfjWZE0Ey5s8kKG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LzQx4/btsH1mOa330/mSKKOYTfjWZE0Ey5s8kKG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLzQx4%2FbtsH1mOa330%2FmSKKOYTfjWZE0Ey5s8kKG0%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;3833&quot; height=&quot;1449&quot; data-origin-width=&quot;3833&quot; data-origin-height=&quot;1449&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;2737&quot; data-origin-height=&quot;1412&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgsOrA/btsH2Ipbfoc/H5cKjtA80siuraxkvjIAkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgsOrA/btsH2Ipbfoc/H5cKjtA80siuraxkvjIAkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgsOrA/btsH2Ipbfoc/H5cKjtA80siuraxkvjIAkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgsOrA%2FbtsH2Ipbfoc%2FH5cKjtA80siuraxkvjIAkk%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;2737&quot; height=&quot;1412&quot; data-origin-width=&quot;2737&quot; data-origin-height=&quot;1412&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;1483&quot; data-origin-height=&quot;572&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KFtuS/btsH1iSz6xk/0vC27qX1Vcu8zUNWgKd4OK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KFtuS/btsH1iSz6xk/0vC27qX1Vcu8zUNWgKd4OK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KFtuS/btsH1iSz6xk/0vC27qX1Vcu8zUNWgKd4OK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKFtuS%2FbtsH1iSz6xk%2F0vC27qX1Vcu8zUNWgKd4OK%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;1483&quot; height=&quot;572&quot; data-origin-width=&quot;1483&quot; data-origin-height=&quot;572&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;2743&quot; data-origin-height=&quot;1128&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eCMgdO/btsH3xmVnli/8mPFn0XqKJhRuJHGpGBAC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eCMgdO/btsH3xmVnli/8mPFn0XqKJhRuJHGpGBAC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eCMgdO/btsH3xmVnli/8mPFn0XqKJhRuJHGpGBAC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeCMgdO%2FbtsH3xmVnli%2F8mPFn0XqKJhRuJHGpGBAC0%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;2743&quot; height=&quot;1128&quot; data-origin-width=&quot;2743&quot; data-origin-height=&quot;1128&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;2742&quot; data-origin-height=&quot;1137&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WOk8T/btsH3ojizQq/E9KfYNO9FlnHvcAw1d8hK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WOk8T/btsH3ojizQq/E9KfYNO9FlnHvcAw1d8hK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WOk8T/btsH3ojizQq/E9KfYNO9FlnHvcAw1d8hK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWOk8T%2FbtsH3ojizQq%2FE9KfYNO9FlnHvcAw1d8hK0%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;2742&quot; height=&quot;1137&quot; data-origin-width=&quot;2742&quot; data-origin-height=&quot;1137&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;1728&quot; data-origin-height=&quot;754&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kGoLf/btsH2kPHneC/PEmK0Oujq6tKPs24rgn0Ik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kGoLf/btsH2kPHneC/PEmK0Oujq6tKPs24rgn0Ik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kGoLf/btsH2kPHneC/PEmK0Oujq6tKPs24rgn0Ik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkGoLf%2FbtsH2kPHneC%2FPEmK0Oujq6tKPs24rgn0Ik%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;1728&quot; height=&quot;754&quot; data-origin-width=&quot;1728&quot; data-origin-height=&quot;754&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;2765&quot; data-origin-height=&quot;1415&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dq0Hk6/btsH2IQf7z0/GWmB88e18KRC4Hk1k88oc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dq0Hk6/btsH2IQf7z0/GWmB88e18KRC4Hk1k88oc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dq0Hk6/btsH2IQf7z0/GWmB88e18KRC4Hk1k88oc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdq0Hk6%2FbtsH2IQf7z0%2FGWmB88e18KRC4Hk1k88oc0%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;2765&quot; height=&quot;1415&quot; data-origin-width=&quot;2765&quot; data-origin-height=&quot;1415&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;1253&quot; data-origin-height=&quot;1380&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBMZI9/btsH27aZNLp/nKnG4MyCAV99NGJIEKcaC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBMZI9/btsH27aZNLp/nKnG4MyCAV99NGJIEKcaC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBMZI9/btsH27aZNLp/nKnG4MyCAV99NGJIEKcaC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBMZI9%2FbtsH27aZNLp%2FnKnG4MyCAV99NGJIEKcaC0%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;1253&quot; height=&quot;1380&quot; data-origin-width=&quot;1253&quot; data-origin-height=&quot;1380&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;1811&quot; data-origin-height=&quot;686&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/br8SEN/btsH3lfXNNN/Wk8rjBGHMPxPAKN5q9Z7z0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/br8SEN/btsH3lfXNNN/Wk8rjBGHMPxPAKN5q9Z7z0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/br8SEN/btsH3lfXNNN/Wk8rjBGHMPxPAKN5q9Z7z0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbr8SEN%2FbtsH3lfXNNN%2FWk8rjBGHMPxPAKN5q9Z7z0%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;1811&quot; height=&quot;686&quot; data-origin-width=&quot;1811&quot; data-origin-height=&quot;686&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Uvce5nRrzk8&amp;amp;t=863s&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=Uvce5nRrzk8&amp;amp;t=863s&lt;/a&gt;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/357</guid>
      <comments>https://kyunstudio.tistory.com/357#entry357comment</comments>
      <pubDate>Tue, 18 Jun 2024 01:11:49 +0900</pubDate>
    </item>
    <item>
      <title>[Unreal] 3D RPG 게임 개발 | Day0 - 로드맵 작성</title>
      <link>https://kyunstudio.tistory.com/356</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/kyun1016/UE5_FPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/kyun1016/UE5_FPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1718450158616&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - kyun1016/UE5_FPS&quot; data-og-description=&quot;Contribute to kyun1016/UE5_FPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/kyun1016/UE5_FPS&quot; data-og-url=&quot;https://github.com/kyun1016/UE5_FPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cNss3d/hyWoEdPulb/PZT67lnmhQ0KgH9sqh0YOk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/kyun1016/UE5_FPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/kyun1016/UE5_FPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cNss3d/hyWoEdPulb/PZT67lnmhQ0KgH9sqh0YOk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - kyun1016/UE5_FPS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to kyun1016/UE5_FPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Player 구현 (이전 완료) &lt;br /&gt;&lt;br /&gt;2. 오픈월드 맵 구현 (1일차) &lt;br /&gt;&lt;br /&gt;3. 저장 시스템 구현 &lt;br /&gt;&lt;br /&gt;4. HUD 구현 &lt;br /&gt;&lt;br /&gt;5. 몬스터 구현 &lt;br /&gt;&lt;br /&gt;6. 몬스터 AI 구현 &lt;br /&gt;&lt;br /&gt;7. 사냥 시스템 구현 &lt;br /&gt;&lt;br /&gt;8. NPC 구현 &lt;br /&gt;&lt;br /&gt;9. 퀘스트 구현 &lt;br /&gt;&lt;br /&gt;10. 지상 탈것 구현 &lt;br /&gt;&lt;br /&gt;11. 공중 탈것 구현 &lt;br /&gt;&lt;br /&gt;12. 투사체 공격 구현 &lt;br /&gt;&lt;br /&gt;13. 공격 효과 구현 &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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;우선적으로 Open World 맵 구현을 목표로 게임 개발을 진행할 예정&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Uvce5nRrzk8&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=Uvce5nRrzk8&lt;/a&gt;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|Unreal|</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/356</guid>
      <comments>https://kyunstudio.tistory.com/356#entry356comment</comments>
      <pubDate>Sat, 15 Jun 2024 20:36:33 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] Day13 - Button Navigation, Button Select</title>
      <link>https://kyunstudio.tistory.com/354</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. Button Navigation 구현&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 강화 창 구현 완료&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;현재 기본적인 2D 게임 개발 및 구조 구현을 완료하여 3D 게임 제작을 진행할 계획입니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3D 게임 개발을 진행한 후, 개발을 계속해나가도록 하겠습니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 1. Button Navigation 구현&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기본적으로 제공되는 Button Navigation 방식이 아닌, Script를 활용해 Navigation을 제어하는 함수를 구현&lt;/p&gt;
&lt;pre id=&quot;code_1718448572201&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    void InputCheck()
    {
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            if (mHUDPowerUp.gameObject.activeSelf)
                HUDPowerUpToggle();
            else
                HUDSettingToggle();
            SaveSettingJson();
        }

        if(mHUDLevelUp.gameObject.activeSelf)
        {
            if(Input.GetKeyDown(KeyCode.DownArrow))
            {
                mHUDLevelUp.SelectBtn(false);
            }
            else if (Input.GetKeyDown(KeyCode.UpArrow))
            {
                mHUDLevelUp.SelectBtn(true);
            }
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1718448397719&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    public void SelectBtn(bool up)
    {
        if (!up)
        {
            if (mSelNum &amp;gt;= mItems.Length-1)
            {
                mSelNum = 0;
                mItems[mSelNum].gameObject.GetComponent&amp;lt;Button&amp;gt;().Select();
                return;
            }
            for (mSelNum = mSelNum + 1; mSelNum &amp;lt; mItems.Length; ++mSelNum)
            {
                if (mItems[mSelNum].gameObject.activeSelf)
                {
                    mItems[mSelNum].gameObject.GetComponent&amp;lt;Button&amp;gt;().Select();
                    return;
                }
            }
        }
        else
        {
            if (mSelNum &amp;lt;= 0)
            {
                mSelNum = mItems.Length - 1;
                mItems[mSelNum].gameObject.GetComponent&amp;lt;Button&amp;gt;().Select();
                return;
            }
            for (mSelNum = mSelNum - 1; mSelNum &amp;gt;= 0; --mSelNum)
            {
                if (mItems[mSelNum].gameObject.activeSelf)
                {
                    mItems[mSelNum].gameObject.GetComponent&amp;lt;Button&amp;gt;().Select();
                    return;
                }
            }
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;349&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kMTvy/btsH00wo8VX/VVEioYSTTx0da04VHnY2mk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kMTvy/btsH00wo8VX/VVEioYSTTx0da04VHnY2mk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kMTvy/btsH00wo8VX/VVEioYSTTx0da04VHnY2mk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkMTvy%2FbtsH00wo8VX%2FVVEioYSTTx0da04VHnY2mk%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;1290&quot; height=&quot;349&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;349&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;2336&quot; data-origin-height=&quot;1367&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnt3A3/btsH1OPGCZr/xJcAt6jAnRyBufkRIZbyxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnt3A3/btsH1OPGCZr/xJcAt6jAnRyBufkRIZbyxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnt3A3/btsH1OPGCZr/xJcAt6jAnRyBufkRIZbyxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbnt3A3%2FbtsH1OPGCZr%2FxJcAt6jAnRyBufkRIZbyxK%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;2336&quot; height=&quot;1367&quot; data-origin-width=&quot;2336&quot; data-origin-height=&quot;1367&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 강화 창 구현 완료&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 골드와 아이템을 보여주는 HUD 및 제어 로직 구현 완료&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1638&quot; data-origin-height=&quot;1257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cewsvx/btsH1hLq3Ky/qzKFt7K4hoQnobDluyhOdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cewsvx/btsH1hLq3Ky/qzKFt7K4hoQnobDluyhOdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cewsvx/btsH1hLq3Ky/qzKFt7K4hoQnobDluyhOdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcewsvx%2FbtsH1hLq3Ky%2FqzKFt7K4hoQnobDluyhOdK%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;1638&quot; height=&quot;1257&quot; data-origin-width=&quot;1638&quot; data-origin-height=&quot;1257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. 패시브 시스템 구현&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. 상자 개봉 로직 추가&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3. 무기 &amp;amp; 퍽 조합 시 무기 업그레이드 로직 추가&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4. 게임 이어하기 로직 추가&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5. 게임 세이브 슬롯 추가 (3개)&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Fscs8jtrAKg&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=Fscs8jtrAKg&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/2019.4/Manual/script-SelectableNavigation.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unity3d.com/kr/2019.4/Manual/script-SelectableNavigation.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1718435945236&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;내비게이션 옵션 - Unity 매뉴얼&quot; data-og-description=&quot;위의 시각화 모드에서 화살표는 하나의 그룹으로서의 컨트롤 집합에 대해 포커스의 변화가 어떻게 설정되는지를 표시합니다. 이는, 각각의 UI 컨트롤에 대해, 해당 컨트롤이 포커스가 있는 경우&quot; data-og-host=&quot;docs.unity3d.com&quot; data-og-source-url=&quot;https://docs.unity3d.com/kr/2019.4/Manual/script-SelectableNavigation.html&quot; data-og-url=&quot;https://docs.unity3d.com/kr/2019.4/Manual/script-SelectableNavigation.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/tJfpG/hyWoMCUefY/XGqT02Q6cIvnQmzC9rL6z1/img.png?width=152&amp;amp;height=90&amp;amp;face=0_0_152_90&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/2019.4/Manual/script-SelectableNavigation.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.unity3d.com/kr/2019.4/Manual/script-SelectableNavigation.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/tJfpG/hyWoMCUefY/XGqT02Q6cIvnQmzC9rL6z1/img.png?width=152&amp;amp;height=90&amp;amp;face=0_0_152_90');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;내비게이션 옵션 - Unity 매뉴얼&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;위의 시각화 모드에서 화살표는 하나의 그룹으로서의 컨트롤 집합에 대해 포커스의 변화가 어떻게 설정되는지를 표시합니다. 이는, 각각의 UI 컨트롤에 대해, 해당 컨트롤이 포커스가 있는 경우&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.unity3d.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://discussions.unity.com/t/how-to-trigger-a-button-click-from-script/135868/2&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://discussions.unity.com/t/how-to-trigger-a-button-click-from-script/135868/2&lt;/a&gt;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|unity| by C#</category>
      <category>Button</category>
      <category>C#</category>
      <category>HUD</category>
      <category>Navigation</category>
      <category>SCRIPT</category>
      <category>select</category>
      <category>unity</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/354</guid>
      <comments>https://kyunstudio.tistory.com/354#entry354comment</comments>
      <pubDate>Sat, 15 Jun 2024 19:53:20 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] Day12 - Template 활용 HUD 구현 (Awake vs Public, Script Execution Order, Active에 따른 Awake함수 동작 오류 해결)</title>
      <link>https://kyunstudio.tistory.com/353</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. HUD 활용 시 편의성 확장&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Json 데이터 크기에 따라 동적 HUD 생성 구현&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Json 관리 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Power Up 관련 Json 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. HUD 동작 개선&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Awake 함수 동작 개선&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. HUD 활용 시 편의성 확장&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Json 데이터 크기에 따라 동적 HUD 생성 구현&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;914&quot; data-origin-height=&quot;935&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnP7rC/btsHWBYzSdO/V91Sj21weQYRrlkh0r6PyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnP7rC/btsHWBYzSdO/V91Sj21weQYRrlkh0r6PyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnP7rC/btsHWBYzSdO/V91Sj21weQYRrlkh0r6PyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnP7rC%2FbtsHWBYzSdO%2FV91Sj21weQYRrlkh0r6PyK%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;914&quot; height=&quot;935&quot; data-origin-width=&quot;914&quot; data-origin-height=&quot;935&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;920&quot; data-origin-height=&quot;922&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpm4Ma/btsHVX17mLE/US6jQskR07qbB9s2SerAIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpm4Ma/btsHVX17mLE/US6jQskR07qbB9s2SerAIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpm4Ma/btsHVX17mLE/US6jQskR07qbB9s2SerAIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdpm4Ma%2FbtsHVX17mLE%2FUS6jQskR07qbB9s2SerAIK%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;920&quot; height=&quot;922&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;922&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Json 관리 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Power Up 관련 Json 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아래의 구조체를 통해 Power Up 데이터를 제어함&lt;/p&gt;
&lt;pre id=&quot;code_1718208372768&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[System.Serializable]
public struct JsonPowerUpData
{
    public bool Enable;
    public int SpriteId;
    public Enum.DescType DescType;

    public float[] MovementSpeed;
    public int[] Projectile;
    public float[] ProjectileSize;
    public float[] Damage;
    public float[] Speed;
    // Melee
    public float[] Range;
    // Range
    public float[] CoolTime;
    public int[] Pierce;

    // Coeffcient
    public float[] MovementSpeedCoef;
    public float[] ProjectileCoef;
    public float[] ProjectileSizeCoef;
    public float[] DamageCoef;
    public float[] SpeedCoef;
    // Melee
    public float[] RangeCoef;
    // Range
    public float[] CoolTimeCoef;
    public float[] PierceCoef;
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. HUD 동작 개선&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Awake 함수 동작 개선&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 이유:&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;HUD의 경우 Json Load 이후 Template을 바탕으로 GameObject를 생성하는 동작이 이뤄져야 함.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;허나, HUD가 Active가 아닌 경우, Awake 동작에서 오동작이 발생함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(1) 소스코드&lt;/p&gt;
&lt;pre id=&quot;code_1718209161466&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class HUDBtnItem : MonoBehaviour
{
    public int mId;

    public Image mIcon;
    public TMP_Text mTextLevel;
    public TMP_Text mTextName;
    public TMP_Text mTextDesc;
    private void Awake()
    {
        mIcon = GetComponentsInChildren&amp;lt;Image&amp;gt;()[1];

        TMP_Text[] texts = GetComponentsInChildren&amp;lt;TMP_Text&amp;gt;();
        mTextLevel = texts[0];
        mTextName = texts[1];
        mTextDesc = texts[2];

        UpdateText();
        UpdateSprite();
    }

    public void UpdateTextName()
    {
        if (mId &amp;lt; GameManager.instance.mJsonWeaponData.Length)
        {
            mTextName.text = GameManager.instance.mJsonTextData[(int)GameManager.instance.mSettingData.LanguageType].WeaponName[mId];
        }
        else
        {
            int idx = mId - GameManager.instance.mJsonWeaponData.Length;
            mTextName.text = GameManager.instance.mJsonTextData[(int)GameManager.instance.mSettingData.LanguageType].PerkName[idx];
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(2) Object 내 연동이 이뤄지지 않음을 확인 가능&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1831&quot; data-origin-height=&quot;929&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/emEfLt/btsHVFAzVKA/Ajsfy0VQIM8TxIyQTCL681/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/emEfLt/btsHVFAzVKA/Ajsfy0VQIM8TxIyQTCL681/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/emEfLt/btsHVFAzVKA/Ajsfy0VQIM8TxIyQTCL681/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FemEfLt%2FbtsHVFAzVKA%2FAjsfy0VQIM8TxIyQTCL681%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;1831&quot; height=&quot;929&quot; data-origin-width=&quot;1831&quot; data-origin-height=&quot;929&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 기존 해결 방법&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(1) 항상 Active로 존재하도록 Rect Transform의 Scale 항목을 제어함 (초기 Scale 0)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Display가 필요한 순간 Scale을 1로 제어&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nJDoH/btsHX2NYnfm/hiXCgJwzMVB3hgsVPoBrlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nJDoH/btsHX2NYnfm/hiXCgJwzMVB3hgsVPoBrlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nJDoH/btsHX2NYnfm/hiXCgJwzMVB3hgsVPoBrlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnJDoH%2FbtsHX2NYnfm%2FhiXCgJwzMVB3hgsVPoBrlK%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;1023&quot; height=&quot;528&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;528&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1718209587773&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    public void Show()
    {
        Time.timeScale = 0;
        isActive = true;
        mRect.localScale = Vector3.one;

        GameManager.instance.PlayEffect(true);
    }

    public void Hide()
    {
        Time.timeScale = 1;
        isActive = false;
        mRect.localScale = Vector3.zero;

        GameManager.instance.PlayEffect(false);
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(2) Script Execution Order을 통해 HUD Awake() 함수 동작 순서 제어&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;GameObject.Awake() -&amp;gt; Json Load&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;HUD...Awake() -&amp;gt; Json 데이터에 따라 필요한 HUD 동적 선언&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;1104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbmDHN/btsHVEobqNn/0bfkV0hn0ZqGck8gyAixm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbmDHN/btsHVEobqNn/0bfkV0hn0ZqGck8gyAixm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbmDHN/btsHVEobqNn/0bfkV0hn0ZqGck8gyAixm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbmDHN%2FbtsHVEobqNn%2F0bfkV0hn0ZqGck8gyAixm1%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;1032&quot; height=&quot;1104&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;1104&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) 개선 방법&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 불필요한 HUD는 Disable 할 수 있도록, Awake 함수를 제거&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 대신 Template에서 연결이 필요한 항목 (e.g. Text)는 public으로 선언하여 컴파일 간 동작 순서나 Active와 무관하게 동작이 가능하도록 변경함.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;121&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Dex1n/btsHVFUUKd5/3DwLPq7mxKF3ksNfEUanF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Dex1n/btsHVFUUKd5/3DwLPq7mxKF3ksNfEUanF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Dex1n/btsHVFUUKd5/3DwLPq7mxKF3ksNfEUanF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDex1n%2FbtsHVFUUKd5%2F3DwLPq7mxKF3ksNfEUanF1%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;1017&quot; height=&quot;121&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;121&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1718208227073&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class HUDPowerUp : MonoBehaviour
{
    public GameObject mBtnTemplet;
    GameObject[] mItems;
    public TMP_Text mTextTitle;

    public void UpdateText()
    {
        mTextTitle.text = GameManager.instance.mJsonTextData[(int)GameManager.instance.mSettingData.LanguageType].HUDLevelUpTitle[0];
        for (int i = 0; i &amp;lt; mItems.Length; ++i)
        {
            mItems[i].GetComponent&amp;lt;HUDBtnPowerUp&amp;gt;().UpdateText();
        }
    }

    public void Init()
    {
        mItems = new GameObject[GameManager.instance.mJsonPowerUpData.Length];
        mItems[0] = mBtnTemplet;
        mItems[0].GetComponent&amp;lt;HUDBtnPowerUp&amp;gt;().Init(0);
        for (int i = 1; i &amp;lt; mItems.Length; ++i)
        {
            mItems[i] = Instantiate(mBtnTemplet);
            mItems[i].GetComponent&amp;lt;HUDBtnPowerUp&amp;gt;().Init(i);
            mItems[i].transform.SetParent(mBtnTemplet.transform.parent);
            mItems[i].transform.name = &quot;BtnPowerUp&quot; + i;
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. 강화 시스템 구현 완료 (골드 활용)&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. 상자 개봉 로직 추가&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3. 무기 &amp;amp; 퍽 조합 시 무기 업그레이드 로직 추가&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4. 게임 이어하기 로직 추가&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5. 게임 세이브 슬롯 추가 (3개)&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://forum.unity.com/threads/start-vs-awake.41633/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://forum.unity.com/threads/start-vs-awake.41633/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1718208042573&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Start() VS Awake()&quot; data-og-description=&quot;Hi, What is diffrent between this 2 function exactly? So thanks.&quot; data-og-host=&quot;forum.unity.com&quot; data-og-source-url=&quot;https://forum.unity.com/threads/start-vs-awake.41633/&quot; data-og-url=&quot;https://forum.unity.com/threads/start-vs-awake.41633/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://forum.unity.com/threads/start-vs-awake.41633/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://forum.unity.com/threads/start-vs-awake.41633/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Start() VS Awake()&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Hi, What is diffrent between this 2 function exactly? So thanks.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;forum.unity.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://forum.unity.com/threads/is-it-safe-to-use-awake-for-hooking-up-references.289807/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://forum.unity.com/threads/is-it-safe-to-use-awake-for-hooking-up-references.289807/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1718209958916&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Is it safe to use Awake for hooking up references&quot; data-og-description=&quot;Hey, I'd like to know when is it safe to connect game object references. By that i mean: Call GetComponent&amp;lt;T&amp;gt; to assign component references. Call...&quot; data-og-host=&quot;forum.unity.com&quot; data-og-source-url=&quot;https://forum.unity.com/threads/is-it-safe-to-use-awake-for-hooking-up-references.289807/&quot; data-og-url=&quot;https://forum.unity.com/threads/is-it-safe-to-use-awake-for-hooking-up-references.289807/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://forum.unity.com/threads/is-it-safe-to-use-awake-for-hooking-up-references.289807/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://forum.unity.com/threads/is-it-safe-to-use-awake-for-hooking-up-references.289807/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Is it safe to use Awake for hooking up references&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Hey, I'd like to know when is it safe to connect game object references. By that i mean: Call GetComponent&amp;lt;T&amp;gt; to assign component references. Call...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;forum.unity.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.reddit.com/r/Unity3D/comments/nehp9y/awake_and_getcomponent_vs_public_and_drag_androp/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.reddit.com/r/Unity3D/comments/nehp9y/awake_and_getcomponent_vs_public_and_drag_androp/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1718209963548&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;From the Unity3D community on Reddit&quot; data-og-description=&quot;Explore this post and more from the Unity3D community&quot; data-og-host=&quot;www.reddit.com&quot; data-og-source-url=&quot;https://www.reddit.com/r/Unity3D/comments/nehp9y/awake_and_getcomponent_vs_public_and_drag_androp/&quot; data-og-url=&quot;https://www.reddit.com/r/Unity3D/comments/nehp9y/awake_and_getcomponent_vs_public_and_drag_androp/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Sm3py/hyWlaxWAJi/mQngjrG2nMe6nJmNrUcsaK/img.jpg?width=1120&amp;amp;height=584&amp;amp;face=0_0_1120_584,https://scrap.kakaocdn.net/dn/EPU4I/hyWlaq9zdc/kZS1r7CdD11t773bsB53m1/img.jpg?width=1120&amp;amp;height=584&amp;amp;face=0_0_1120_584&quot;&gt;&lt;a href=&quot;https://www.reddit.com/r/Unity3D/comments/nehp9y/awake_and_getcomponent_vs_public_and_drag_androp/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.reddit.com/r/Unity3D/comments/nehp9y/awake_and_getcomponent_vs_public_and_drag_androp/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Sm3py/hyWlaxWAJi/mQngjrG2nMe6nJmNrUcsaK/img.jpg?width=1120&amp;amp;height=584&amp;amp;face=0_0_1120_584,https://scrap.kakaocdn.net/dn/EPU4I/hyWlaq9zdc/kZS1r7CdD11t773bsB53m1/img.jpg?width=1120&amp;amp;height=584&amp;amp;face=0_0_1120_584');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;From the Unity3D community on Reddit&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Explore this post and more from the Unity3D community&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.reddit.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/ScriptReference/Object.Instantiate.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unity3d.com/ScriptReference/Object.Instantiate.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1718210287559&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Unity - Scripting API: Object.Instantiate&quot; data-og-description=&quot;This function makes a copy of an object in a similar way to the Duplicate command in the editor. If you are cloning a GameObject you can specify its position and rotation (these default to the original GameObject's position and rotation otherwise). If you &quot; data-og-host=&quot;docs.unity3d.com&quot; data-og-source-url=&quot;https://docs.unity3d.com/ScriptReference/Object.Instantiate.html&quot; data-og-url=&quot;https://docs.unity3d.com/ScriptReference/Object.Instantiate.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xhf5m/hyWljVVW3K/6am2DbEeQJbpTx3e2KH770/img.jpg?width=240&amp;amp;height=128&amp;amp;face=0_0_240_128&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/ScriptReference/Object.Instantiate.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.unity3d.com/ScriptReference/Object.Instantiate.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xhf5m/hyWljVVW3K/6am2DbEeQJbpTx3e2KH770/img.jpg?width=240&amp;amp;height=128&amp;amp;face=0_0_240_128');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Unity - Scripting API: Object.Instantiate&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;This function makes a copy of an object in a similar way to the Duplicate command in the editor. If you are cloning a GameObject you can specify its position and rotation (these default to the original GameObject's position and rotation otherwise). If you&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.unity3d.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|unity| by C#</category>
      <category>awake</category>
      <category>awake 오류</category>
      <category>C#</category>
      <category>HUD</category>
      <category>instantiate</category>
      <category>Public</category>
      <category>script excution order</category>
      <category>template</category>
      <category>unity</category>
      <category>연결 오류</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/353</guid>
      <comments>https://kyunstudio.tistory.com/353#entry353comment</comments>
      <pubDate>Thu, 13 Jun 2024 01:38:26 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] Day11 - 디버프 로직 추가, 상속, Scroll View</title>
      <link>https://kyunstudio.tistory.com/352</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 추상화&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Weapon 종류(Melee, Range 등)에 무관하게 Weapon를 부모로 변경&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Tag 통합&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 전역 함수 구현&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 프리팹 생성 시 동일한 함수를 활용하도록 변경&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(e.g. 몬스터, 필드 오브젝트는 전역 함수 호출 활용, 아이템 생성)&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- static 선언 활용 메모리 낭비 방지&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 디버프 로직 구현&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 몬스터 내부에 디버프 관련 변수 및 로직 추가&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 강화 시스템 구현 중&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- HUD 구현 중 (Scroll View 구현 완료)&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 추상화&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Main 변수 및 동작을 부모 위치로 옮김&lt;/p&gt;
&lt;pre id=&quot;code_1718113092590&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Weapon : MonoBehaviour
{
    public Enum.DebuffType mDebuff;
    public Enum.EffectType mEffect;
    public float mDamage;
    public float mDebuffPower;

    public void Init(float damage, float debuffPower = 0, Enum.DebuffType debuff = Enum.DebuffType.None, Enum.EffectType effect = Enum.EffectType.None)
    {
        mDebuff = debuff;
        mEffect = effect;
        mDamage = damage;
        mDebuffPower = debuffPower;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 추가적인 동작이 필요한 경우 Weapon을 상속받아 변경&lt;/p&gt;
&lt;pre id=&quot;code_1718113104354&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Range : Weapon
{
    bool mIsLive;
    int mPer;
    float mSpeed;
    Vector3 mDir;
    
    private void FixedUpdate()
    {
        if (!mIsLive)
            return;
        transform.position += mDir * mSpeed * Time.deltaTime;

        if (Vector3.Distance(transform.position, GameManager.instance.mPlayer.transform.position) &amp;gt; 20)
        {
            mIsLive = false;
            gameObject.SetActive(false);
        }
    }
    public void Init(float damage, int per, Vector3 dir, float speed, float debuffPower = 0, Enum.DebuffType debuff = Enum.DebuffType.None, Enum.EffectType effect = Enum.EffectType.None)
    {
        mIsLive = true;
        mDebuff = debuff;
        mEffect = effect;

        mDamage = damage;
        mPer = per;
        mDir = dir;
        mSpeed = speed;
        mDebuffPower = debuffPower;
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (!collision.CompareTag(&quot;Enemy&quot;))
            return;

        mPer--;

        if (mEffect == Enum.EffectType.Stop)
        {
            transform.localScale = new Vector3(1.0f, 1.0f);
            mSpeed = 0;
        }


        if (mPer == -1)
        {
            mIsLive = false;
            gameObject.SetActive(false);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 전역 함수 구현&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;- 프리팹을 활용하여 객체를 생성하는 함수 관리를 하나의 클래스로 변경&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;- 이때, static을 적용 이유는, &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;메모리를 효율적으로 활용하기 위해 하나의 &lt;/span&gt;클래스 객체만 생성하여 함수를 관리함.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1718113232631&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System.Collections;
using System.Collections.Generic;
using UnityEngine;

static public class FuncPool
{
    public static void SpawnEnemy(int level)
    {
        GameObject enemy = GameManager.instance.mEnemyPool.Get();
        enemy.transform.position = GameManager.instance.mPlayer.transform.position;
        Vector3 pos = Random.insideUnitCircle;
        if (pos.magnitude == 0)
            pos.x = 1;
        pos = pos.normalized;
        enemy.transform.position += pos * 20;
        enemy.GetComponent&amp;lt;Enemy&amp;gt;().Init(level);
    }

    public static void SpawnFieldObject()
    {
        GameObject item = GameManager.instance.mFieldObjectPool.Get();
        item.transform.position = GameManager.instance.mPlayer.transform.position;
        Vector3 pos = Random.insideUnitCircle;
        if (pos.magnitude == 0)
            pos.x = 1;
        pos = pos.normalized;
        item.transform.position += pos * 20;
        int value = Random.Range(0, GameManager.instance.mFieldObjectSprite.Length);
        item.GetComponent&amp;lt;FieldObject&amp;gt;().Init(value);
    }

    public static void DropGold(int value, Vector3 pos)
    {
        GameObject item = GameManager.instance.mDropPool.Get();
        item.transform.position = pos;
        item.transform.position += new Vector3(Random.value * 2 - 1, Random.value * 2 - 1);
        item.transform.rotation = Quaternion.identity;
        item.GetComponent&amp;lt;DropItem&amp;gt;().mData = value;
        switch (value)
        {
            case &amp;gt; 50:
                item.GetComponent&amp;lt;DropItem&amp;gt;().mType = Enum.DropItemSprite.Gold2;
                item.GetComponent&amp;lt;SpriteRenderer&amp;gt;().sprite = GameManager.instance.mDropItemSprite[(int)Enum.DropItemSprite.Gold2];
                break;
            case &amp;gt; 10:
                item.GetComponent&amp;lt;DropItem&amp;gt;().mType = Enum.DropItemSprite.Gold1;
                item.GetComponent&amp;lt;SpriteRenderer&amp;gt;().sprite = GameManager.instance.mDropItemSprite[(int)Enum.DropItemSprite.Gold1];
                break;
            default:
                item.GetComponent&amp;lt;DropItem&amp;gt;().mType = Enum.DropItemSprite.Gold0;
                item.GetComponent&amp;lt;SpriteRenderer&amp;gt;().sprite = GameManager.instance.mDropItemSprite[(int)Enum.DropItemSprite.Gold0];
                break;
        }
        item.GetComponent&amp;lt;SpriteRenderer&amp;gt;().color = new Color(1, 1, 1, 0.5f);
    }

    public static void DropExp(int value, Vector3 pos)
    {
        GameObject item = GameManager.instance.mDropPool.Get();
        item.transform.position = pos;
        item.transform.rotation = Quaternion.identity;
        item.GetComponent&amp;lt;DropItem&amp;gt;().mData = value;
        switch (value)
        {
            case &amp;gt; 50:
                item.GetComponent&amp;lt;DropItem&amp;gt;().mType = Enum.DropItemSprite.Exp2;
                item.GetComponent&amp;lt;SpriteRenderer&amp;gt;().sprite = GameManager.instance.mDropItemSprite[(int)Enum.DropItemSprite.Exp2];
                break;
            case &amp;gt; 10:
                item.GetComponent&amp;lt;DropItem&amp;gt;().mType = Enum.DropItemSprite.Exp1;
                item.GetComponent&amp;lt;SpriteRenderer&amp;gt;().sprite = GameManager.instance.mDropItemSprite[(int)Enum.DropItemSprite.Exp1];
                break;
            default:
                item.GetComponent&amp;lt;DropItem&amp;gt;().mType = Enum.DropItemSprite.Exp0;
                item.GetComponent&amp;lt;SpriteRenderer&amp;gt;().sprite = GameManager.instance.mDropItemSprite[(int)Enum.DropItemSprite.Exp0];
                break;
        }
        item.GetComponent&amp;lt;SpriteRenderer&amp;gt;().color = new Color(1, 1, 1, 0.5f);
    }

    public static void DropItem(Vector3 pos)
    {
        GameObject item = GameManager.instance.mDropPool.Get();
        item.transform.position = pos;
        item.transform.rotation = Quaternion.identity;

        float val = Random.value;
        switch (val)
        {
            case &amp;lt; 0.1f:
                item.GetComponent&amp;lt;DropItem&amp;gt;().mType = Enum.DropItemSprite.Mag;
                item.GetComponent&amp;lt;SpriteRenderer&amp;gt;().sprite = GameManager.instance.mDropItemSprite[(int)Enum.DropItemSprite.Mag];
                break;
            case &amp;lt; 0.3f:
                item.GetComponent&amp;lt;DropItem&amp;gt;().mType = Enum.DropItemSprite.Health;
                item.GetComponent&amp;lt;SpriteRenderer&amp;gt;().sprite = GameManager.instance.mDropItemSprite[(int)Enum.DropItemSprite.Health];
                break;
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 실제 활용 예시&lt;/p&gt;
&lt;pre id=&quot;code_1718113498856&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Enemy : MonoBehaviour
{
    private void Dead()
    {
        mIsLive = false;
        mColl.enabled = false;
        mRigid.simulated = false;
        mSpriter.sortingOrder = 1;
        mAnim.SetBool(&quot;Dead&quot;, true);
        GameManager.instance.mPlayerData.Kill++;

        // 경험치 드롭
        FuncPool.DropExp(mDropExp, transform.position);

        // 골드 드롭
        if (Random.value &amp;lt;= mDropGoldChance)
        {
            FuncPool.DropGold(mDropGold, transform.position);
        }

        GameManager.instance.PlaySFX(Enum.SFX.Dead);

        gameObject.SetActive(false);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1718113541377&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class DropItem : MonoBehaviour
{
    public Enum.DropItemSprite mType;
    public int mData;
    public bool mEnable;

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag(&quot;Player&quot;))
        {
            mEnable = false;
            switch (mType)
            {
                case Enum.DropItemSprite.Exp0:
                case Enum.DropItemSprite.Exp1:
                case Enum.DropItemSprite.Exp2:
                    GameManager.instance.GetExp(mData);
                    break;
                case Enum.DropItemSprite.Health:
                    GameManager.instance.GetHealth(mData);
                    break;
                case Enum.DropItemSprite.Mag:
                    foreach (GameObject item in GameManager.instance.mDropPool.mPool)
                    {
                        if (item.GetComponent&amp;lt;DropItem&amp;gt;().mType == Enum.DropItemSprite.Exp0 || item.GetComponent&amp;lt;DropItem&amp;gt;().mType == Enum.DropItemSprite.Exp1 || item.GetComponent&amp;lt;DropItem&amp;gt;().mType == Enum.DropItemSprite.Exp2)
                            item.GetComponent&amp;lt;DropItem&amp;gt;().mEnable = true;
                    }
                    break;
                case Enum.DropItemSprite.Gold0:
                case Enum.DropItemSprite.Gold1:
                case Enum.DropItemSprite.Gold2:
                    GameManager.instance.GetGold(mData);
                    break;
                default:
                    Debug.Assert(false, &quot;Error&quot;);
                    break;
            }
            gameObject.SetActive(false);
            return;
        }

        if (collision.CompareTag(&quot;PickupCollider&quot;))
            mEnable = true;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 디버프 로직 구현&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 몬스터 내부에 디버프 관련 변수 및 로직 추가&lt;/p&gt;
&lt;pre id=&quot;code_1718113183623&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Enemy : MonoBehaviour
{
    bool mIsLive;
    public float[] mDebuffPowers;
    
    private void FixedUpdate()
    {
        if (!GameManager.instance.mIsLive)
            return;
        if (!mIsLive || mAnim.GetCurrentAnimatorStateInfo(0).IsName(&quot;Hit&quot;))
            return;

        if (mDebuffPowers[(int)Enum.DebuffType.TicDamage] &amp;gt; 0)
            Hit(mDebuffPowers[(int)Enum.DebuffType.TicDamage] * Time.fixedDeltaTime);

        Vector2 dirVec = mTarget.position - mRigid.position;
        Vector2 nextVec = dirVec.normalized * mMovementSpeed * mDebuffPowers[(int)Enum.DebuffType.SlowCoef] * Time.fixedDeltaTime;
        mRigid.MovePosition(mRigid.position + nextVec);

        mRigid.velocity = Vector2.zero;
    }
    
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (!(collision.CompareTag(&quot;Weapon&quot;)) || !mIsLive)
            return;

        Hit(collision.GetComponent&amp;lt;Weapon&amp;gt;().mDamage);
        mDebuffPowers[(int)collision.GetComponent&amp;lt;Weapon&amp;gt;().mDebuff] += collision.GetComponent&amp;lt;Weapon&amp;gt;().mDebuffPower;
    }
    private void OnTriggerExit2D(Collider2D collision)
    {
        if (!(collision.CompareTag(&quot;Weapon&quot;)) || !mIsLive)
            return;

        mDebuffPowers[(int)collision.GetComponent&amp;lt;Weapon&amp;gt;().mDebuff] -= collision.GetComponent&amp;lt;Weapon&amp;gt;().mDebuffPower;
    }
 }&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 강화 시스템 구현 중&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- HUD 구현 중 (Scroll View 구현 완료)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1665&quot; data-origin-height=&quot;899&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bw64kd/btsHVIpguvp/mWfP8fKF8engUtJr36FWdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bw64kd/btsHVIpguvp/mWfP8fKF8engUtJr36FWdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bw64kd/btsHVIpguvp/mWfP8fKF8engUtJr36FWdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbw64kd%2FbtsHVIpguvp%2FmWfP8fKF8engUtJr36FWdK%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;1665&quot; height=&quot;899&quot; data-origin-width=&quot;1665&quot; data-origin-height=&quot;899&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 구현 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) Scroll Rect 추가&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Movement Type: Clamped(지정된 범위 내에 한정하여 움직이도록 설정)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Scroll Sensitivity: 25 (스크롤 당 25 pixel이 움직이도록 설정)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1270&quot; data-origin-height=&quot;913&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GtDg9/btsHUBkofA5/5kjHsfyekubaUZOmkc9400/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GtDg9/btsHUBkofA5/5kjHsfyekubaUZOmkc9400/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GtDg9/btsHUBkofA5/5kjHsfyekubaUZOmkc9400/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGtDg9%2FbtsHUBkofA5%2F5kjHsfyekubaUZOmkc9400%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;1270&quot; height=&quot;913&quot; data-origin-width=&quot;1270&quot; data-origin-height=&quot;913&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) Content 항목&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2-1) Grid Layout Group 적용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 하위 객체를 그리드 형태로 제어하기 위해 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2-2) Content Size Fitter 적용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Content Size(Height)가 객체의 Vertical Height에 맞춰 가변적으로 제어되도록 설정&lt;br /&gt;이 이유는, Vertical Scrollbar는 Viewport의 Vertical Height 범위에 한정하여 제어가 이뤄짐.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, Height가 객체의 높이에 맞게 가변적으로 설정될 수 있도록 Content Size Filter를 적용함&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1267&quot; data-origin-height=&quot;830&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rs8C9/btsHVsGZnb9/kobtNOhFvJQHR5gabWccY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rs8C9/btsHVsGZnb9/kobtNOhFvJQHR5gabWccY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rs8C9/btsHVsGZnb9/kobtNOhFvJQHR5gabWccY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frs8C9%2FbtsHVsGZnb9%2FkobtNOhFvJQHR5gabWccY1%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;1267&quot; height=&quot;830&quot; data-origin-width=&quot;1267&quot; data-origin-height=&quot;830&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) Template HUD 구현&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 추후 아이템 추가 시 동적 생성의 베이스가 될 Template HUD 구현&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1437&quot; data-origin-height=&quot;496&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDPrJu/btsHVqWLlm2/YkKPDhDAYZKLLcsqAspHkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDPrJu/btsHVqWLlm2/YkKPDhDAYZKLLcsqAspHkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDPrJu/btsHVqWLlm2/YkKPDhDAYZKLLcsqAspHkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDPrJu%2FbtsHVqWLlm2%2FYkKPDhDAYZKLLcsqAspHkk%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;1437&quot; height=&quot;496&quot; data-origin-width=&quot;1437&quot; data-origin-height=&quot;496&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. 강화 시스템 구현 완료 (골드 활용)&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. 상자 개봉 로직 추가&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3. 무기 &amp;amp; 퍽 조합 시 무기 업그레이드 로직 추가&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4. 게임 이어하기 로직 추가&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5. 게임 세이브 슬롯 추가 (3개)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고 자료&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/2020.3/Manual/script-ContentSizeFitter.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unity3d.com/kr/2020.3/Manual/script-ContentSizeFitter.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1718120542898&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;콘텐츠 크기 피터 - Unity 매뉴얼&quot; data-og-description=&quot;콘텐츠 크기 피터는 자체 레이아웃 요소의 크기를 제어하는 레이아웃 컨트롤러의 기능을 수행합니다. 크기는 게임 오브젝트의 레이아웃 요소 컴포넌트에서 제공하는 최소 또는 기본 크기에 따&quot; data-og-host=&quot;docs.unity3d.com&quot; data-og-source-url=&quot;https://docs.unity3d.com/kr/2020.3/Manual/script-ContentSizeFitter.html&quot; data-og-url=&quot;https://docs.unity3d.com/kr/2020.3/Manual/script-ContentSizeFitter.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sFPXk/hyWk9erDcy/Qq9kvl88IIgYPj7KWwZLkk/img.png?width=293&amp;amp;height=58&amp;amp;face=0_0_293_58&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/2020.3/Manual/script-ContentSizeFitter.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.unity3d.com/kr/2020.3/Manual/script-ContentSizeFitter.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sFPXk/hyWk9erDcy/Qq9kvl88IIgYPj7KWwZLkk/img.png?width=293&amp;amp;height=58&amp;amp;face=0_0_293_58');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;콘텐츠 크기 피터 - Unity 매뉴얼&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;콘텐츠 크기 피터는 자체 레이아웃 요소의 크기를 제어하는 레이아웃 컨트롤러의 기능을 수행합니다. 크기는 게임 오브젝트의 레이아웃 요소 컴포넌트에서 제공하는 최소 또는 기본 크기에 따&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.unity3d.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/2021.3/Manual/script-ScrollRect.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unity3d.com/kr/2021.3/Manual/script-ScrollRect.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1718120575592&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;스크롤 사각 영역 - Unity 매뉴얼&quot; data-og-description=&quot;공간을 많이 차지하는 콘텐츠를 작은 영역에 표시해야 할 때 스크롤 사각 영역을 활용할 수 있습니다. 스크롤 사각 영역(Scroll Rect)은 콘텐츠를 스크롤하는 기능을 제공합니다.&quot; data-og-host=&quot;docs.unity3d.com&quot; data-og-source-url=&quot;https://docs.unity3d.com/kr/2021.3/Manual/script-ScrollRect.html&quot; data-og-url=&quot;https://docs.unity3d.com/kr/2021.3/Manual/script-ScrollRect.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dv2y4Y/hyWllMIls4/jPSy9fhNDo8c2GpieyhHDK/img.png?width=350&amp;amp;height=270&amp;amp;face=0_0_350_270&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/2021.3/Manual/script-ScrollRect.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.unity3d.com/kr/2021.3/Manual/script-ScrollRect.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dv2y4Y/hyWllMIls4/jPSy9fhNDo8c2GpieyhHDK/img.png?width=350&amp;amp;height=270&amp;amp;face=0_0_350_270');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;스크롤 사각 영역 - Unity 매뉴얼&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;공간을 많이 차지하는 콘텐츠를 작은 영역에 표시해야 할 때 스크롤 사각 영역을 활용할 수 있습니다. 스크롤 사각 영역(Scroll Rect)은 콘텐츠를 스크롤하는 기능을 제공합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.unity3d.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|unity| by C#</category>
      <category>C#</category>
      <category>scroll view</category>
      <category>Static</category>
      <category>template</category>
      <category>unity</category>
      <category>디버프</category>
      <category>상속</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/352</guid>
      <comments>https://kyunstudio.tistory.com/352#entry352comment</comments>
      <pubDate>Tue, 11 Jun 2024 22:47:11 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] Day10 - 골드 및 드롭 로직 추가 (Random.insideUnitCircle, 스프라이트 추가, 스프라이트 아틀라스, Pixel Perfect)</title>
      <link>https://kyunstudio.tistory.com/351</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=YOQZQ1hVp-w&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=YOQZQ1hVp-w&lt;/a&gt;&lt;/b&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=YOQZQ1hVp-w&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/egwMOu/hyWlnwZChZ/MEaG9nLQVnTc6tn3dd7FB1/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;[Unity] 10일차 - 골드 &amp;amp; 필드 오브젝트 생성 시스템 추가&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/YOQZQ1hVp-w&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 스프라이트 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 스프라이트 및 스프라이트 아틀라스 활용&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 골드 시스템 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Random.value 활용하여 랜덤한 확률을 갖고 골드가 드롭되도록 구현&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 적 생성 로직 수정&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 예정된 스폰 포인트가 아닌 임의의 반경을 갖고 몬스터가 스폰되도록 구현&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 필드 오브젝트 생성 로직 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 플레이어 주변에 파괴가 가능한 필드 오브젝트가 스폰되도록 구현&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 오브젝트 파괴 시 확률적으로 아이템이 생성 (e.g. 자석, 힐팩, 골드 등)&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 스프라이트 추가&lt;/b&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: #333333; text-align: start;&quot;&gt;32x32 크기의&lt;span&gt; 스프라이트인 경우)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1) 오브젝트 선택&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;564&quot; data-origin-height=&quot;1151&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Mg1Y5/btsHVqh2SFZ/jlIzDwVHSF9rmxs7mGRijK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Mg1Y5/btsHVqh2SFZ/jlIzDwVHSF9rmxs7mGRijK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Mg1Y5/btsHVqh2SFZ/jlIzDwVHSF9rmxs7mGRijK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMg1Y5%2FbtsHVqh2SFZ%2FjlIzDwVHSF9rmxs7mGRijK%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;314&quot; height=&quot;641&quot; data-origin-width=&quot;564&quot; data-origin-height=&quot;1151&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1257&quot; data-origin-height=&quot;528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLjdqc/btsHUwwJvpq/LZDjbmYPspLqeqQf9CLYkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLjdqc/btsHUwwJvpq/LZDjbmYPspLqeqQf9CLYkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLjdqc/btsHUwwJvpq/LZDjbmYPspLqeqQf9CLYkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLjdqc%2FbtsHUwwJvpq%2FLZDjbmYPspLqeqQf9CLYkK%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;493&quot; height=&quot;528&quot; data-origin-width=&quot;1257&quot; data-origin-height=&quot;528&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2) Pixel Per Units: 32 설정&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3) Filter: Point (no Filter) 적용&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1259&quot; data-origin-height=&quot;1416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgCES5/btsHVEAhAUm/yeInZs2y0kFrQcmAKckZXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgCES5/btsHVEAhAUm/yeInZs2y0kFrQcmAKckZXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgCES5/btsHVEAhAUm/yeInZs2y0kFrQcmAKckZXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgCES5%2FbtsHVEAhAUm%2FyeInZs2y0kFrQcmAKckZXK%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;1259&quot; height=&quot;1416&quot; data-origin-width=&quot;1259&quot; data-origin-height=&quot;1416&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 스프라이트 아틀라스 적용 방법&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1) 활용할 오브젝트 추가 (packables 내 스프라이트 혹은 폴더 추가)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1262&quot; data-origin-height=&quot;772&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBhIDA/btsHU7bTRsS/DEJxCXcxysxMtdcxUMjfH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBhIDA/btsHU7bTRsS/DEJxCXcxysxMtdcxUMjfH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBhIDA/btsHU7bTRsS/DEJxCXcxysxMtdcxUMjfH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBhIDA%2FbtsHU7bTRsS%2FDEJxCXcxysxMtdcxUMjfH1%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;1262&quot; height=&quot;772&quot; data-origin-width=&quot;1262&quot; data-origin-height=&quot;772&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) Pack Preview 클릭 후 결과 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1262&quot; data-origin-height=&quot;1216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqXnSa/btsHUUKCspt/qhrnHkRkup55sOGJxWk9H1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqXnSa/btsHUUKCspt/qhrnHkRkup55sOGJxWk9H1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqXnSa/btsHUUKCspt/qhrnHkRkup55sOGJxWk9H1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqXnSa%2FbtsHUUKCspt%2FqhrnHkRkup55sOGJxWk9H1%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;1262&quot; height=&quot;1216&quot; data-origin-width=&quot;1262&quot; data-origin-height=&quot;1216&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 골드 시스템 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Random.value 활용하여 랜덤한 골드 드랍 구현&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1614&quot; data-origin-height=&quot;907&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3MwdF/btsHUTqiLu9/XFK3hOqK9ycIAFj1DDUSBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3MwdF/btsHUTqiLu9/XFK3hOqK9ycIAFj1DDUSBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3MwdF/btsHUTqiLu9/XFK3hOqK9ycIAFj1DDUSBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3MwdF%2FbtsHUTqiLu9%2FXFK3hOqK9ycIAFj1DDUSBK%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;1614&quot; height=&quot;907&quot; data-origin-width=&quot;1614&quot; data-origin-height=&quot;907&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1718102569813&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;            if (Random.value &amp;lt;= mDropGoldChance)
            {
                item = GameManager.instance.mDropPool.Get();
                item.transform.position = transform.position;
                item.transform.position += new Vector3(Random.value * 2 - 1, Random.value * 2 - 1);
                item.transform.rotation = Quaternion.identity;
                item.GetComponent&amp;lt;DropItem&amp;gt;().mData = mDropGold;
                switch (mDropGold)
                {
                    case &amp;gt; 50:
                        item.GetComponent&amp;lt;DropItem&amp;gt;().mType = Enum.DropItemSprite.Gold2;
                        item.GetComponent&amp;lt;SpriteRenderer&amp;gt;().sprite = GameManager.instance.mDropItemSprite[(int)Enum.DropItemSprite.Gold2];
                        break;
                    case &amp;gt; 10:
                        item.GetComponent&amp;lt;DropItem&amp;gt;().mType = Enum.DropItemSprite.Gold1;
                        item.GetComponent&amp;lt;SpriteRenderer&amp;gt;().sprite = GameManager.instance.mDropItemSprite[(int)Enum.DropItemSprite.Gold1];
                        break;
                    default:
                        item.GetComponent&amp;lt;DropItem&amp;gt;().mType = Enum.DropItemSprite.Gold0;
                        item.GetComponent&amp;lt;SpriteRenderer&amp;gt;().sprite = GameManager.instance.mDropItemSprite[(int)Enum.DropItemSprite.Gold0];
                        break;
                }
                item.GetComponent&amp;lt;SpriteRenderer&amp;gt;().color = new Color(1, 1, 1, 0.5f);
            }&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 적 생성 로직 수정&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 예정된 스폰 포인트가 아닌 임의의 반경을 갖고 몬스터가 스폰되도록 구현&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 과거&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1719&quot; data-origin-height=&quot;1133&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6PFhT/btsHS6EGsm1/ph9Ce2GQ3aiyfEPDba7Rc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6PFhT/btsHS6EGsm1/ph9Ce2GQ3aiyfEPDba7Rc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6PFhT/btsHS6EGsm1/ph9Ce2GQ3aiyfEPDba7Rc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6PFhT%2FbtsHS6EGsm1%2Fph9Ce2GQ3aiyfEPDba7Rc1%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;1719&quot; height=&quot;1133&quot; data-origin-width=&quot;1719&quot; data-origin-height=&quot;1133&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1718101503684&quot; class=&quot;reasonml&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    void Spawn()
    {
        GameObject enemy = GameManager.instance.mEnemyPool.Get();
        enemy.transform.position = mSpawnPoint[Random.Range(1, mSpawnPoint.Length)].position; // 기존 방식
        enemy.GetComponent&amp;lt;Enemy&amp;gt;().Init(mLevel);
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 현재&lt;/p&gt;
&lt;pre id=&quot;code_1718101513015&quot; class=&quot;xquery&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    void SpawnEnemy()
    {
        GameObject enemy = GameManager.instance.mEnemyPool.Get();
        enemy.transform.position = GameManager.instance.mPlayer.transform.position;
        Vector3 pos = Random.insideUnitCircle;
        if (pos.magnitude == 0)
            pos.x = 1;
        pos = pos.normalized;
        enemy.transform.position += pos * 20;
        enemy.GetComponent&amp;lt;Enemy&amp;gt;().Init(mEnemyLevel);
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 필드 오브젝트 생성 로직 추가&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2497&quot; data-origin-height=&quot;751&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YCOdS/btsHUM5Rgq5/Fnx8s2ZKNE0Is3zNnPdjR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YCOdS/btsHUM5Rgq5/Fnx8s2ZKNE0Is3zNnPdjR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YCOdS/btsHUM5Rgq5/Fnx8s2ZKNE0Is3zNnPdjR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYCOdS%2FbtsHUM5Rgq5%2FFnx8s2ZKNE0Is3zNnPdjR1%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;2497&quot; height=&quot;751&quot; data-origin-width=&quot;2497&quot; data-origin-height=&quot;751&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 생성 방법&lt;/p&gt;
&lt;pre id=&quot;code_1718102614228&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    void SpawnFieldObject()
    {
        GameObject item = GameManager.instance.mFieldObjectPool.Get();
        item.transform.position = GameManager.instance.mPlayer.transform.position;
        Vector3 pos = Random.insideUnitCircle;
        if (pos.magnitude == 0)
            pos.x = 1;
        pos = pos.normalized;
        item.transform.position += pos * 20;
        int value = Random.Range(0, GameManager.instance.mFieldObjectSprite.Length);
        item.GetComponent&amp;lt;FieldObject&amp;gt;().Init(value);
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 오브젝트 동작&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) Enum이 박스인 경우, 플레이어와 충돌 시 삭제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) Enum이 박스가 아닌 경우, 무기와 충돌 시 삭제 후 아이템 드롭&lt;/p&gt;
&lt;pre id=&quot;code_1718102664540&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    public enum FieldObjectSprite
    {
        Box,
        Candle,
        Bush
    }

public class FieldObject : MonoBehaviour
{
    public Enum.FieldObjectSprite mType;

    public void Init(int value)
    {
        mType = (Enum.FieldObjectSprite) value;
        gameObject.GetComponent&amp;lt;SpriteRenderer&amp;gt;().sprite = GameManager.instance.mFieldObjectSprite[value];
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (mType == Enum.FieldObjectSprite.Box)
            if (collision.CompareTag(&quot;Player&quot;))
            {
                gameObject.SetActive(false);
                return;
            }

        if (collision.CompareTag(&quot;Melee&quot;) || collision.CompareTag(&quot;Range&quot;))
        {
            GameObject item = GameManager.instance.mDropPool.Get();
            item.transform.position = transform.position;
            item.transform.rotation = Quaternion.identity;

            float val = Random.value;
            switch (val)
            {
                case &amp;lt; 0.1f:
                    item.GetComponent&amp;lt;DropItem&amp;gt;().mType = Enum.DropItemSprite.Mag;
                    item.GetComponent&amp;lt;SpriteRenderer&amp;gt;().sprite = GameManager.instance.mDropItemSprite[(int)Enum.DropItemSprite.Mag];
                    break;
                case &amp;lt; 0.3f:
                    item.GetComponent&amp;lt;DropItem&amp;gt;().mType = Enum.DropItemSprite.Health;
                    item.GetComponent&amp;lt;SpriteRenderer&amp;gt;().sprite = GameManager.instance.mDropItemSprite[(int)Enum.DropItemSprite.Health];
                    break;
            }
            gameObject.SetActive(false);
            return;
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;. 무기 디버프 개별 구현 (e.g. 거미줄, 마늘 틱데미지)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. 강화 시스템 추가 (골드 활용)&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3. 상자 개봉 로직 추가&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4. 무기 &amp;amp; 퍽 조합 시 무기 업그레이드 로직 추가&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5. 게임 이어하기 로직 추가&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;6. 게임 세이브 슬롯 추가 (3개)&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고 자료&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://opengameart.org/content/dungeon-crawl-32x32-tiles-supplemental&quot;&gt;https://opengameart.org/content/dungeon-crawl-32x32-tiles-supplemental&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1718034713475&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Dungeon Crawl 32x32 tiles supplemental&quot; data-og-description=&quot;In addition to the 3000+ original tiles, here are 3000+ MORE tiles used in the game Dungeon Crawl Stone Soup http://crawl.develz.org/wordpress/ The great artists of the Dungeon Crawl Stone Soup team have recently enhanced and added to the already-amazing s&quot; data-og-host=&quot;opengameart.org&quot; data-og-source-url=&quot;https://opengameart.org/content/dungeon-crawl-32x32-tiles-supplemental&quot; data-og-url=&quot;https://opengameart.org/content/dungeon-crawl-32x32-tiles-supplemental&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b67BIl/hyWlihY8yD/4TkpVf0qRybX5wmPqIhAvk/img.jpg?width=416&amp;amp;height=416&amp;amp;face=0_0_416_416&quot;&gt;&lt;a href=&quot;https://opengameart.org/content/dungeon-crawl-32x32-tiles-supplemental&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://opengameart.org/content/dungeon-crawl-32x32-tiles-supplemental&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b67BIl/hyWlihY8yD/4TkpVf0qRybX5wmPqIhAvk/img.jpg?width=416&amp;amp;height=416&amp;amp;face=0_0_416_416');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Dungeon Crawl 32x32 tiles supplemental&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;In addition to the 3000+ original tiles, here are 3000+ MORE tiles used in the game Dungeon Crawl Stone Soup http://crawl.develz.org/wordpress/ The great artists of the Dungeon Crawl Stone Soup team have recently enhanced and added to the already-amazing s&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;opengameart.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/Packages/com.unity.2d.pixel-perfect@1.0/manual/index.html&quot;&gt;https://docs.unity3d.com/Packages/com.unity.2d.pixel-perfect@1.0/manual/index.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1718034711596&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;| Package Manager UI website&quot; data-og-description=&quot;2D Pixel Perfect Overview The 2D Pixel Perfect package&amp;nbsp;contains the Pixel Perfect Camera component which ensures your pixel art remains crisp and clear at different resolutions, and stable in motion.&amp;nbsp; It is a single component that makes all the calculati&quot; data-og-host=&quot;docs.unity3d.com&quot; data-og-source-url=&quot;https://docs.unity3d.com/Packages/com.unity.2d.pixel-perfect@1.0/manual/index.html&quot; data-og-url=&quot;https://docs.unity3d.com/Packages/com.unity.2d.pixel-perfect@1.0/manual/index.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b7CehL/hyWgV9OIG4/1i9IYo9bzOZBS8wRxcol7k/img.png?width=1054&amp;amp;height=610&amp;amp;face=0_0_1054_610,https://scrap.kakaocdn.net/dn/b99aOZ/hyWk9yzggE/cA6QkjWRTYPKKepaI8lxEK/img.png?width=921&amp;amp;height=535&amp;amp;face=0_0_921_535,https://scrap.kakaocdn.net/dn/Tgia2/hyWg1PIXC0/GgW5cGsKoq0UU6MXy9yQ9K/img.png?width=820&amp;amp;height=344&amp;amp;face=0_0_820_344&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/Packages/com.unity.2d.pixel-perfect@1.0/manual/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.unity3d.com/Packages/com.unity.2d.pixel-perfect@1.0/manual/index.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b7CehL/hyWgV9OIG4/1i9IYo9bzOZBS8wRxcol7k/img.png?width=1054&amp;amp;height=610&amp;amp;face=0_0_1054_610,https://scrap.kakaocdn.net/dn/b99aOZ/hyWk9yzggE/cA6QkjWRTYPKKepaI8lxEK/img.png?width=921&amp;amp;height=535&amp;amp;face=0_0_921_535,https://scrap.kakaocdn.net/dn/Tgia2/hyWg1PIXC0/GgW5cGsKoq0UU6MXy9yQ9K/img.png?width=820&amp;amp;height=344&amp;amp;face=0_0_820_344');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;| Package Manager UI website&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;2D Pixel Perfect Overview The 2D Pixel Perfect package&amp;nbsp;contains the Pixel Perfect Camera component which ensures your pixel art remains crisp and clear at different resolutions, and stable in motion.&amp;nbsp; It is a single component that makes all the calculati&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.unity3d.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/2020.3/Manual/class-Random.html&quot;&gt;https://docs.unity3d.com/kr/2020.3/Manual/class-Random.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1718034706948&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;중요 클래스 - Random - Unity 매뉴얼&quot; data-og-description=&quot;Random 클래스는 흔히 요구되는 다양한 타입의 랜덤 값을 쉽게 생성할 수 있는 방법을 제공합니다.&quot; data-og-host=&quot;docs.unity3d.com&quot; data-og-source-url=&quot;https://docs.unity3d.com/kr/2020.3/Manual/class-Random.html&quot; data-og-url=&quot;https://docs.unity3d.com/kr/2020.3/Manual/class-Random.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cAs5Uf/hyWg6Q2Gm3/GALpPIC0hSuUKPtgwCda80/img.png?width=401&amp;amp;height=130&amp;amp;face=0_0_401_130&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/2020.3/Manual/class-Random.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.unity3d.com/kr/2020.3/Manual/class-Random.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cAs5Uf/hyWg6Q2Gm3/GALpPIC0hSuUKPtgwCda80/img.png?width=401&amp;amp;height=130&amp;amp;face=0_0_401_130');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;중요 클래스 - Random - Unity 매뉴얼&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Random 클래스는 흔히 요구되는 다양한 타입의 랜덤 값을 쉽게 생성할 수 있는 방법을 제공합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.unity3d.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|unity| by C#</category>
      <category>Atlas</category>
      <category>C#</category>
      <category>insideunitcircle</category>
      <category>perfect</category>
      <category>pixel</category>
      <category>Random</category>
      <category>Random.insideUnitCircle</category>
      <category>Sprite</category>
      <category>unity</category>
      <category>오브젝트 생성</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/351</guid>
      <comments>https://kyunstudio.tistory.com/351#entry351comment</comments>
      <pubDate>Mon, 10 Jun 2024 21:47:51 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] Day9 - 다국어 지원, 볼륨 제어 (Dropdown, Slider, Toggle)</title>
      <link>https://kyunstudio.tistory.com/350</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;a href=&quot;https://youtu.be/KyBV90PFU4w?si=0018S-ylUCYIrbIV&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://youtu.be/KyBV90PFU4w?si=0018S-ylUCYIrbIV&lt;/a&gt;&lt;/span&gt;&lt;/b&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=KyBV90PFU4w&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/8SSss/hyWllMmn6g/x7Ys1NP5wkepiD95YO8680/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;[Unity] 게임 개발 데모 영상&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/KyBV90PFU4w&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;&lt;b&gt;1. 설정 데이터 저장 로직 추가&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 설정 값 변경 시, GameManager.Setting 데이터 업데이트 로직 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 설정 창 종료 시, Setting 관련 데이터 Json 데이터로 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 세팅 후, 볼륨, 언어 등 데이터가 항상 유지되도록 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;+) 경험한 이슈:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;원인: &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) 메인, BGM, SFX 값을 3개의 슬라이더로 제어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) 슬라이더 내 Value 변경 시 데이터 저장 및 볼륨 제어 적용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 이때, 다양한 데이터를 연동하여 업데이트를 적용하는 경우, 예상과 다른 onValueChanged 함수 호출로 인해 오류 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;e.g.)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) 게임 시작 시 세팅 값 Load 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) Setting Data 변수에 Main = 100, BGM = 60, SFX = 30 값 저장 (Setting Data, 100/60/30)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(3) Load 된 세팅 값이 Slider에 반영됨. (Slider.value = 0/0/0 -&amp;gt; 100/&lt;b&gt;0/0&lt;/b&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(4) 이때, 반영 동작은 1개씩 적용이 이뤄지며, 최초 값 반영 후 슬라이더에서 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Slider.onValueChanged&lt;span&gt; 함수 호출&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;(5) ' &lt;b&gt;Slider.onValueChanged'&lt;/b&gt; 함수와 연동된 'Setting Data 변수 저장 함수' 동작으로 인해, Setting 데이터 오류 발생&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;(6) 예상과 달리, Setting Data -&amp;gt; 100/60/30이 아닌 100/&lt;b&gt;0/0&lt;/b&gt;이 반영되는 버그 발생 (0/0은 임의의 변수)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;해결방안: 세팅 시 하나의 데이터만 제어&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 볼륨 제어 로직 추가&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 슬라이더 활용, 볼륨 제어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 설정된 값 확인용 GUI 제어 로직 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 다국어 언어 제어 시스템 추가&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) String 데이터 일원화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 언어 업데이트 로직 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 설정 데이터 저장 로직 추가&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 설정 값 변경 시, GameManager.Setting 데이터 업데이트 로직 구현&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1162&quot; data-origin-height=&quot;864&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/elVIQd/btsHTg0nW4r/wMEBw4hQyoyKsDqMsSmaKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/elVIQd/btsHTg0nW4r/wMEBw4hQyoyKsDqMsSmaKK/img.png&quot; data-alt=&quot;HUD 구성 방법&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/elVIQd/btsHTg0nW4r/wMEBw4hQyoyKsDqMsSmaKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FelVIQd%2FbtsHTg0nW4r%2FwMEBw4hQyoyKsDqMsSmaKK%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;1162&quot; height=&quot;864&quot; data-origin-width=&quot;1162&quot; data-origin-height=&quot;864&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HUD 구성 방법&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2360&quot; data-origin-height=&quot;840&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9hMl4/btsHR985rwE/nkIp6aNT2f8sBO7bOc1i41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9hMl4/btsHR985rwE/nkIp6aNT2f8sBO7bOc1i41/img.png&quot; data-alt=&quot;HUD와 OnValueChanged 함수 연결&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9hMl4/btsHR985rwE/nkIp6aNT2f8sBO7bOc1i41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9hMl4%2FbtsHR985rwE%2FnkIp6aNT2f8sBO7bOc1i41%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;2360&quot; height=&quot;840&quot; data-origin-width=&quot;2360&quot; data-origin-height=&quot;840&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HUD와 OnValueChanged 함수 연결&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1717942665754&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    public void SetLanguage()
    {
        GameManager.instance.mSettingData.LanguageType = (Enum.Language)mDropdownLanguage.value;

        GameManager.instance.UpdateText();
    }
    public void SetWindowScreen()
    {
        GameManager.instance.mSettingData.ResolutionNum = mDropdownWindow.value;
        GameManager.instance.mSettingData.Width = Screen.resolutions[mDropdownWindow.value].width;
        GameManager.instance.mSettingData.Height = Screen.resolutions[mDropdownWindow.value].height;
        GameManager.instance.mSettingData.RefreshRate = Screen.resolutions[mDropdownWindow.value].refreshRate;

        Screen.SetResolution(GameManager.instance.mSettingData.Width, GameManager.instance.mSettingData.Height, GameManager.instance.mSettingData.Fullscreen, GameManager.instance.mSettingData.RefreshRate);
    }
    public void SetFullscreen()
    {
        GameManager.instance.mSettingData.Fullscreen = mToggleWindow.isOn;

        Screen.SetResolution(GameManager.instance.mSettingData.Width, GameManager.instance.mSettingData.Height, GameManager.instance.mSettingData.Fullscreen, GameManager.instance.mSettingData.RefreshRate);
    }
    public void SetMasterVolume()
    {
        GameManager.instance.mSettingData.MasterVolume = mMasterVolume.value;
        mTextMasterVolume.text = ((int)(mMasterVolume.value * 100)).ToString();

        GameManager.instance.mBGMPlayer.volume = GameManager.instance.mSettingData.BGMVolume * GameManager.instance.mSettingData.MasterVolume;
        for (int i = 0; i &amp;lt; GameManager.instance.mSFXPlayer.Length; ++i)
        {
            GameManager.instance.mSFXPlayer[i].volume = GameManager.instance.mSettingData.SFXVolume * GameManager.instance.mSettingData.MasterVolume;
        }
    }
    public void SetBGMVolume()
    {
        GameManager.instance.mSettingData.BGMVolume = mBGMVolume.value;
        mTextBGMVolume.text = ((int)(mBGMVolume.value * 100)).ToString();

        GameManager.instance.mBGMPlayer.volume = GameManager.instance.mSettingData.BGMVolume * GameManager.instance.mSettingData.MasterVolume;
    }
    public void SetSFXVolume()
    {
        GameManager.instance.mSettingData.SFXVolume = mSFXVolume.value;
        mTextSFXVolume.text = ((int)(mSFXVolume.value * 100)).ToString();

        for (int i = 0; i &amp;lt; GameManager.instance.mSFXPlayer.Length; ++i)
        {
            GameManager.instance.mSFXPlayer[i].volume = GameManager.instance.mSettingData.SFXVolume * GameManager.instance.mSettingData.MasterVolume;
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) Setting 관련 데이터 Json 데이터로 저장 및 로드&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1249&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UXlN8/btsHTIIYzSF/BIeTYf5iHO39mRhwltYtEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UXlN8/btsHTIIYzSF/BIeTYf5iHO39mRhwltYtEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UXlN8/btsHTIIYzSF/BIeTYf5iHO39mRhwltYtEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUXlN8%2FbtsHTIIYzSF%2FBIeTYf5iHO39mRhwltYtEk%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;1249&quot; height=&quot;257&quot; data-origin-width=&quot;1249&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1717942347554&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[System.Serializable]
public struct SettingData
{
    public Enum.Language LanguageType;
    public float MasterVolume;
    public float BGMVolume;
    public float SFXVolume;
    public int ResolutionNum;
    public int Width;
    public int Height;
    public bool Fullscreen;
    public int RefreshRate;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1717942388979&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    public SettingData mSettingData;
    
    public void SaveSettingJson()
    {
        string json = JsonConvert.SerializeObject(mSettingData);
        File.WriteAllText(Application.dataPath + &quot;/Datas/SettingData.json&quot;, json);
    }
    public void LoadSettingJson()
    {
        string json = File.ReadAllText(Application.dataPath + &quot;/Datas/SettingData.json&quot;);
        mSettingData = JsonConvert.DeserializeObject&amp;lt;SettingData&amp;gt;(json);
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 볼륨 제어 로직 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1) 슬라이더 활용, 볼륨 제어&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2) 설정된 값 확인 로직 추가&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyS0jt/btsHSckoCLc/YiAw3oYaIKgyKSxsMlrktK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyS0jt/btsHSckoCLc/YiAw3oYaIKgyKSxsMlrktK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyS0jt/btsHSckoCLc/YiAw3oYaIKgyKSxsMlrktK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyS0jt%2FbtsHSckoCLc%2FYiAw3oYaIKgyKSxsMlrktK%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;466&quot; height=&quot;358&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;358&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 다국어 언어 제어 시스템 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1) String 데이터 일원화&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1235&quot; data-origin-height=&quot;1387&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t7WIw/btsHR92lFaj/gzEXVBXXVq94yMaLa8CjR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t7WIw/btsHR92lFaj/gzEXVBXXVq94yMaLa8CjR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t7WIw/btsHR92lFaj/gzEXVBXXVq94yMaLa8CjR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft7WIw%2FbtsHR92lFaj%2FgzEXVBXXVq94yMaLa8CjR1%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;1235&quot; height=&quot;1387&quot; data-origin-width=&quot;1235&quot; data-origin-height=&quot;1387&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1717943294916&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[System.Serializable]
public struct TextJsonData
{
    public Enum.Language Type;
    public string Language;
    public string[] WeaponName;
    [TextArea]
    public string[] WeaponInitDesc;
    [TextArea]
    public string[] WeaponLvUpDesc;
    public string[] PerkName;
    [TextArea]
    public string[] PerkDesc;
    public string[] PlayerName;
    public string[] PlayerDesc;
    public string[] PlayerUnlockName;
    public string[] PlayerUnlockDesc;
    public string[] AchiveDesc;

    public string HUDLevelUpTitle;
    public string[] HUDSetting;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2) 언어 업데이트 로직 추가&lt;/p&gt;
&lt;pre id=&quot;code_1717943469980&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using Newtonsoft.Json;
using UnityEngine.U2D;
using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour
{
    // 생략
    public HUDGameStart mHUDGameStart;
    public HUDAchive mHUDAchive;
    public HUDInGame mHUDInGame;
    public HUDLevelUp mHUDLevelUp;
    public HUDResult mHUDResult;
    public HUDSetting mHUDSetting;

    public void UpdateText()
    {
        mHUDGameStart.UpdateText();
        mHUDLevelUp.UpdateText();
        mHUDSetting.UpdateText();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1717943492582&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class HUDGameStart : MonoBehaviour
{
    RectTransform mRect;
    public GameObject mRootHUD;
    GameObject[] mPlayers;

    public void UpdateText()
    {
        for (int i = 0; i &amp;lt; mPlayers.Length; ++i)
        {
            mPlayers[i].GetComponent&amp;lt;HUDBtnPlayer&amp;gt;().UpdateText();
        }
    }

}&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1172&quot; data-origin-height=&quot;1089&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xL2He/btsHR7pSiPU/ak7DH0xpZcAcyVB0ZFCakk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xL2He/btsHR7pSiPU/ak7DH0xpZcAcyVB0ZFCakk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xL2He/btsHR7pSiPU/ak7DH0xpZcAcyVB0ZFCakk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxL2He%2FbtsHR7pSiPU%2Fak7DH0xpZcAcyVB0ZFCakk%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;1172&quot; height=&quot;1089&quot; data-origin-width=&quot;1172&quot; data-origin-height=&quot;1089&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;1136&quot; data-origin-height=&quot;1095&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dp7HCk/btsHTFk6QUA/D9MsBi1GAuD9bRmHmzreHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dp7HCk/btsHTFk6QUA/D9MsBi1GAuD9bRmHmzreHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dp7HCk/btsHTFk6QUA/D9MsBi1GAuD9bRmHmzreHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdp7HCk%2FbtsHTFk6QUA%2FD9MsBi1GAuD9bRmHmzreHK%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;1136&quot; height=&quot;1095&quot; data-origin-width=&quot;1136&quot; data-origin-height=&quot;1095&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;793&quot; data-origin-height=&quot;1035&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PU4Z8/btsHR0Lj5Ya/TKHLs3s3VqkkqYc2EuX0IK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PU4Z8/btsHR0Lj5Ya/TKHLs3s3VqkkqYc2EuX0IK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PU4Z8/btsHR0Lj5Ya/TKHLs3s3VqkkqYc2EuX0IK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPU4Z8%2FbtsHR0Lj5Ya%2FTKHLs3s3VqkkqYc2EuX0IK%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;793&quot; height=&quot;1035&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;1035&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;802&quot; data-origin-height=&quot;1035&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/da6cg7/btsHR2oTexD/GK7HGyt9Wbkrbed6FsUgXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/da6cg7/btsHR2oTexD/GK7HGyt9Wbkrbed6FsUgXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/da6cg7/btsHR2oTexD/GK7HGyt9Wbkrbed6FsUgXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fda6cg7%2FbtsHR2oTexD%2FGK7HGyt9Wbkrbed6FsUgXK%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;802&quot; height=&quot;1035&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;1035&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;801&quot; data-origin-height=&quot;1040&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUgX4N/btsHR9adxT3/KSneMJ1UdTkZGagX8JEBjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUgX4N/btsHR9adxT3/KSneMJ1UdTkZGagX8JEBjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUgX4N/btsHR9adxT3/KSneMJ1UdTkZGagX8JEBjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUgX4N%2FbtsHR9adxT3%2FKSneMJ1UdTkZGagX8JEBjk%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;801&quot; height=&quot;1040&quot; data-origin-width=&quot;801&quot; data-origin-height=&quot;1040&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;799&quot; data-origin-height=&quot;1039&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcEQeX/btsHRHZy2Gt/uOzCdULZjAK3ZfB0KfhBB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcEQeX/btsHRHZy2Gt/uOzCdULZjAK3ZfB0KfhBB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcEQeX/btsHRHZy2Gt/uOzCdULZjAK3ZfB0KfhBB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcEQeX%2FbtsHRHZy2Gt%2FuOzCdULZjAK3ZfB0KfhBB0%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;799&quot; height=&quot;1039&quot; data-origin-width=&quot;799&quot; data-origin-height=&quot;1039&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;1. 필드 파괴형 오브젝트 추가 (e.g. 박스, 촛대, etc.)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. 골드 시스템 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3. 강화 시스템 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4. 상자 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5. 무기 &amp;amp; 퍽 조합 시 무기 업그레이드 로직 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;6. 게임 이어하기 로직 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;7. 게임 세이브 슬롯 추가 (3개)&lt;/p&gt;</description>
      <category>--------게임만들기--------/|unity| by C#</category>
      <category>C#</category>
      <category>dropdown</category>
      <category>Slider</category>
      <category>toggle</category>
      <category>unity</category>
      <category>다국어</category>
      <category>데모</category>
      <category>설정</category>
      <category>세팅</category>
      <category>저장</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/350</guid>
      <comments>https://kyunstudio.tistory.com/350#entry350comment</comments>
      <pubDate>Sun, 9 Jun 2024 15:25:51 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] Day8 - 무기 프리팹 일원화, 아이템 드롭, 픽업, 오디오, 세팅창 구현, 스크린 제어(TMP_Dropdown, Toggle, 스크립트 제어)</title>
      <link>https://kyunstudio.tistory.com/349</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각보다 빠르게 게임 개발이 끝나가고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 프리팹 일원화&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 추후 다양한 무기 추가를 위해 프리팹 구조를 개선하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전: 무기별 개별 프리팹 활용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재: 무기별 공통 프리팹 활용 (스프라이트 및 콜라이더 제어)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 오디오 시스템 추가&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- BGM과 SFX 시스템으로 나눠 오디오가 출력되는 시스템을 구현했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 아이템 드롭 &amp;amp; 픽업 시스템 구현&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 몬스터 사냥 시 게임 내 경험치 오브젝트를 드롭하는 시스템을 구현했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 픽업 범위 내 드롭 오브젝트가 포함된 경우 아이템을 획득하는 시스템을 구현했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. Setting HUD 구현&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 게임 옵션 세팅을 위한 HUD를 제작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. Window Screen 제어 로직 구현&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Setting HUD 내 옵션 중 Window Screen과 관련된 옵션을 제어하는 로직을 구현하였다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 상세 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 프리팹 일원화&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Q8Vpf/btsHR4s7ao7/VIXRq3bTKbDZssTmBJWha1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Q8Vpf/btsHR4s7ao7/VIXRq3bTKbDZssTmBJWha1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Q8Vpf/btsHR4s7ao7/VIXRq3bTKbDZssTmBJWha1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQ8Vpf%2FbtsHR4s7ao7%2FVIXRq3bTKbDZssTmBJWha1%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;1248&quot; height=&quot;214&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1717870120285&quot; class=&quot;crystal&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;    public enum PrefabType
    {
        Enemy,
        MeleeBox,
        MeleeCircle,
        RangeBox,
        RangeCircle,
        DropItem
    }&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1717870050840&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;public class WeaponCtrl : MonoBehaviour
{
    int mId;
    bool mEnable;

    PoolManager mWeaponPool;

    public void Init(int id)
    {
        mEnable = true;
        if (id &amp;gt;= GameManager.instance.mPlayerData.WeaponSize)
            Debug.Assert(false, &quot;Error&quot;);
        mId = id;

        // initialize Pool Manager (general setting)
        mWeaponPool = new GameObject(&quot;WeaponPool&quot;).AddComponent&amp;lt;PoolManager&amp;gt;();
        mWeaponPool.transform.parent = transform;
        mWeaponPool.transform.localPosition = Vector3.zero;
        mWeaponPool.transform.localRotation = Quaternion.identity;
        mWeaponPool.Init((int) GameManager.instance.mWeaponJsonData[GameManager.instance.mWeaponCtrlData[mId].Id].PrefabType);
        mWeaponPool.mPool[0].GetComponent&amp;lt;SpriteRenderer&amp;gt;().sprite = GameManager.instance.mWeaponSprite[GameManager.instance.mWeaponJsonData[GameManager.instance.mWeaponCtrlData[mId].Id].SpriteId];
        mWeaponPool.mPool[0].tag = GameManager.instance.mWeaponJsonData[GameManager.instance.mWeaponCtrlData[mId].Id].WeaponTag.ToString();

        // initialize Root Prefab (particular setting)
        switch (GameManager.instance.mWeaponJsonData[GameManager.instance.mWeaponCtrlData[mId].Id].WeaponType)
        {
            case Enum.WeaponType.Melee:
            case Enum.WeaponType.RangeDagger:
                mWeaponPool.mPool[0].GetComponent&amp;lt;BoxCollider2D&amp;gt;().size = new Vector2(0.4f, 1);
                break;
            case Enum.WeaponType.RangeBullet:
                mWeaponPool.mPool[0].GetComponent&amp;lt;BoxCollider2D&amp;gt;().size = new Vector2(0.4f, 0.4f);
                break;
            case Enum.WeaponType.RangeAxe:
                mWeaponPool.mPool[0].GetComponent&amp;lt;BoxCollider2D&amp;gt;().size = new Vector2(0.5f, 0.7f);
                mWeaponPool.mPool[0].GetComponent&amp;lt;Rigidbody2D&amp;gt;().gravityScale = 1;
                break;
            case Enum.WeaponType.Garlic:
                mWeaponPool.mPool[0].GetComponent&amp;lt;CircleCollider2D&amp;gt;().radius = 0.5f;
                break;
            case Enum.WeaponType.Web:
                mWeaponPool.mPool[0].GetComponent&amp;lt;BoxCollider2D&amp;gt;().size = new Vector2(3, 3);
                break;
            case Enum.WeaponType.Boom:
                mWeaponPool.mPool[0].GetComponent&amp;lt;CircleCollider2D&amp;gt;().radius = 1;
                break;
            case Enum.WeaponType.ThrowBoom:
                mWeaponPool.mPool[0].GetComponent&amp;lt;CircleCollider2D&amp;gt;().radius = 1;
                break;
            default:
                Debug.Assert(false, &quot;Error&quot;);
                break;
        }
    }
 }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 오디오 시스템 추가&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1255&quot; data-origin-height=&quot;553&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tjdMN/btsHSBDJzu3/XIvvVmROn18j2UGFdY4dN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tjdMN/btsHSBDJzu3/XIvvVmROn18j2UGFdY4dN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tjdMN/btsHSBDJzu3/XIvvVmROn18j2UGFdY4dN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtjdMN%2FbtsHSBDJzu3%2FXIvvVmROn18j2UGFdY4dN0%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;1255&quot; height=&quot;553&quot; data-origin-width=&quot;1255&quot; data-origin-height=&quot;553&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1717869901379&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class GameManager : MonoBehaviour
{
    public static GameManager instance;
    // 생략
    [Header(&quot;# BGM&quot;)]
    public AudioClip mBGMClip;
    public float mBGMVolume;
    public AudioSource mBGMPlayer;
    public AudioHighPassFilter mBGMFffect;
    [Header(&quot;# SFX&quot;)]
    public AudioClip[] mSFXClip;
    public float mSFXVolume;
    public int mMaxSFXChannel;
    public AudioSource[] mSFXPlayer;

	public void PlayBGM(bool en)
    {
        if (en)
        {
            mBGMPlayer.Play();
        }
        else
        {
            mBGMPlayer.Stop();
        }
    }
    public void PlayEffect(bool en)
    {
        mBGMFffect.enabled = en;
    }
    public void PlaySFX(Enum.SFX sfx)
    {
        for(int i=0; i &amp;lt; mSFXPlayer.Length; ++i)
        {
            if (mSFXPlayer[i].isPlaying)
                continue;
            mSFXPlayer[i].clip = mSFXClip[(int)sfx];
            mSFXPlayer[i].Play();
            break;
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 아이템 드롭 &amp;amp; 픽업 시스템 구현&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;430&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XL1Si/btsHSFe3szy/KFljrxpYzbc1jWeqeniYak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XL1Si/btsHSFe3szy/KFljrxpYzbc1jWeqeniYak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XL1Si/btsHSFe3szy/KFljrxpYzbc1jWeqeniYak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXL1Si%2FbtsHSFe3szy%2FKFljrxpYzbc1jWeqeniYak%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;622&quot; height=&quot;430&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;430&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 드롭 시스템&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1717871035825&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        if (mHealth &amp;gt; 0)
        {
            StartCoroutine(KnockBack());
            mAnim.SetTrigger(&quot;Hit&quot;);
        }
        else
        {
            mIsLive = false;
            mIsGarlic = false;
            mMovementSpeedCoef = 1.0f;
            mColl.enabled = false;
            mRigid.simulated = false;
            mSpriter.sortingOrder = 1;
            mAnim.SetBool(&quot;Dead&quot;, true);
            GameManager.instance.mPlayerData.Kill++;
            
            // 경험치 드롭
            GameObject item = GameManager.instance.mDropPool.Get();
            item.transform.position = transform.position;
            item.transform.rotation = Quaternion.identity;
            item.GetComponent&amp;lt;DropItem&amp;gt;().mData = mDropExp;
            switch (mDropExp)
            {
                case &amp;gt; 50:
                    item.GetComponent&amp;lt;DropItem&amp;gt;().mType = Enum.DropItemSprite.Exp2;
                    item.GetComponent&amp;lt;SpriteRenderer&amp;gt;().sprite = GameManager.instance.mDropItemSprite[(int)Enum.DropItemSprite.Exp2];
                    break;
                case &amp;gt; 10:
                    item.GetComponent&amp;lt;DropItem&amp;gt;().mType = Enum.DropItemSprite.Exp1;
                    item.GetComponent&amp;lt;SpriteRenderer&amp;gt;().sprite = GameManager.instance.mDropItemSprite[(int)Enum.DropItemSprite.Exp1];
                    break;
                default:
                    item.GetComponent&amp;lt;DropItem&amp;gt;().mType = Enum.DropItemSprite.Exp0;
                    item.GetComponent&amp;lt;SpriteRenderer&amp;gt;().sprite = GameManager.instance.mDropItemSprite[(int)Enum.DropItemSprite.Exp0];
                    break;
            }

            GameManager.instance.PlaySFX(Enum.SFX.Dead);
        }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 픽업 시스템&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1717869723299&quot; class=&quot;arduino&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DropItem : MonoBehaviour
{
    public Enum.DropItemSprite mType;
    public int mData;

    public bool mEnable;
    Rigidbody2D mRigid;
    Rigidbody2D mTarget;

    private void Awake()
    {
        mRigid = GetComponent&amp;lt;Rigidbody2D&amp;gt;();
        mTarget = GameManager.instance.mPlayer.GetComponent&amp;lt;Rigidbody2D&amp;gt;();
    }
    private void OnEnable()
    {
        mEnable = false;
    }
    private void FixedUpdate()
    {
        if (!GameManager.instance.mIsLive)
            return;
        if (!mEnable)
            return;

        Vector2 dirVec = mTarget.position - mRigid.position;
        Vector2 nextVec = dirVec.normalized * 2 * Time.fixedDeltaTime;
        mRigid.MovePosition(mRigid.position + nextVec);
        mRigid.velocity = Vector2.zero;
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag(&quot;Player&quot;))
        {
            mEnable = false;
            switch (mType)
            {
                case Enum.DropItemSprite.Exp0:
                case Enum.DropItemSprite.Exp1:
                case Enum.DropItemSprite.Exp2:
                    GameManager.instance.GetExp(mData);
                    break;
                case Enum.DropItemSprite.Health:
                    GameManager.instance.GetHealth(mData);
                    break;
                case Enum.DropItemSprite.Mag:
                    foreach (GameObject item in GameManager.instance.mDropPool.mPool)
                    {
                        if (item.GetComponent&amp;lt;DropItem&amp;gt;().mType == Enum.DropItemSprite.Exp0 || item.GetComponent&amp;lt;DropItem&amp;gt;().mType == Enum.DropItemSprite.Exp1 || item.GetComponent&amp;lt;DropItem&amp;gt;().mType == Enum.DropItemSprite.Exp2)
                            item.GetComponent&amp;lt;DropItem&amp;gt;().mEnable = true;
                    }
                    break;
                default:
                    Debug.Assert(false, &quot;Error&quot;);
                    break;
            }
            gameObject.SetActive(false);
            return;
        }

        if (collision.CompareTag(&quot;PickupCollider&quot;))
            mEnable = true;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 옵션창 추가&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;649&quot; data-origin-height=&quot;820&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzPrwI/btsHR315zGg/zX5z7icQREOwCXBVog8SaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzPrwI/btsHR315zGg/zX5z7icQREOwCXBVog8SaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzPrwI/btsHR315zGg/zX5z7icQREOwCXBVog8SaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzPrwI%2FbtsHR315zGg%2FzX5z7icQREOwCXBVog8SaK%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;649&quot; height=&quot;820&quot; data-origin-width=&quot;649&quot; data-origin-height=&quot;820&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1717869798591&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class GameManager : MonoBehaviour
{
    public static GameManager instance;
	// 생략
    public HUDSetting mHUDSetting;

    public void SetWindowScreen()
    {
        Debug.Log(&quot;hi&quot;);
        Screen.SetResolution(Screen.resolutions[mHUDSetting.mDropdownResoultion.value].width, Screen.resolutions[mHUDSetting.mDropdownResoultion.value].height, mHUDSetting.mToggleResoultion.isOn, Screen.resolutions[mHUDSetting.mDropdownResoultion.value].refreshRate);
    }
 }&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1717869769324&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class HUDSetting : MonoBehaviour
{
    public TMP_Dropdown mDropdownResoultion;
    public Toggle mToggleResoultion;
    public TMP_Dropdown mDropdownLanguage;

    private void Awake()
    {
        for(int i=0; i&amp;lt; Screen.resolutions.Length; ++i)
        {
            TMP_Dropdown.OptionData option = new TMP_Dropdown.OptionData();
            option.text = Screen.resolutions[i].width + &quot;x &quot; + Screen.resolutions[i].height + &quot; &quot; + Screen.resolutions[i].refreshRate + &quot;hz&quot;;
            mDropdownResoultion.options.Add(option);
            if (Screen.resolutions[i].width == Screen.width &amp;amp;&amp;amp; Screen.resolutions[i].height == Screen.height)
                mDropdownResoultion.value = i;
        }
        mDropdownResoultion.RefreshShownValue();
        mToggleResoultion.isOn = Screen.fullScreenMode.Equals(FullScreenMode.FullScreenWindow) ? true : false;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. 필드 파괴형 오브젝트 추가 (e.g. 박스, 촛대, etc.)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. 언어 제어 로직 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3. 볼륨 제어 로직 추가&lt;/p&gt;</description>
      <category>--------게임만들기--------/|unity| by C#</category>
      <category>audio</category>
      <category>C#</category>
      <category>dropdown</category>
      <category>Screen</category>
      <category>SCRIPT</category>
      <category>tmp_dropdown</category>
      <category>toggle</category>
      <category>unity</category>
      <category>스크립트</category>
      <category>픽업</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/349</guid>
      <comments>https://kyunstudio.tistory.com/349#entry349comment</comments>
      <pubDate>Sun, 9 Jun 2024 03:02:14 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] Day7 - 원거리 폭발형 무기 구현, HUD 프리펩 구현, 업적 시스템 구현</title>
      <link>https://kyunstudio.tistory.com/347</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 원거리 폭발형 무기 구현 완료&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 게임 시작 &amp;amp; 종료 HUD 및 제어로직 추가 완료&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. 업적 시스템 구현 완료&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 금일 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 거미줄 무기 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1) 스프라이트 추가 (Atlas Sprite)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 스프라이트 자료 경로: &lt;a href=&quot;https://www.klipartz.com/ko/sticker-png-bxswr&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.klipartz.com/ko/sticker-png-bxswr&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2) 투사체 크기 제어 로직 추가&lt;/p&gt;
&lt;pre id=&quot;code_1718543304919&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    void FireWeb()
    {
        if (!GameManager.instance.mPlayer.mScanner.mNearestTarget)
            return;

        Vector3 targetPos = GameManager.instance.mPlayer.mScanner.mNearestTarget.position;
        Vector3 rootDir = targetPos - GameManager.instance.mPlayer.transform.position;
        rootDir = rootDir.normalized;

        // 방사형 공격 로직
        for (int i = 0; i &amp;lt; GameManager.instance.mWeaponLastData[mId].Projectile; ++i)
        {
            Vector3 dir = rootDir;
            if (GameManager.instance.mWeaponLastData[mId].Projectile != 1)
            {
                float rot = 30 * (i / ((float)GameManager.instance.mWeaponLastData[mId].Projectile - 1)) - 15;
                dir = Quaternion.Euler(0, 0, rot) * dir;
            }

            Transform bullet = mWeaponPool.Get().transform;
            bullet.parent = mWeaponPool.transform;
            bullet.position = GameManager.instance.mPlayer.transform.position;
            bullet.rotation = Quaternion.FromToRotation(Vector3.up, dir);
            bullet.localScale = new Vector3(0.02f, 0.4f, 1f); // 투사체 크기 제어
            bullet.GetComponent&amp;lt;Range&amp;gt;().Init(Mathf.RoundToInt(GameManager.instance.mWeaponLastData[mId].Damage), GameManager.instance.mWeaponLastData[mId].Pierce, dir, GameManager.instance.mWeaponLastData[mId].Speed); // -1 is Infinity Per
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3) 디버프 로직 추가&lt;/p&gt;
&lt;pre id=&quot;code_1718542405528&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag(&quot;Garlic&quot;))
        {
            mIsGarlic = true;
            mGarlicDamage = collision.GetComponent&amp;lt;Melee&amp;gt;().mDamage;
            return;
        }
        if (collision.CompareTag(&quot;SpiderWeb&quot;))
        {
            mMovementSpeedCoef *= 0.5f;
            collision.GetComponent&amp;lt;Range&amp;gt;().transform.localScale = new Vector3(1.0f, 1.0f, 1.0f); // 투사체 범위 제어
            collision.GetComponent&amp;lt;Range&amp;gt;().mSpeed = 0f;
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1718542346530&quot; class=&quot;reasonml&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt;    private void OnTriggerExit2D(Collider2D collision)
    {
        if (collision.CompareTag(&quot;Garlic&quot;))
            mIsGarlic = false;
        if (collision.CompareTag(&quot;SpiderWeb&quot;))
            mMovementSpeedCoef = 2f;
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1818&quot; data-origin-height=&quot;993&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btqUML/btsHRwoFPWn/ujKmRYFfZiVWlkd3HL70nK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btqUML/btsHRwoFPWn/ujKmRYFfZiVWlkd3HL70nK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btqUML/btsHRwoFPWn/ujKmRYFfZiVWlkd3HL70nK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtqUML%2FbtsHRwoFPWn%2FujKmRYFfZiVWlkd3HL70nK%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;1818&quot; height=&quot;993&quot; data-origin-width=&quot;1818&quot; data-origin-height=&quot;993&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 게임 시작 및 종료 HUD 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1-1) 캐릭터 선택 HUD 제작&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1457&quot; data-origin-height=&quot;814&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bay1uH/btsHRYlXB3r/4XQ5ruSeRB5PNLSKlnnCrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bay1uH/btsHRYlXB3r/4XQ5ruSeRB5PNLSKlnnCrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bay1uH/btsHRYlXB3r/4XQ5ruSeRB5PNLSKlnnCrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbay1uH%2FbtsHRYlXB3r%2F4XQ5ruSeRB5PNLSKlnnCrk%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;1457&quot; height=&quot;814&quot; data-origin-width=&quot;1457&quot; data-origin-height=&quot;814&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;1471&quot; data-origin-height=&quot;822&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAB7OZ/btsHSYynhrD/IUvoekKriGS7zNXcjDjWKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAB7OZ/btsHSYynhrD/IUvoekKriGS7zNXcjDjWKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAB7OZ/btsHSYynhrD/IUvoekKriGS7zNXcjDjWKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAB7OZ%2FbtsHSYynhrD%2FIUvoekKriGS7zNXcjDjWKK%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;1471&quot; height=&quot;822&quot; data-origin-width=&quot;1471&quot; data-origin-height=&quot;822&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1-2) HUD 자동생성 로직 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- RootHUD 기반, 캐릭터 선택 버튼 복제&lt;/p&gt;
&lt;pre id=&quot;code_1718542624056&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class HUDGameStart : MonoBehaviour
{
    RectTransform mRect;
    public GameObject mRootHUD;
    GameObject[] mPlayers;
    void Awake()
    {
        mRect = GetComponent&amp;lt;RectTransform&amp;gt;();
        mPlayers = new GameObject[GameManager.instance.mPlayerJsonData.Length];
        mPlayers[0] = mRootHUD;
        mPlayers[0].GetComponent&amp;lt;HUDBtnPlayer&amp;gt;().mId = 0;
        mPlayers[0].GetComponent&amp;lt;HUDBtnPlayer&amp;gt;().Init();
        for (int i = 1; i &amp;lt; mPlayers.Length; ++i)
        {
            mPlayers[i] = Instantiate(mRootHUD);
            mPlayers[i].transform.SetParent(mRootHUD.transform.parent);
            mPlayers[i].transform.name = &quot;Character &quot; + i;
            mPlayers[i].transform.localScale = mRootHUD.transform.localScale;
            mPlayers[i].GetComponent&amp;lt;HUDBtnPlayer&amp;gt;().mId = i;
            mPlayers[i].GetComponent&amp;lt;HUDBtnPlayer&amp;gt;().Init();
            mPlayers[i].GetComponent&amp;lt;Button&amp;gt;().interactable = true;
            if (!GameManager.instance.mPlayerJsonData[i].Enable)
                mPlayers[i].GetComponent&amp;lt;Button&amp;gt;().interactable = false;
        }    
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 텍스트 및 스프라이트 초기화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 버튼 클릭 시 게임 시작&lt;/p&gt;
&lt;pre id=&quot;code_1718542726300&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class HUDBtnPlayer : MonoBehaviour
{
    public int mId;

    Image mImgBackground;
    Image mImgChar;
    TMP_Text mTextName;
    TMP_Text mTextDesc;

    private void Awake()
    {
        Image[] imgs = GetComponentsInChildren&amp;lt;Image&amp;gt;();
        TMP_Text[] texts = GetComponentsInChildren&amp;lt;TMP_Text&amp;gt;();

        mImgBackground = imgs[0];
        mImgChar = imgs[1];
        mTextName = texts[0];
        mTextDesc = texts[1];
    }
    public void Init()
    {
        mImgChar.sprite = GameManager.instance.mPlayerSprite[mId];
        mTextName.text = GameManager.instance.mPlayerJsonData[mId].Name;
        mTextDesc.text = GameManager.instance.mPlayerJsonData[mId].Desc;
        if (!GameManager.instance.mPlayerJsonData[mId].Enable)
        {
            mTextName.text = &quot;Unlocked&quot;;
            mTextDesc.text = GameManager.instance.mPlayerJsonData[mId].UnlockDesc;
            mImgBackground.color = new Color(150, 150, 150);
            mImgChar.color = new Color(0, 0, 0);
        }
    }

    public void OnClick()
    {
        GameManager.instance.GameStart(mId);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2-1) 게임 종료 HUD 추가&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1391&quot; data-origin-height=&quot;781&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3Qqoa/btsHR6p1bRU/imX35jMrs0DnzEjViPNpOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3Qqoa/btsHR6p1bRU/imX35jMrs0DnzEjViPNpOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3Qqoa/btsHR6p1bRU/imX35jMrs0DnzEjViPNpOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3Qqoa%2FbtsHR6p1bRU%2FimX35jMrs0DnzEjViPNpOk%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;1391&quot; height=&quot;781&quot; data-origin-width=&quot;1391&quot; data-origin-height=&quot;781&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2-2) HUD 관리 로직 추가&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1718542823019&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class HUDResult : MonoBehaviour
{
    public GameObject[] mTitle;
    public void Lose()
    {
        mTitle[0].SetActive(true);
        mTitle[1].SetActive(false);
    }
    public void Win()
    {
        mTitle[0].SetActive(false);
        mTitle[1].SetActive(true);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1718542930439&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class GameManager : MonoBehaviour
{
    public static GameManager instance;
    // 생략
    public HUDResult mHUDResult;
    public WaitForSeconds mWait0_5s;
    
    IEnumerator GameOverRoutine()
    {
        mIsLive = false;
        yield return mWait0_5s;
        mHUDResult.Lose();
        mHUDResult.gameObject.SetActive(true);
        Stop();
    }
    IEnumerator GameVictoryRoutine()
    {
        mIsLive = false;
        for (int i = 0; i &amp;lt; mEnemyPool.mPool.Count; ++i)
            mEnemyPool.mPool[i].SetActive(false);
        yield return mWait0_5s;
        mHUDResult.Win();
        mHUDResult.gameObject.SetActive(true);
        Stop();
    }
    public void GameOver()
    {
        StartCoroutine(GameOverRoutine());
    }
    public void GameVictory()
    {
        StartCoroutine(GameVictoryRoutine());
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 업적 시스템 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) HUD 추가&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1089&quot; data-origin-height=&quot;607&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nahak/btsHSVPksxW/JPaDSsRs8yyAdZLhAAdl6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nahak/btsHSVPksxW/JPaDSsRs8yyAdZLhAAdl6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nahak/btsHSVPksxW/JPaDSsRs8yyAdZLhAAdl6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnahak%2FbtsHSVPksxW%2FJPaDSsRs8yyAdZLhAAdl6k%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;1089&quot; height=&quot;607&quot; data-origin-width=&quot;1089&quot; data-origin-height=&quot;607&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) HUD 자동화 시스템&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1718542983061&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    public void InitAchive()
    {
        PlayerPrefs.SetInt(&quot;MyData&quot;, 1);

        for (int i = 0; i &amp;lt; mAchiveJsonData.Length; ++i)
        {
            PlayerPrefs.SetInt(mAchiveJsonData[i].Name.ToString(), 0);
        }
    }
    void CheckAchive()
    {
        for (int i= 0; i&amp;lt; mAchiveJsonData.Length; ++i)
        {
            bool isAchive = false;
            switch (mAchiveJsonData[i].Name)
            {
                case Enum.Achive.UnlockChar2:
                    if (mPlayerData.Kill &amp;gt;= 1) isAchive = true;
                    break;
                case Enum.Achive.UnlockChar3:
                    if (mPlayerData.GameTime &amp;gt;= 300) isAchive = true;
                    break;
                default:
                    Debug.Assert(false, &quot;Error&quot;);
                    break;
            }
            if (isAchive &amp;amp;&amp;amp; PlayerPrefs.GetInt(mAchiveJsonData[i].Name.ToString()) == 0)
            {
                PlayerPrefs.SetInt(mAchiveJsonData[i].Name.ToString(), 1);
                StartCoroutine(NoticeRoutine(i));
            }
        }
    }
    
    IEnumerator NoticeRoutine(int i)
    {
        mHUDAchive.gameObject.SetActive(true);
        mHUDAchive.mIcon.sprite = mAchiveSprite[mAchiveJsonData[i].SpriteId];
        mHUDAchive.mText.text = mAchiveJsonData[i].Desc;
        yield return mWait5s;
        mHUDAchive.gameObject.SetActive(false);
    }&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1718543021745&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class HUDAchive : MonoBehaviour
{
    public Image mIcon;
    public TMP_Text mText;

    private void Awake()
    {
        mIcon = GetComponentsInChildren&amp;lt;Image&amp;gt;()[1];
        mText = GetComponentsInChildren&amp;lt;TMP_Text&amp;gt;()[0];
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. 골드 및 경험치 드롭 구현&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. 필드 장애물 구현&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3. 필드 드롭 아이템 구현&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4. 필드 이벤트 구현&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5. 이펙트 구현&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;6. 사운드 구현&lt;/p&gt;</description>
      <category>--------게임만들기--------/|unity| by C#</category>
      <category>C#</category>
      <category>hud 구현</category>
      <category>localScale</category>
      <category>playerprefs</category>
      <category>prefab</category>
      <category>unity</category>
      <category>디버프 구현</category>
      <category>업적 구현</category>
      <category>유니티</category>
      <category>투사체 크기 제어</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/347</guid>
      <comments>https://kyunstudio.tistory.com/347#entry347comment</comments>
      <pubDate>Fri, 7 Jun 2024 13:19:47 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] Day6 - 도끼, 마늘 무기 구현</title>
      <link>https://kyunstudio.tistory.com/346</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1229&quot; data-origin-height=&quot;1236&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dEBNgw/btsHPguafHK/KIwGLXMQykLZdtYltOdefK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dEBNgw/btsHPguafHK/KIwGLXMQykLZdtYltOdefK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dEBNgw/btsHPguafHK/KIwGLXMQykLZdtYltOdefK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdEBNgw%2FbtsHPguafHK%2FKIwGLXMQykLZdtYltOdefK%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;1229&quot; height=&quot;1236&quot; data-origin-width=&quot;1229&quot; data-origin-height=&quot;1236&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 금일 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 도끼 무기 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1) RigidBody 2D 내 Gravity Scale 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2) 공격 방향 제어 로직 추가&lt;/p&gt;
&lt;pre id=&quot;code_1717692489511&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    void FireAxe()
    {
        Vector3 dir;
        if(mShotCnt % 2 == 0)
        {
            dir.x = 1;
            dir.y = 2;
            dir.z = 0;
        }
        else
        {
            dir.x = -1;
            dir.y = 2;
            dir.z = 0;
        }
        dir = dir.normalized;
        // Debug.Log(dir);

        Transform bullet = mWeaponPool.Get().transform; // 부족한 것을 오브젝트 풀로 추가
        bullet.parent = mWeaponPool.transform;
        bullet.position = GameManager.instance.mPlayer.transform.position;
        bullet.rotation = Quaternion.FromToRotation(Vector3.up, dir);
        bullet.GetComponent&amp;lt;Range&amp;gt;().Init(Mathf.RoundToInt(GameManager.instance.mWeaponLastData[mId].Damage), GameManager.instance.mWeaponLastData[mId].Pierce, dir, GameManager.instance.mWeaponLastData[mId].Speed);
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 마늘 무기 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1) OnTriggerEnter2D 로직 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2) Coroutine 추가&lt;/p&gt;
&lt;pre id=&quot;code_1717692234430&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    IEnumerator KnockBack()
    {
        //yield return null; // 1 프레임 쉬기
        //yield return new WaitForSeconds(2f); // 2초 쉬기
        yield return mWaitFixedFrame;

        Vector3 playerPos = GameManager.instance.mPlayer.transform.position;
        Vector3 dirVec = transform.position - playerPos;

        mRigid.AddForce(dirVec.normalized * mKnockBackForce, ForceMode2D.Impulse);
    }

    IEnumerator HitGalic()
    {
        yield return mWaitFixedFrame;

        mHealth -= mGarlicDamage;

        if (mHealth &amp;gt; 0)
        {
            StartCoroutine(KnockBack());
            mAnim.SetTrigger(&quot;Hit&quot;);
        }
        else
        {
            mIsLive = false;
            mIsGarlic = false;
            mColl.enabled = false;
            mRigid.simulated = false;
            mSpriter.sortingOrder = 1;
            mAnim.SetBool(&quot;Dead&quot;, true);
            GameManager.instance.mPlayerData.Kill++;
            GameManager.instance.GetExp(mDropExp);
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3) 범위 제어 옵션 추가&lt;/p&gt;
&lt;pre id=&quot;code_1717692212782&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;melee.localScale = Vector3.one * GameManager.instance.mWeaponLastData[mId].ProjectileSize;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. HUD 프리팹 추가&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1) 목적: Item 추가에 따른 확장 가능성을 키우기 위함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2) 적용방안:&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Json 데이터 개수에 따라 GameObject 배열 크기 가변&lt;/p&gt;
&lt;pre id=&quot;code_1717692332907&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    public GameObject mRootHUD;
    GameObject[] mItems;
    void Awake()
    {
        mRect = GetComponent&amp;lt;RectTransform&amp;gt;();
        mItems = new GameObject[GameManager.instance.mWeaponJsonData.Length + GameManager.instance.mPerkJsonData.Length];
        mItems[0] = mRootHUD;
        for (int i = 1; i &amp;lt; mItems.Length; ++i)
        {
            mItems[i] = Instantiate(mRootHUD);
            mItems[i].GetComponent&amp;lt;HUDItem&amp;gt;().mId = i;
            mItems[i].transform.SetParent(mRootHUD.transform.parent);
            mItems[i].transform.name = &quot;Item &quot; + i;
            mItems[i].transform.localScale = mRootHUD.transform.localScale;
        }    
    }&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 무기 구현&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1) 거미줄 공격&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;2) 폭발형 공격&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3) 원거리 폭발형 공격&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 캐릭터 구현&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 골드 및 경험치 드롭 구현&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 필드 장애물 구현&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. 필드 드롭 아이템 구현&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6. 필드 이벤트 구현&lt;/b&gt;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|unity| by C#</category>
      <category>C#</category>
      <category>coroutine</category>
      <category>unity</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/346</guid>
      <comments>https://kyunstudio.tistory.com/346#entry346comment</comments>
      <pubDate>Fri, 7 Jun 2024 01:46:33 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] Day5 - 단검 무기 구현, 버그 개선 (position, localPosition)</title>
      <link>https://kyunstudio.tistory.com/344</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1605&quot; data-origin-height=&quot;1051&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ko051/btsHPxhPdwf/U3jixFY4lFROhDxpjWEFo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ko051/btsHPxhPdwf/U3jixFY4lFROhDxpjWEFo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ko051/btsHPxhPdwf/U3jixFY4lFROhDxpjWEFo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKo051%2FbtsHPxhPdwf%2FU3jixFY4lFROhDxpjWEFo0%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;1605&quot; height=&quot;1051&quot; data-origin-width=&quot;1605&quot; data-origin-height=&quot;1051&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 금일 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 단검 무기 구현&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 일정 시간 간격으로 무기를 발사하는 로직 구현&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. localPosition &amp;amp; position 차이로 인한 버그 수정&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1) 객체 위치 초기화 로직 구현&lt;/p&gt;
&lt;pre id=&quot;code_1717600326471&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mWeaponCtrl[i].transform.name = &quot;WeaponCtrl&quot; + i;
mWeaponCtrl[i].transform.parent = GameManager.instance.mPlayer.transform;
mWeaponCtrl[i].transform.localPosition = Vector3.zero;
mWeaponCtrl[i].transform.localRotation = Quaternion.identity;

// mWeaponCtrl[i].transform.position = Vector3.zero;
// mWeaponCtrl[i].transform.rotation = Quaternion.identity;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2) 아키텍처 구조&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- GameObject&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - Player&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - WeaponCtrl0 &lt;b&gt;(&amp;lt;- 초기화 적용, localPosition = Vecter3.zero)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - WeaponPool &lt;b&gt;(&amp;lt;- 초기화 적용, localPosition = Vecter3.zero)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - RangePrefab0 (Active)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - RangePrefab0 (Active)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - ...&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - RangePrefab0 (!Active)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - WeaponCtrl1&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - WeaponPool&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - RangePrefab1 (Active)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - RangePrefab1 (Active)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - ...&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - RangePrefab1 (!Active)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - WeaponCtrl2&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - ...&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - WeaponCtrl7&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 무기 구현&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;1) 도끼&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2) 마늘&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3) 거미줄 공격&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4) 원거리 폭발형 공격&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4) etc...&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 캐릭터 구현&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 골드 및 경험치 드롭 구현&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 필드 장애물 구현&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. 필드 드롭 아이템 구현&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6. 필드 이벤트 구현&lt;/b&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- TODO (메모리 최적화 및 객체 관리 방법 검토 방법)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. &lt;/span&gt;&lt;a href=&quot;https://blog.unity.com/games/optimize-your-mobile-game-performance-tips-on-profiling-memory-and-code-architecture-from&quot;&gt;https://blog.unity.com/games/optimize-your-mobile-game-performance-tips-on-profiling-memory-and-code-architecture-from&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1717602269281&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Optimize your mobile game performance: Tips on profiling, memory, and code architecture from Unity&amp;rsquo;s top engineers | Unity Blo&quot; data-og-description=&quot;When profiling your game, we recommend that you cover both spikes and the cost of an average frame in your game. Understanding and optimizing expensive operations that occur in each frame can be more useful for applications running below the target frame r&quot; data-og-host=&quot;blog.unity.com&quot; data-og-source-url=&quot;https://blog.unity.com/games/optimize-your-mobile-game-performance-tips-on-profiling-memory-and-code-architecture-from&quot; data-og-url=&quot;https://blog.unity.com/games/optimize-your-mobile-game-performance-tips-on-profiling-memory-and-code-architecture-from&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/vDA6e/hyWg3eoUph/uiQNteD128vSm4c9iGi1JK/img.jpg?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675&quot;&gt;&lt;a href=&quot;https://blog.unity.com/games/optimize-your-mobile-game-performance-tips-on-profiling-memory-and-code-architecture-from&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.unity.com/games/optimize-your-mobile-game-performance-tips-on-profiling-memory-and-code-architecture-from&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/vDA6e/hyWg3eoUph/uiQNteD128vSm4c9iGi1JK/img.jpg?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Optimize your mobile game performance: Tips on profiling, memory, and code architecture from Unity&amp;rsquo;s top engineers | Unity Blo&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;When profiling your game, we recommend that you cover both spikes and the cost of an average frame in your game. Understanding and optimizing expensive operations that occur in each frame can be more useful for applications running below the target frame r&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.unity.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &lt;a href=&quot;https://forum.unity.com/threads/transform-position-vs-localposition-performance-question.1204726/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://forum.unity.com/threads/transform-position-vs-localposition-performance-question.1204726/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1717602423484&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Transform Position vs LocalPosition (Performance Question)&quot; data-og-description=&quot;So, I just learned that modifying Transform.position is less performant than modifying Transform.localPosition. This is because whenever you modify...&quot; data-og-host=&quot;forum.unity.com&quot; data-og-source-url=&quot;https://forum.unity.com/threads/transform-position-vs-localposition-performance-question.1204726/&quot; data-og-url=&quot;https://forum.unity.com/threads/transform-position-vs-localposition-performance-question.1204726/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://forum.unity.com/threads/transform-position-vs-localposition-performance-question.1204726/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://forum.unity.com/threads/transform-position-vs-localposition-performance-question.1204726/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Transform Position vs LocalPosition (Performance Question)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;So, I just learned that modifying Transform.position is less performant than modifying Transform.localPosition. This is because whenever you modify...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;forum.unity.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>--------게임만들기--------/|unity| by C#</category>
      <category>C#</category>
      <category>localposition</category>
      <category>position</category>
      <category>unity</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/344</guid>
      <comments>https://kyunstudio.tistory.com/344#entry344comment</comments>
      <pubDate>Thu, 6 Jun 2024 00:48:16 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] localPosition, position</title>
      <link>https://kyunstudio.tistory.com/342</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;0. 서문&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;게임 제작 간 무기 위치 초기화 동작에 오류 발생&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1403&quot; data-origin-height=&quot;981&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYyicH/btsHQkILSRt/ktYGSh60sx9Z8cTnFpLmr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYyicH/btsHQkILSRt/ktYGSh60sx9Z8cTnFpLmr1/img.png&quot; data-alt=&quot;회전형 무기 중심이 플레이어에서 벗어난 버그가 종종 발생&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYyicH/btsHQkILSRt/ktYGSh60sx9Z8cTnFpLmr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYyicH%2FbtsHQkILSRt%2FktYGSh60sx9Z8cTnFpLmr1%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;1403&quot; height=&quot;981&quot; data-origin-width=&quot;1403&quot; data-origin-height=&quot;981&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;회전형 무기 중심이 플레이어에서 벗어난 버그가 종종 발생&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 문제 원인&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체의 위치 초기화를 'gameObject.position = Vector3.zero' 방식으로 초기화를 적용함.&lt;/p&gt;
&lt;pre id=&quot;code_1717602119006&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mWeaponPool.transform.position = Vector3.zero;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때, position 값은 'W&lt;span style=&quot;color: #455463; text-align: start;&quot;&gt;orld Space' 기준으로 적용됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- position: World Space 내 transform 좌표 (게임 내 공간에 따라 x,y,z가 결정)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- localPosition: 부모 객체 transform 기준 상대 좌표&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2810&quot; data-origin-height=&quot;1026&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k21Ou/btsHPOwQ3ua/AkaGrKCVUYy82ShHHn6wak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k21Ou/btsHPOwQ3ua/AkaGrKCVUYy82ShHHn6wak/img.png&quot; data-alt=&quot;회전형 무기 생성 오류 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k21Ou/btsHPOwQ3ua/AkaGrKCVUYy82ShHHn6wak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk21Ou%2FbtsHPOwQ3ua%2FAkaGrKCVUYy82ShHHn6wak%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;2810&quot; height=&quot;1026&quot; data-origin-width=&quot;2810&quot; data-origin-height=&quot;1026&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;회전형 무기 생성 오류 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PuNkv/btsHQLMODob/lI6olIt2uGXYYBVgKdACNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PuNkv/btsHQLMODob/lI6olIt2uGXYYBVgKdACNk/img.png&quot; data-alt=&quot;World Space 예시\&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PuNkv/btsHQLMODob/lI6olIt2uGXYYBVgKdACNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPuNkv%2FbtsHQLMODob%2FlI6olIt2uGXYYBVgKdACNk%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;1024&quot; height=&quot;768&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;World Space 예시\&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+) Screen Space&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;511&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uFcZi/btsHQfHDw8U/OZxysrZPawo502eWlnpX20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uFcZi/btsHQfHDw8U/OZxysrZPawo502eWlnpX20/img.png&quot; data-alt=&quot;Screen Space (선택한 값에 따라 X, Y, Z 좌표가 가변됨)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uFcZi/btsHQfHDw8U/OZxysrZPawo502eWlnpX20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuFcZi%2FbtsHQfHDw8U%2FOZxysrZPawo502eWlnpX20%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;916&quot; height=&quot;511&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;511&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Screen Space (선택한 값에 따라 X, Y, Z 좌표가 가변됨)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 해결 방안&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;부모 객체와의 상대 좌표를 활용한 초기화 적용&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. 적용 방법&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1717577130796&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// mWeaponPool.transform.position = Vector3.zero; (기존 초기화 방법, 오류 발생)
mWeaponPool.transform.localPosition = Vector3.zero;
mWeaponPool.transform.localRotation = Quaternion.identity;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고 자료&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/ScriptReference/Transform-localPosition.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unity3d.com/ScriptReference/Transform-localPosition.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1717600553032&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Unity - Scripting API: Transform.localPosition&quot; data-og-description=&quot;Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Close&quot; data-og-host=&quot;docs.unity3d.com&quot; data-og-source-url=&quot;https://docs.unity3d.com/ScriptReference/Transform-localPosition.html&quot; data-og-url=&quot;https://docs.unity3d.com/ScriptReference/Transform-localPosition.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cnmB13/hyWhaY3BUt/vGOEpdxcXroSjLNeAatxuK/img.jpg?width=240&amp;amp;height=128&amp;amp;face=0_0_240_128&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/ScriptReference/Transform-localPosition.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.unity3d.com/ScriptReference/Transform-localPosition.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cnmB13/hyWhaY3BUt/vGOEpdxcXroSjLNeAatxuK/img.jpg?width=240&amp;amp;height=128&amp;amp;face=0_0_240_128');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Unity - Scripting API: Transform.localPosition&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Close&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.unity3d.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/ScriptReference/Transform-position.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unity3d.com/ScriptReference/Transform-position.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1717600773741&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Unity - Scripting API: Transform.position&quot; data-og-description=&quot;Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Close&quot; data-og-host=&quot;docs.unity3d.com&quot; data-og-source-url=&quot;https://docs.unity3d.com/ScriptReference/Transform-position.html&quot; data-og-url=&quot;https://docs.unity3d.com/ScriptReference/Transform-position.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/wHsaj/hyWg2moc8L/kln0BS36wlU17k5txPA1Rk/img.jpg?width=240&amp;amp;height=128&amp;amp;face=0_0_240_128&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/ScriptReference/Transform-position.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.unity3d.com/ScriptReference/Transform-position.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/wHsaj/hyWg2moc8L/kln0BS36wlU17k5txPA1Rk/img.jpg?width=240&amp;amp;height=128&amp;amp;face=0_0_240_128');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Unity - Scripting API: Transform.position&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Close&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.unity3d.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|unity| by C#</category>
      <category>C#</category>
      <category>init</category>
      <category>initialze</category>
      <category>localposition</category>
      <category>position</category>
      <category>unity</category>
      <category>초기화</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/342</guid>
      <comments>https://kyunstudio.tistory.com/342#entry342comment</comments>
      <pubDate>Wed, 5 Jun 2024 17:53:42 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] Day4 - 싱글턴 구현 완료, 투사체 방사 로직 구현</title>
      <link>https://kyunstudio.tistory.com/340</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 개발 현황&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 금일 개발 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 싱글턴 구현 완료&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 구조체 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 객체 참조 간 발생 오류 디버깅 완료&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 플레이어, 몬스터, 무기, 퍽 데이터 정리 완료&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 객체 구조 정리 완료 (추후 개발 간 수정 발생 가능)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 투사체 방사 로직 구현&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 회전 로직 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. TODO&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 무기 구현&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 단검&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 도끼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 마늘&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) etc...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 캐릭터 구현&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 골드 및 경험치 드롭 구현&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 필드 장애물 구현&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. 필드 드롭 아이템 구현&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6. 필드 이벤트 구현&lt;/b&gt;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|unity| by C#</category>
      <category>개발</category>
      <category>유니티</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/340</guid>
      <comments>https://kyunstudio.tistory.com/340#entry340comment</comments>
      <pubDate>Wed, 5 Jun 2024 01:40:00 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] 방사형 공격 (Rotate, rotation, Quaternion)</title>
      <link>https://kyunstudio.tistory.com/338</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;0. 서문&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;복수의 투사체 발사 시 원뿔 모양 방사 로직 구현 간 이슈 경험&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 문제 원인&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 방향 벡터에 대해 특정 범위 (e.g. 30도)의 회전 적용에서 문제 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 회전 축 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 쿼터니언 변환 문제&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 해결 방안&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1) 회전 축 문제&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;현재 개발중인 게임은 2차원 게임으로 z축을 중심으로 회전이 이뤄지도록 설정함&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;411&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n9RNp/btsHPvv7IaX/Xxn6kM6bFCof6MckKNT67k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n9RNp/btsHPvv7IaX/Xxn6kM6bFCof6MckKNT67k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n9RNp/btsHPvv7IaX/Xxn6kM6bFCof6MckKNT67k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn9RNp%2FbtsHPvv7IaX%2FXxn6kM6bFCof6MckKNT67k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;411&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;411&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2) 쿼터니안 변환 문제&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;회전 변환의 적용 방법으로 두가지를 고려하였다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1, sin, cos 함수 구현을 통한 회전벡터 구현&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. 내장 함수 활용을 통한 회전벡터 구현&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이때, 내장 함수 'Quaternion.AngleAxis'와 'Quaternion.Euler'를 활용하는 방법으로 회전벡터를 구하는 방법을 선택하였다.&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. 적용 방법&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333; text-align: start;&quot;&gt;- e.g. y축 기준 -45도 회전&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. Quaternion.AngleAxis 활용&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1717516308249&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vector = Quaternion.AngleAxis(-45, Vector3.up) * vector;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Quaternion.Euler 활용&lt;/p&gt;
&lt;pre id=&quot;code_1717516321042&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;transform.rotation = Quaternion.Euler(new Vector(0f, 45f, 0f));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 실제 적용 예시&lt;/p&gt;
&lt;pre id=&quot;code_1717516760432&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Vector3 targetPos = GameManager.instance.mPlayer.mScanner.mNearestTarget.position;
Vector3 rootDir = targetPos - GameManager.instance.mPlayer.transform.position;
rootDir = rootDir.normalized;

// 방사형 공격 로직
for (int i = 0; i &amp;lt; GameManager.instance.mWeaponLastData[mId].Projectile; ++i)
{
    Vector3 dir = rootDir;
    if(GameManager.instance.mWeaponLastData[mId].Projectile != 1)
    {
        float rot = 30 * (i / ((float)GameManager.instance.mWeaponLastData[mId].Projectile - 1)) - 15;
        // dir = Quaternion.AngleAxis(rot, Vector3.forward) * dir;
        dir = Quaternion.Euler(0, 0, rot) * dir;
    }
            
    Transform bullet = mWeaponPool.Get().transform; // 부족한 것을 오브젝트 풀로 추가
    bullet.parent = mWeaponPool.transform;
    bullet.position = GameManager.instance.mPlayer.transform.position;
    bullet.rotation = Quaternion.FromToRotation(Vector3.up, dir);
    bullet.GetComponent&amp;lt;Range&amp;gt;().Init(Mathf.RoundToInt(GameManager.instance.mWeaponLastData[mId].Damage), GameManager.instance.mWeaponLastData[mId].Pierce, dir, GameManager.instance.mWeaponLastData[mId].Speed); // -1 is Infinity Per
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;715&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/laeoR/btsHOKAMY8X/Ir11lKsRjqeSv5Aw0D9L7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/laeoR/btsHOKAMY8X/Ir11lKsRjqeSv5Aw0D9L7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/laeoR/btsHOKAMY8X/Ir11lKsRjqeSv5Aw0D9L7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlaeoR%2FbtsHOKAMY8X%2FIr11lKsRjqeSv5Aw0D9L7k%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;889&quot; height=&quot;715&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;715&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 참고 자료&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://discussions.unity.com/t/rotate-a-vector3-direction/14722&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://discussions.unity.com/t/rotate-a-vector3-direction/14722&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/2023.2/Manual/class-Transform.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unity3d.com/kr/2023.2/Manual/class-Transform.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1717517303567&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;트랜스폼 - Unity 매뉴얼&quot; data-og-description=&quot;Transform은 게임 오브젝트의 Position, Rotation, Scale 그리고 부모 지정 상태를 저장합니다.게임 오브젝트에는 항상 트랜스폼 컴포넌트가 첨부되어 있으므로 트랜스폼 컴포넌트 없이는 트랜스폼을 제&quot; data-og-host=&quot;docs.unity3d.com&quot; data-og-source-url=&quot;https://docs.unity3d.com/kr/2023.2/Manual/class-Transform.html&quot; data-og-url=&quot;https://docs.unity3d.com/kr/2023.2/Manual/class-Transform.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cPS7Xu/hyWdgzAnbM/3ggBd0jq7DH8cWkkJqdWwk/img.png?width=500&amp;amp;height=165&amp;amp;face=0_0_500_165&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/2023.2/Manual/class-Transform.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.unity3d.com/kr/2023.2/Manual/class-Transform.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cPS7Xu/hyWdgzAnbM/3ggBd0jq7DH8cWkkJqdWwk/img.png?width=500&amp;amp;height=165&amp;amp;face=0_0_500_165');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;트랜스폼 - Unity 매뉴얼&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Transform은 게임 오브젝트의 Position, Rotation, Scale 그리고 부모 지정 상태를 저장합니다.게임 오브젝트에는 항상 트랜스폼 컴포넌트가 첨부되어 있으므로 트랜스폼 컴포넌트 없이는 트랜스폼을 제&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.unity3d.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/ScriptReference/Quaternion.AngleAxis.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unity3d.com/ScriptReference/Quaternion.AngleAxis.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1717514801882&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Unity - Scripting API: Quaternion.AngleAxis&quot; data-og-description=&quot;Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Close&quot; data-og-host=&quot;docs.unity3d.com&quot; data-og-source-url=&quot;https://docs.unity3d.com/ScriptReference/Quaternion.AngleAxis.html&quot; data-og-url=&quot;https://docs.unity3d.com/ScriptReference/Quaternion.AngleAxis.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/VeBzc/hyWdnerlDm/akV6jauKx6aoZcvkq36LTk/img.jpg?width=240&amp;amp;height=128&amp;amp;face=0_0_240_128&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/ScriptReference/Quaternion.AngleAxis.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.unity3d.com/ScriptReference/Quaternion.AngleAxis.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/VeBzc/hyWdnerlDm/akV6jauKx6aoZcvkq36LTk/img.jpg?width=240&amp;amp;height=128&amp;amp;face=0_0_240_128');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Unity - Scripting API: Quaternion.AngleAxis&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Close&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.unity3d.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/ScriptReference/Quaternion.Euler.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unity3d.com/ScriptReference/Quaternion.Euler.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1717516988118&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Unity - Scripting API: Quaternion.Euler&quot; data-og-description=&quot;Description Returns a rotation that rotates z degrees around the z axis, x degrees around the x axis, and y degrees around the y axis; applied in that order. Description Returns a rotation that rotates z degrees around the z axis, x degrees around the x ax&quot; data-og-host=&quot;docs.unity3d.com&quot; data-og-source-url=&quot;https://docs.unity3d.com/ScriptReference/Quaternion.Euler.html&quot; data-og-url=&quot;https://docs.unity3d.com/ScriptReference/Quaternion.Euler.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/MazJQ/hyWgVAy25M/teDbvKnx42xQumoEjjtHek/img.jpg?width=240&amp;amp;height=128&amp;amp;face=0_0_240_128&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/ScriptReference/Quaternion.Euler.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.unity3d.com/ScriptReference/Quaternion.Euler.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/MazJQ/hyWgVAy25M/teDbvKnx42xQumoEjjtHek/img.jpg?width=240&amp;amp;height=128&amp;amp;face=0_0_240_128');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Unity - Scripting API: Quaternion.Euler&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Description Returns a rotation that rotates z degrees around the z axis, x degrees around the x axis, and y degrees around the y axis; applied in that order. Description Returns a rotation that rotates z degrees around the z axis, x degrees around the x ax&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.unity3d.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|unity| by C#</category>
      <category>angleaxis</category>
      <category>Euler</category>
      <category>Quaternion</category>
      <category>unity</category>
      <category>방사</category>
      <category>범위</category>
      <category>원뿔</category>
      <category>유니티</category>
      <category>투사체</category>
      <category>회전</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/338</guid>
      <comments>https://kyunstudio.tistory.com/338#entry338comment</comments>
      <pubDate>Wed, 5 Jun 2024 00:27:08 +0900</pubDate>
    </item>
    <item>
      <title>[unity] Day3 - 싱글턴 구현(static function)</title>
      <link>https://kyunstudio.tistory.com/337</link>
      <description>&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;1. 개발 현황&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;TBD&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;2. 금일 개발 내용&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;1. 아키텍처 변경&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;객체 활용 방식 개선&lt;/p&gt;
&lt;pre id=&quot;code_1717518208622&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public static GameManager instance;
[Header(&quot;# Game Control&quot;)]
public bool mIsLive = true;
[Header(&quot;# Player Info&quot;)]
public int[] mNextExp = { 10, 30, 60, 100, 150, 210, 280, 360, 450, 600 };
[Header(&quot;# Unity Data Info&quot;)]
public Sprite[] mSprite;
public GameObject[] mPrefabs;               // 프리펩들을 보관할 변수
public RuntimeAnimatorController[] mPlayerAnimCtrl;
public RuntimeAnimatorController[] mEnemyAnimCtrl;
[Header(&quot;# Json Info&quot;)]
public int mPlayerJsonId;
public PlayerJsonData[] mPlayerJsonData;
public WeaponJsonData[] mWeaponJsonData;
public PerkJsonData[] mPerkJsonData;
public EnemyJsonData[] mEnemyJsonData;
[Header(&quot;# Level &amp;amp; Item Info&quot;)]
public PlayerData mPlayerData;
public int mWeaponSize;
public int mPerkSize;
public ItemCtrlData[] mWeaponCtrlData;
public ItemCtrlData[] mPerkCtrlData;
public PerkData mPerkData;
public WeaponData[] mWeaponData;
public WeaponData[] mWeaponLastData;
[Header(&quot;# Game Object&quot;)]
public Player mPlayer;
public PoolManager mEnemyPool;
public LevelUp mHUDLevelUp;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;데이터 및 현재 상태에 대한 정보를 GameManager에서 일괄적으로 관리&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;2. static function 구현&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;싱글턴 활용에 따라 클래스 내 함수의 반복적 생성의 단점을 피하기 위해 static function을 적용함.&lt;/p&gt;
&lt;pre id=&quot;code_1717518273696&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    public static void InitPerkIdx(int idx)
    {
        if (idx &amp;gt;= GameManager.instance.mWeaponSize)
            Debug.Assert(false, &quot;Error&quot;);

        int id = GameManager.instance.mPerkCtrlData[idx].Id;
        int level = GameManager.instance.mPerkCtrlData[idx].Level;

        GameManager.instance.mPerkData.Projectile += GameManager.instance.mPerkJsonData[id].Projectile[level];
        GameManager.instance.mPerkData.Damage += GameManager.instance.mPerkJsonData[id].Damage[level];
        GameManager.instance.mPerkData.Speed += GameManager.instance.mPerkJsonData[id].Speed[level];
        GameManager.instance.mPerkData.Range += GameManager.instance.mPerkJsonData[id].Range[level];
        GameManager.instance.mPerkData.CoolTime += GameManager.instance.mPerkJsonData[id].CoolTime[level];
        GameManager.instance.mPerkData.Pierce += GameManager.instance.mPerkJsonData[id].Pierce[level];
        GameManager.instance.mPerkData.ProjectileCoef += GameManager.instance.mPerkJsonData[id].ProjectileCoef[level];
        GameManager.instance.mPerkData.DamageCoef += GameManager.instance.mPerkJsonData[id].DamageCoef[level];
        GameManager.instance.mPerkData.SpeedCoef += GameManager.instance.mPerkJsonData[id].SpeedCoef[level];
        GameManager.instance.mPerkData.RangeCoef += GameManager.instance.mPerkJsonData[id].RangeCoef[level];
        GameManager.instance.mPerkData.CoolTimeCoef += GameManager.instance.mPerkJsonData[id].CoolTimeCoef[level];
        GameManager.instance.mPerkData.PierceCoef += GameManager.instance.mPerkJsonData[id].PierceCoef[level];
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;- 전역적인 변수를 제어하는 항목에 대해 static function을 적용함&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;3. weapon 동작방식 변경&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;1) 클래스 내 멤버변수 최소화&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;- 메모리 최적화&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;2) 제어 클래스 / 객체 클래스 분리&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;- 제어 클래스: 객체 생성 및 배치 관리&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;- 객체 클래스: 무기 충돌 및 투사체 이동 로직 관리&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;3. TODO&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;1. 싱글턴 구현 완료&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;2. 원거리 무기 투사체 개수에 따라 방사형 공격 구현&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;3. 다양한 무기 구현&lt;/p&gt;</description>
      <category>--------게임만들기--------/|unity| by C#</category>
      <category>CLASS</category>
      <category>function</category>
      <category>Static</category>
      <category>unity</category>
      <category>싱글턴</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/337</guid>
      <comments>https://kyunstudio.tistory.com/337#entry337comment</comments>
      <pubDate>Tue, 4 Jun 2024 08:46:07 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] 뱀파이버 서바이벌 - Day2 싱글턴 구현</title>
      <link>https://kyunstudio.tistory.com/335</link>
      <description>&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;1. 개발 현황 정리&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;1. Enum Class&lt;br&gt;weapon type 관련&lt;br&gt;&lt;br&gt;2. Struct&lt;br&gt;enemy 관련&lt;br&gt;weapon 관련&lt;br&gt;&lt;br&gt;3. GameManager&lt;br&gt;싱글턴 방식&lt;br&gt;경험치 관리 로직&lt;br&gt;시간 관리 로직&lt;br&gt;&lt;br&gt;4. Player&lt;br&gt;이동 로직&lt;br&gt;오브젝트 거리 측정 로직&lt;br&gt;&lt;br&gt;5. ObjectPool&lt;br&gt;list 동적 생성 로직&lt;br&gt;비활성화 오브젝트 탐색 로직&lt;br&gt;오브젝트 생성 로직&lt;br&gt;&lt;br&gt;6. Enemy&lt;br&gt;rigidbody&lt;br&gt;collider&lt;br&gt;animator&lt;br&gt;spriterenderer&lt;br&gt;리스폰 로직&lt;br&gt;&lt;br&gt;&lt;br&gt;7. Weapon&lt;br&gt;근접 회전형 무기 로직&lt;br&gt;원거리 투사체 무기 로직&lt;br&gt;장착형 무기 로직&lt;br&gt;&lt;br&gt;8. HUD&lt;br&gt;게임환경 HUD&lt;br&gt;레벨업 HUD&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;/h3&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2510&quot; data-origin-height=&quot;1504&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqIrqc/btsHLD2OHMC/EFnHZ6aFvOpZ7cSJonk2f0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqIrqc/btsHLD2OHMC/EFnHZ6aFvOpZ7cSJonk2f0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqIrqc/btsHLD2OHMC/EFnHZ6aFvOpZ7cSJonk2f0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqIrqc%2FbtsHLD2OHMC%2FEFnHZ6aFvOpZ7cSJonk2f0%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;2510&quot; height=&quot;1504&quot; data-origin-width=&quot;2510&quot; data-origin-height=&quot;1504&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;2. 진행 내용&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;오늘은 싱글턴 구현을 위해 코드의 동작 방식을 전체적으로 변경하는 것을 목표로 삼았다.&lt;br&gt;&lt;br&gt;1) 모든 GameObject, Sprite 등 Unity 엔진 내에서 추가 관리가 필요한 항목을 모두 GameManager에서 일괄적으로 관리하도록 변경&lt;br&gt;- 내가 생각한 장점:&lt;br&gt;동작 간 참조가 필요한 데이터를 일괄적으로 관리하므로, 메모리 중복을 피하고, 동작 속도를 높일 수 있을 것으로 생각함.&lt;br&gt;&lt;br&gt;- 적용 방향&lt;br&gt;모든 class 내 기본 데이터를 모두 GameManager로 이동&lt;br&gt;array형태로 데이터 관리&lt;br&gt;&lt;br&gt;- 구현 간 이슈 및 학습내용:&lt;br&gt;GameObject 속성 추가&lt;br&gt;싱글턴&lt;br&gt;&lt;br&gt;&lt;br&gt;2) 무기, 적 정보를 JSON 방식으로 저장 및 로드 동작 구현&lt;br&gt;- 내가 생각한 장점:&lt;br&gt;개발 간 수치 수정 및 추가가 용이하도록 변경&lt;br&gt;&lt;br&gt;- 적용 방향&lt;br&gt;GameManager에서 구조체를 array로 관리하도록 설정함&lt;br&gt;GameObject, Sprite 접근을 위한 int형 변수 활용&lt;br&gt;&lt;br&gt;- 구현 간 이슈 및 학습내용&lt;br&gt;SerializerField&lt;br&gt;array 저장을 위한 JsonConverter 클래스 활용&lt;br&gt;GameObject, Sprite 정보 저장 불가&lt;br&gt;&lt;br&gt;&lt;br&gt;3) 하위 class 동작 간 GameManager 객체를 참고하여 동작이 이뤄지도록 수정&lt;br&gt;- 내가 생각한 장점&lt;br&gt;메모리 효율성 증가&lt;br&gt;&lt;br&gt;- 적용 방향&lt;br&gt;각 class는 int형 Id 데이터만을 관리하며, GameManager를 참조하여 동작이 이뤄지도록 수정&lt;br&gt;&lt;br&gt;- 구현 간 이슈 및 학습내용&lt;br&gt;NullReferenceError&lt;br&gt;Script Ex3cution Order&lt;br&gt;&lt;br&gt;&lt;br&gt;4) 스크립트에서 게임 오브젝트 생성&lt;br&gt;- 내가 생각한 장점&lt;br&gt;런타임 시 Unity Scene에 추가되어있는 게임 오브젝트를 고려하지 않고 제작이 가능함&lt;br&gt;추후 생산성 확보가 가능&lt;br&gt;객체 관리의 효율성 증가&lt;br&gt;&lt;br&gt;- 적용 방향&lt;br&gt;클래스 형태의 객체를 멤버함수로 가지며, 컴포넌트에 게임오브젝트를 추가하는 방향으로 적용함&lt;br&gt;추후 rigidbody나 animator 등 속성을 추가할 예정&lt;br&gt;&lt;br&gt;- 구현 간 이슈 및 학습내용&lt;br&gt;AddComponent&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;3. TODO List&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;1. GameManager&lt;br&gt;&amp;nbsp;1) 하위 클래스 및 게임 오브젝트 관리&lt;br&gt;&amp;nbsp; - 컴포넌트 추가 로직 구현&lt;br&gt;&amp;nbsp;&lt;br&gt;2. 무기 종류 추가&lt;br&gt;&lt;br&gt;3. 이펙트 추가&lt;br&gt;&lt;br&gt;4. 퍽 종류 추가&lt;br&gt;&lt;br&gt;5. 골드 및 경험치 드롭 추가&lt;br&gt;&lt;br&gt;6. 설정 창 추가&lt;br&gt;&lt;br&gt;7. 메인화면 추가&lt;br&gt;&lt;br&gt;8. 특성 창 추가&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;참고자료&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;추후 개별적인 포스트로 변경하자.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/530/Manual/CreateDestroyObjects.html&quot; target=&quot;_self&quot;&gt;&lt;span&gt;https://docs.unity3d.com/kr/530/Manual/CreateDestroyObjects.html&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;게임 오브젝트 생성 및 제거 - Unity 매뉴얼&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;일부 게임은 씬에 일정한 수의 오브젝트를 유지하지만 게임플레이 중에 캐릭터, 보물 및 기타 오브젝트를 만들고 제거하는 것은 매우 일반적입니다. Unity에서 게임 오브젝트는 기존 오브젝트의&quot; data-og-host=&quot;docs.unity3d.com&quot; data-og-source-url=&quot;https://docs.unity3d.com/kr/530/Manual/CreateDestroyObjects.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dXmDFi/hyWdpppP4m/uUnMXvZL3NK2jqcpvv9qOK/img.jpg?width=240&amp;amp;height=128&amp;amp;face=0_0_240_128&quot; data-og-url=&quot;https://docs.unity3d.com/kr/530/Manual/CreateDestroyObjects.html&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/530/Manual/CreateDestroyObjects.html&quot; target=&quot;_blank&quot; data-source-url=&quot;https://docs.unity3d.com/kr/530/Manual/CreateDestroyObjects.html&quot;&gt;&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dXmDFi/hyWdpppP4m/uUnMXvZL3NK2jqcpvv9qOK/img.jpg?width=240&amp;amp;height=128&amp;amp;face=0_0_240_128')&quot;&gt; &lt;/div&gt;&lt;div class=&quot;og-text&quot;&gt;&lt;p class=&quot;og-title&quot;&gt;게임 오브젝트 생성 및 제거 - Unity 매뉴얼&lt;/p&gt;&lt;p class=&quot;og-desc&quot;&gt;일부 게임은 씬에 일정한 수의 오브젝트를 유지하지만 게임플레이 중에 캐릭터, 보물 및 기타 오브젝트를 만들고 제거하는 것은 매우 일반적입니다. Unity에서 게임 오브젝트는 기존 오브젝트의&lt;/p&gt;&lt;p class=&quot;og-host&quot;&gt;docs.unity3d.com&lt;/p&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/2019.3/ScriptReference/GameObject.AddComponent.html&quot; target=&quot;_self&quot;&gt;&lt;span&gt;https://docs.unity3d.com/kr/2019.3/ScriptReference/GameObject.AddComponent.html&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;GameObject-AddComponent - Unity 스크립팅 API&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;Adds a component class named className to the game object.&quot; data-og-host=&quot;docs.unity3d.com&quot; data-og-source-url=&quot;https://docs.unity3d.com/kr/2019.3/ScriptReference/GameObject.AddComponent.html&quot; data-og-image=&quot;&quot; data-og-url=&quot;https://docs.unity3d.com/kr/2019.3/ScriptReference/GameObject.AddComponent.html&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/2019.3/ScriptReference/GameObject.AddComponent.html&quot; target=&quot;_blank&quot; data-source-url=&quot;https://docs.unity3d.com/kr/2019.3/ScriptReference/GameObject.AddComponent.html&quot;&gt;&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('')&quot;&gt; &lt;/div&gt;&lt;div class=&quot;og-text&quot;&gt;&lt;p class=&quot;og-title&quot;&gt;GameObject-AddComponent - Unity 스크립팅 API&lt;/p&gt;&lt;p class=&quot;og-desc&quot;&gt;Adds a component class named className to the game object.&lt;/p&gt;&lt;p class=&quot;og-host&quot;&gt;docs.unity3d.com&lt;/p&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|unity| by C#</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/335</guid>
      <comments>https://kyunstudio.tistory.com/335#entry335comment</comments>
      <pubDate>Sun, 2 Jun 2024 23:04:21 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] 뱀파이버 서바이벌 - Day1 게임 개발 로드맵 작성</title>
      <link>https://kyunstudio.tistory.com/334</link>
      <description>&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;1. 개발 현황 정리&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;과거 골드메달 유튜브를 참고하여 제작하던 뱀파이버 서바이벌 모작을 베이스로 기능을 추가하는 것을 목표로 선정하였다.&lt;br&gt;&lt;br&gt;우선적으로 게임 개발 전 현재 제작 현황을 검토했다.&lt;br&gt;&lt;br&gt;1. GameManager&lt;br&gt;경험치 관리 로직&lt;br&gt;시간 관리 로직&lt;br&gt;&lt;br&gt;2. Player&lt;br&gt;이동 로직&lt;br&gt;오브젝트 거리 측정 로직&lt;br&gt;&lt;br&gt;3. ObjectPool&lt;br&gt;list 동적 생성 로직&lt;br&gt;비활성화 오브젝트 탐색 로직&lt;br&gt;오브젝트 생성 로직&lt;br&gt;&lt;br&gt;4. Enemy&lt;br&gt;rigidbody&lt;br&gt;collider&lt;br&gt;animator&lt;br&gt;spriterenderer&lt;br&gt;리스폰 로직&lt;br&gt;&lt;br&gt;&lt;br&gt;5. Weapon&lt;br&gt;근접 회전형 무기 로직&lt;br&gt;원거리 투사체 무기 로직&lt;br&gt;장착형 무기 로직&lt;br&gt;&lt;br&gt;6. HUD&lt;br&gt;게임환경 HUD&lt;br&gt;레벨업 HUD&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2510&quot; data-origin-height=&quot;1504&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SEWro/btsHLsmYJ0O/zKQ6Xi6XO3kz23eGNRGwf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SEWro/btsHLsmYJ0O/zKQ6Xi6XO3kz23eGNRGwf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SEWro/btsHLsmYJ0O/zKQ6Xi6XO3kz23eGNRGwf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSEWro%2FbtsHLsmYJ0O%2FzKQ6Xi6XO3kz23eGNRGwf0%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;2510&quot; height=&quot;1504&quot; data-origin-width=&quot;2510&quot; data-origin-height=&quot;1504&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;2. TODO List&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;1. enum class 생성&lt;br&gt;&amp;nbsp;- enum class를 활용하여 데이터 관리를 용이하도록 변경&lt;br&gt;&lt;br&gt;2. struct 생성&lt;br&gt;&lt;br&gt;3. GameManager&lt;br&gt; 1) 싱글턴 적용&lt;br&gt;&amp;nbsp; - 데이터 일괄 관리&lt;br&gt;&amp;nbsp;&amp;nbsp; (1) Sprite 관리&lt;br&gt;&amp;nbsp;&amp;nbsp; (2) GameObject 관리&lt;br&gt;&amp;nbsp;&amp;nbsp; (3) 캐릭터/적/무기 데이터 관리&lt;br&gt;&amp;nbsp;&amp;nbsp; (4) animatorController 관리&lt;br&gt;&amp;nbsp;&amp;nbsp; (5) Prefeb 관리&lt;br&gt;&amp;nbsp;&amp;nbsp; (6) ObjectPool 관리&lt;br&gt;&amp;nbsp;&amp;nbsp; (7) HUD 관리&lt;br&gt;&amp;nbsp;2) 데이터 저장 및 로드&lt;br&gt;&amp;nbsp; - Json 활용&lt;br&gt;&amp;nbsp;&amp;nbsp; (1) Enemy data 제어&lt;br&gt;&amp;nbsp;&amp;nbsp; (2) Weapon data 제어&lt;br&gt;&amp;nbsp;&amp;nbsp; (3) 게임상태 data 제어&lt;br&gt;&lt;br&gt;4. 무기 종류 추가&lt;br&gt;&lt;br&gt;5. 이펙트 추가&lt;br&gt;&lt;br&gt;6. 퍽 종류 추가&lt;br&gt;&lt;br&gt;7. 골드 및 경험치 드롭 추가&lt;br&gt;&lt;br&gt;8. 설정 창 추가&lt;br&gt;&lt;br&gt;9. 메인화면 추가&lt;br&gt;&lt;br&gt;10. 특성 창 추가&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;참고자료&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;추후 개별적인 포스트로 변경하자.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/530/Manual/CreateDestroyObjects.html&quot; target=&quot;_self&quot;&gt;&lt;span&gt;https://docs.unity3d.com/kr/530/Manual/CreateDestroyObjects.html&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;게임 오브젝트 생성 및 제거 - Unity 매뉴얼&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;일부 게임은 씬에 일정한 수의 오브젝트를 유지하지만 게임플레이 중에 캐릭터, 보물 및 기타 오브젝트를 만들고 제거하는 것은 매우 일반적입니다. Unity에서 게임 오브젝트는 기존 오브젝트의&quot; data-og-host=&quot;docs.unity3d.com&quot; data-og-source-url=&quot;https://docs.unity3d.com/kr/530/Manual/CreateDestroyObjects.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dXmDFi/hyWdpppP4m/uUnMXvZL3NK2jqcpvv9qOK/img.jpg?width=240&amp;amp;height=128&amp;amp;face=0_0_240_128&quot; data-og-url=&quot;https://docs.unity3d.com/kr/530/Manual/CreateDestroyObjects.html&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/530/Manual/CreateDestroyObjects.html&quot; target=&quot;_blank&quot; data-source-url=&quot;https://docs.unity3d.com/kr/530/Manual/CreateDestroyObjects.html&quot;&gt;&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dXmDFi/hyWdpppP4m/uUnMXvZL3NK2jqcpvv9qOK/img.jpg?width=240&amp;amp;height=128&amp;amp;face=0_0_240_128')&quot;&gt; &lt;/div&gt;&lt;div class=&quot;og-text&quot;&gt;&lt;p class=&quot;og-title&quot;&gt;게임 오브젝트 생성 및 제거 - Unity 매뉴얼&lt;/p&gt;&lt;p class=&quot;og-desc&quot;&gt;일부 게임은 씬에 일정한 수의 오브젝트를 유지하지만 게임플레이 중에 캐릭터, 보물 및 기타 오브젝트를 만들고 제거하는 것은 매우 일반적입니다. Unity에서 게임 오브젝트는 기존 오브젝트의&lt;/p&gt;&lt;p class=&quot;og-host&quot;&gt;docs.unity3d.com&lt;/p&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/2019.3/ScriptReference/GameObject.AddComponent.html&quot; target=&quot;_self&quot;&gt;&lt;span&gt;https://docs.unity3d.com/kr/2019.3/ScriptReference/GameObject.AddComponent.html&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;GameObject-AddComponent - Unity 스크립팅 API&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;Adds a component class named className to the game object.&quot; data-og-host=&quot;docs.unity3d.com&quot; data-og-source-url=&quot;https://docs.unity3d.com/kr/2019.3/ScriptReference/GameObject.AddComponent.html&quot; data-og-image=&quot;&quot; data-og-url=&quot;https://docs.unity3d.com/kr/2019.3/ScriptReference/GameObject.AddComponent.html&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/2019.3/ScriptReference/GameObject.AddComponent.html&quot; target=&quot;_blank&quot; data-source-url=&quot;https://docs.unity3d.com/kr/2019.3/ScriptReference/GameObject.AddComponent.html&quot;&gt;&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('')&quot;&gt; &lt;/div&gt;&lt;div class=&quot;og-text&quot;&gt;&lt;p class=&quot;og-title&quot;&gt;GameObject-AddComponent - Unity 스크립팅 API&lt;/p&gt;&lt;p class=&quot;og-desc&quot;&gt;Adds a component class named className to the game object.&lt;/p&gt;&lt;p class=&quot;og-host&quot;&gt;docs.unity3d.com&lt;/p&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|unity| by C#</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/334</guid>
      <comments>https://kyunstudio.tistory.com/334#entry334comment</comments>
      <pubDate>Sun, 2 Jun 2024 17:52:29 +0900</pubDate>
    </item>
    <item>
      <title>[unity] NullReferenceException 문제 해결 (Script Execution Order)</title>
      <link>https://kyunstudio.tistory.com/332</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;0. 서문&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;뱀파이어 서바이벌 모작 제작 간, NullReferenceException 문제 발생.&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;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;1. Block Diagram&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2507&quot; data-origin-height=&quot;1507&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zZaNN/btsHL7Cf08H/9PWkycleWm02cnOz56bVBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zZaNN/btsHL7Cf08H/9PWkycleWm02cnOz56bVBK/img.png&quot; data-alt=&quot;uArchtecture Block Diagram&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zZaNN/btsHL7Cf08H/9PWkycleWm02cnOz56bVBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzZaNN%2FbtsHL7Cf08H%2F9PWkycleWm02cnOz56bVBK%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;2507&quot; height=&quot;1507&quot; data-origin-width=&quot;2507&quot; data-origin-height=&quot;1507&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;uArchtecture Block Diagram&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 문제 원인&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2506&quot; data-origin-height=&quot;1498&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCKT3V/btsHLt0efx7/VQxB0f9pGIBE9kwI7GXK61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCKT3V/btsHLt0efx7/VQxB0f9pGIBE9kwI7GXK61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCKT3V/btsHLt0efx7/VQxB0f9pGIBE9kwI7GXK61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCKT3V%2FbtsHLt0efx7%2FVQxB0f9pGIBE9kwI7GXK61%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;2506&quot; height=&quot;1498&quot; data-origin-width=&quot;2506&quot; data-origin-height=&quot;1498&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 초기 컴파일 동작 간, GameManager 내 ItemList 객체 초기화가 되어있지 않아 Null Pointer Error 발생 (Awake() 함수)&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;1810&quot; data-origin-height=&quot;583&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rYDae/btsHKloDj4f/ozMowZ6ncytXw4uedKOGQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rYDae/btsHKloDj4f/ozMowZ6ncytXw4uedKOGQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rYDae/btsHKloDj4f/ozMowZ6ncytXw4uedKOGQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrYDae%2FbtsHKloDj4f%2FozMowZ6ncytXw4uedKOGQ0%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;1810&quot; height=&quot;583&quot; data-origin-width=&quot;1810&quot; data-origin-height=&quot;583&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 객체 Enable 시, GameManager가 관리하는 ItemList 정보를 가져오는 코드 존재 (OnEnable() 함수)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2076&quot; data-origin-height=&quot;449&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EZO4r/btsHL7CghXh/P5XHdMMMdTbwsV8enQzItK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EZO4r/btsHL7CghXh/P5XHdMMMdTbwsV8enQzItK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EZO4r/btsHL7CghXh/P5XHdMMMdTbwsV8enQzItK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEZO4r%2FbtsHL7CghXh%2FP5XHdMMMdTbwsV8enQzItK%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;2076&quot; height=&quot;449&quot; data-origin-width=&quot;2076&quot; data-origin-height=&quot;449&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. 해결 방안&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 초기화 함수 생성&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Level Up 동작 직전, GameManager의 객체를 참고하도록 추가적인 함수 구현.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;허나, 이 방법의 경우 UI를 Enable하는 동작 이전에 추가적인 함수 호출이 필요해지는 단점 존재.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;2) 컴파일 순서 변경&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;Null 공간을 참조하는 문제는 컴파일 순서를 변경하여, 객체 초기화 순서를 바꾸는 것으로 해결하고자 함.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;'Script Execution Order'을 활용하여 문제를 해결할 수 있었다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 적용 방법&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) Project Settings 실행&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;482&quot; data-origin-height=&quot;833&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wdmLo/btsHKOXWpoe/hMPUb1QZyve3JPZieTUBKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wdmLo/btsHKOXWpoe/hMPUb1QZyve3JPZieTUBKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wdmLo/btsHKOXWpoe/hMPUb1QZyve3JPZieTUBKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwdmLo%2FbtsHKOXWpoe%2FhMPUb1QZyve3JPZieTUBKK%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;482&quot; height=&quot;833&quot; data-origin-width=&quot;482&quot; data-origin-height=&quot;833&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) Script Execution Order 변경&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;GameManager 클래스를 추가하고, Default Time 이전에 우선적으로 실행되도록 순서를 변경.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1035&quot; data-origin-height=&quot;1109&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/di1LpR/btsHKAluD6P/7Lyq8sGC3Fk1Q82k958vL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/di1LpR/btsHKAluD6P/7Lyq8sGC3Fk1Q82k958vL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/di1LpR/btsHKAluD6P/7Lyq8sGC3Fk1Q82k958vL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdi1LpR%2FbtsHKAluD6P%2F7Lyq8sGC3Fk1Q82k958vL1%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;1035&quot; height=&quot;1109&quot; data-origin-width=&quot;1035&quot; data-origin-height=&quot;1109&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;5. 참고 자료&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/530/Manual/ExecutionOrder.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unity3d.com/kr/530/Manual/ExecutionOrder.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1717290940024&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;이벤트 함수 실행 순서(Execution Order of Event Functions) - Unity 매뉴얼&quot; data-og-description=&quot;Unity 이벤트 함수는 사전에 정해진 순서대로 실행됩니다. 실행 순서는 다음과 같습니다.&quot; data-og-host=&quot;docs.unity3d.com&quot; data-og-source-url=&quot;https://docs.unity3d.com/kr/530/Manual/ExecutionOrder.html&quot; data-og-url=&quot;https://docs.unity3d.com/kr/530/Manual/ExecutionOrder.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/530/Manual/ExecutionOrder.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.unity3d.com/kr/530/Manual/ExecutionOrder.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;이벤트 함수 실행 순서(Execution Order of Event Functions) - Unity 매뉴얼&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Unity 이벤트 함수는 사전에 정해진 순서대로 실행됩니다. 실행 순서는 다음과 같습니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.unity3d.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/2019.4/Manual/class-MonoManager.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.unity3d.com/kr/2019.4/Manual/class-MonoManager.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1717290977374&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;스크립트 실행 순서 설정 - Unity 매뉴얼&quot; data-og-description=&quot;Script Execution Order 설정을 사용하면 Unity가 다른 MonoBehaviour 클래스의 이벤트 함수를 호출하는 상대 순서를 지정할 수 있습니다. 예를 들어 Unity가 MoveForward MonoBehaviour 스크립트를 실행하기 전에 Rota&quot; data-og-host=&quot;docs.unity3d.com&quot; data-og-source-url=&quot;https://docs.unity3d.com/kr/2019.4/Manual/class-MonoManager.html&quot; data-og-url=&quot;https://docs.unity3d.com/kr/2019.4/Manual/class-MonoManager.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bwq6Q3/hyWgXLryT4/TpkgzA3WbKs6F6IcbCisJK/img.png?width=507&amp;amp;height=331&amp;amp;face=0_0_507_331&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/2019.4/Manual/class-MonoManager.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.unity3d.com/kr/2019.4/Manual/class-MonoManager.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bwq6Q3/hyWgXLryT4/TpkgzA3WbKs6F6IcbCisJK/img.png?width=507&amp;amp;height=331&amp;amp;face=0_0_507_331');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;스크립트 실행 순서 설정 - Unity 매뉴얼&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Script Execution Order 설정을 사용하면 Unity가 다른 MonoBehaviour 클래스의 이벤트 함수를 호출하는 상대 순서를 지정할 수 있습니다. 예를 들어 Unity가 MoveForward MonoBehaviour 스크립트를 실행하기 전에 Rota&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.unity3d.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;질문이나 지적 있으시면 댓글로 남겨주세요~&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;도움 되셨으면 하트 꾹!&lt;/span&gt;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|unity| by C#</category>
      <category>C#</category>
      <category>Error</category>
      <category>execution</category>
      <category>NULL</category>
      <category>nullreferenceexception</category>
      <category>order</category>
      <category>SCRIPT</category>
      <category>script execution order</category>
      <category>unity</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/332</guid>
      <comments>https://kyunstudio.tistory.com/332#entry332comment</comments>
      <pubDate>Sun, 2 Jun 2024 10:21:36 +0900</pubDate>
    </item>
    <item>
      <title>게임 제작 프로젝트</title>
      <link>https://kyunstudio.tistory.com/331</link>
      <description>&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;0. 서문&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;게임 개발 방향성 수립 및 현황 기록&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;1. 2D 기반 뱀파이어서바이버 모작 게임&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. GameManager&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp;1) 객체 관리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp;- 모든 객체 관리를 GameManager에서 관리하여 메모리 효율성을 높임&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp;- 버그 해결&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp; (1) &lt;a href=&quot;https://kyunstudio.tistory.com/332&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Null Reference Exception&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2)&amp;nbsp; JSON&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 몬스터 정보 저장&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 무기 정보 저장&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. Player&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1) 이동&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2) 근접 유닛 탐지&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3) 무기 관리&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. PoolManager&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. Weapon&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1) 근거리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2) 원거리&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;5. GridMap&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1) 무한맵&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;6. HUD&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1) 기본 게임화면&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp;2) 레벨업 화면&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 3D RPG 게임&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. 퍼즐 게임&lt;/span&gt;&lt;/b&gt;&lt;/h3&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;style5&quot; /&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;질문이나 지적 있으시면 댓글로 남겨주세요~&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;도움 되셨으면 하트 꾹!&lt;/span&gt;&lt;/p&gt;</description>
      <category>--------게임만들기--------/|unity| by C#</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/331</guid>
      <comments>https://kyunstudio.tistory.com/331#entry331comment</comments>
      <pubDate>Sun, 2 Jun 2024 09:48:00 +0900</pubDate>
    </item>
    <item>
      <title>[c++] 백준 13460 - 구슬 탈출 2</title>
      <link>https://kyunstudio.tistory.com/330</link>
      <description>&lt;table class=&quot;txc-table&quot; style=&quot;border: none; border-collapse: collapse; width: 908px;&quot; border=&quot;0&quot; width=&quot;908&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 905px; height: 45px; border-width: 0px; border-style: none; background-color: #d9e5ff;&quot; colspan=&quot;1&quot;&gt;&lt;span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 14pt;&quot;&gt;0. [c++] 백준 13460 - 구슬 탈출 2&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif; font-size: 12pt;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/13460&quot;&gt;https://www.acmicpc.net/problem/13460&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;txc-table&quot; style=&quot;border: none; border-collapse: collapse; width: 908px;&quot; border=&quot;0&quot; width=&quot;908&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;line-height: normal; font-size: 13px; font-family: '맑은 고딕', sans-serif; color: #000000; width: 905px; height: 47px; border-width: 0px; border-style: none; background-color: #d9e5ff;&quot; colspan=&quot;1&quot;&gt;&lt;span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 14pt;&quot;&gt;1. 풀이&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif; font-size: 12pt;&quot;&gt;오래간만에 백준 알고리즘 문제를 풀어보았다.&lt;br /&gt;일반적인 BFS 방식으로 최단 시도 횟수로 빨간 공을 구멍에 넣을 수 있는 횟수를 계산하는 문제이다.&lt;/span&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif; font-size: 12pt;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif; font-size: 12pt;&quot;&gt;&lt;b&gt;- 아이디어&lt;/b&gt;&lt;br /&gt;1) board class 구현 및 상하좌우 이동에 대해 구현&lt;br /&gt;2) board 구현 중 bool 방식으로 위치에 대한 정보를 저장 (비교 방식 최적화)&lt;br /&gt;3) fstream를 통해 Text File을 활용한 반복적인 검증 구현 &lt;br /&gt;4) assert를 활용해 구현한 Logic 이상 유무 판단 자동화&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif; font-size: 12pt;&quot;&gt;&lt;b&gt;- 경험한 함정 요소&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif; font-size: 12pt;&quot;&gt;1) 10회를 넘는 탐색의 경우 -1을 반환&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif; font-size: 12pt;&quot;&gt;2) 빨간 공과 파란 공을 동시에 넣는 경우 -1을 반환&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br style=&quot;font-family: '맑은 고딕', sans-serif; font-size: 13px;&quot; /&gt;&lt;br style=&quot;font-family: '맑은 고딕', sans-serif; font-size: 13px;&quot; /&gt;&lt;/p&gt;
&lt;table class=&quot;txc-table&quot; style=&quot;border: none; border-collapse: collapse; width: 919px; height: 60px;&quot; border=&quot;0&quot; width=&quot;906&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 903px; height: 48px; border-width: 0px; border-style: none; background-color: #d9e5ff;&quot; colspan=&quot;1&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2. 소스코드&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1696834016100&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;vector&amp;gt;
#include&amp;lt;fstream&amp;gt;
#include&amp;lt;iostream&amp;gt;
#include&amp;lt;string&amp;gt;
#include&amp;lt;cassert&amp;gt;
#include&amp;lt;queue&amp;gt;

namespace ans {
	class Board
	{
	public:
		Board(const int&amp;amp; height, const int&amp;amp; width, const std::vector&amp;lt;std::vector&amp;lt;char&amp;gt;&amp;gt;&amp;amp; array);
		~Board() = default;

		int CalcBestWay();
		void Move();
		void MoveR();
		void MoveL();
		void MoveU();
		void MoveD();
		void Reset();
	private:
		int mWidth;
		int mHeight;
		std::vector&amp;lt;std::vector&amp;lt;bool&amp;gt;&amp;gt; mArray;
		int mPosCurRed[2];
		int mPosCurBlue[2];
		int mPosStartRed[2];
		int mPosStartBlue[2];
		int mPosGoal[2];
		int mCache[10][10][10][10];
		int mBestCnt;
		std::queue&amp;lt;std::pair&amp;lt;std::pair&amp;lt;int, int&amp;gt;, std::pair&amp;lt;int, int&amp;gt;&amp;gt;&amp;gt; mQueue;
	};

	Board::Board(const int&amp;amp; height, const int&amp;amp; width, const std::vector&amp;lt;std::vector&amp;lt;char&amp;gt;&amp;gt;&amp;amp; array)
		: mHeight(height)
		, mWidth(width)
		, mBestCnt(-1)
	{
		mArray.resize(mHeight, std::vector&amp;lt;bool&amp;gt;(mWidth));

		for (int y = 0; y &amp;lt; mHeight; ++y)
		{
			for (int x = 0; x &amp;lt; mWidth; ++x)
			{
				for (int y2 = 0; y2 &amp;lt; mHeight; ++y2)
					for (int x2 = 0; x2 &amp;lt; mWidth; ++x2)
						mCache[y][x][y2][x2] = -1;
				if (array[y][x] == '#')
				{
					mArray[y][x] = false;
					continue;
				}
				else if (array[y][x] == 'R')
				{
					mPosCurRed[1] = y;
					mPosCurRed[0] = x;
					mPosStartRed[1] = y;
					mPosStartRed[0] = x;
				}
				else if (array[y][x] == 'B')
				{
					mPosCurBlue[1] = y;
					mPosCurBlue[0] = x;
					mPosStartBlue[1] = y;
					mPosStartBlue[0] = x;
				}
				else if (array[y][x] == 'O')
				{
					mPosGoal[1] = y;
					mPosGoal[0] = x;
				}
				mArray[y][x] = true;
			}
		}
		mCache[mPosCurRed[1]][mPosCurRed[0]][mPosCurBlue[1]][mPosCurBlue[0]] = 0;
		mQueue.push({ {mPosCurRed[1], mPosCurRed[0]}, {mPosCurBlue[1], mPosCurBlue[0]} });
	}
	int Board::CalcBestWay()
	{
		Move();
		if (mBestCnt &amp;gt; 10)
			return -1;
		return mBestCnt;
	}
	void Board::Move()
	{
		int posRed[2];
		int posBlue[2];

		while (!mQueue.empty()) {
			posRed[1] = mQueue.front().first.first;
			posRed[0] = mQueue.front().first.second;
			posBlue[1] = mQueue.front().second.first;
			posBlue[0] = mQueue.front().second.second;
			mQueue.pop();

			mPosCurRed[1] = posRed[1];
			mPosCurRed[0] = posRed[0];
			mPosCurBlue[1] = posBlue[1];
			mPosCurBlue[0] = posBlue[0];
			MoveR();
			mPosCurRed[1] = posRed[1];
			mPosCurRed[0] = posRed[0];
			mPosCurBlue[1] = posBlue[1];
			mPosCurBlue[0] = posBlue[0];
			MoveL();
			mPosCurRed[1] = posRed[1];
			mPosCurRed[0] = posRed[0];
			mPosCurBlue[1] = posBlue[1];
			mPosCurBlue[0] = posBlue[0];
			MoveU();
			mPosCurRed[1] = posRed[1];
			mPosCurRed[0] = posRed[0];
			mPosCurBlue[1] = posBlue[1];
			mPosCurBlue[0] = posBlue[0];
			MoveD();
			if (mBestCnt != -1)
				return;
		}
	}
	
	void Board::MoveR()
	{
		int moveCount = mCache[mPosCurRed[1]][mPosCurRed[0]][mPosCurBlue[1]][mPosCurBlue[0]];
		bool posFlag = mPosCurRed[0] &amp;lt; mPosCurBlue[0]; // [. . R B] or [. . B R]
		bool redFall = false;
		bool blueFall = false;

		for (int x = mPosCurRed[0] + 1; x &amp;lt; mWidth; ++x)
		{
			if (mArray[mPosCurRed[1]][x])
				mPosCurRed[0] = x;
			else
				break;
			if (mPosGoal[1] == mPosCurRed[1] &amp;amp;&amp;amp; mPosGoal[0] == mPosCurRed[0])
				redFall = true;
		}
		for (int x = mPosCurBlue[0] + 1; x &amp;lt; mWidth; ++x)
		{
			if (mArray[mPosCurBlue[1]][x])
				mPosCurBlue[0] = x;
			else
				break;
			if (mPosGoal[1] == mPosCurBlue[1] &amp;amp;&amp;amp; mPosGoal[0] == mPosCurBlue[0])
				blueFall = true;
		}

		if (mPosCurRed[0] == mPosCurBlue[0] &amp;amp;&amp;amp; mPosCurRed[1] == mPosCurBlue[1])
		{
			if (posFlag)
				--mPosCurRed[0];
			else
				--mPosCurBlue[0];
		}

		if (redFall &amp;amp;&amp;amp; !blueFall)
		{
			mBestCnt = moveCount + 1;
		}

		if ((mCache[mPosCurRed[1]][mPosCurRed[0]][mPosCurBlue[1]][mPosCurBlue[0]] == -1 || mCache[mPosCurRed[1]][mPosCurRed[0]][mPosCurBlue[1]][mPosCurBlue[0]] &amp;gt; moveCount + 1) &amp;amp;&amp;amp; !redFall &amp;amp;&amp;amp; !blueFall)
		{
			mCache[mPosCurRed[1]][mPosCurRed[0]][mPosCurBlue[1]][mPosCurBlue[0]] = moveCount + 1;
			mQueue.push({ {mPosCurRed[1], mPosCurRed[0]}, {mPosCurBlue[1], mPosCurBlue[0]} });
		}
	}
	void Board::MoveL()
	{
		int moveCount = mCache[mPosCurRed[1]][mPosCurRed[0]][mPosCurBlue[1]][mPosCurBlue[0]];
		bool posFlag = mPosCurRed[0] &amp;lt; mPosCurBlue[0]; // [. . R B] or [. . B R]
		bool redFall = false;
		bool blueFall = false;

		for (int x = mPosCurRed[0] - 1; x &amp;gt; 0; --x)
		{
			if (mArray[mPosCurRed[1]][x])
				mPosCurRed[0] = x;
			else
				break;
			if (mPosGoal[1] == mPosCurRed[1] &amp;amp;&amp;amp; mPosGoal[0] == mPosCurRed[0])
				redFall = true;
		}
		for (int x = mPosCurBlue[0] - 1; x &amp;gt; 0; --x)
		{
			if (mArray[mPosCurBlue[1]][x])
				mPosCurBlue[0] = x;
			else
				break;
			if (mPosGoal[1] == mPosCurBlue[1] &amp;amp;&amp;amp; mPosGoal[0] == mPosCurBlue[0])
				blueFall = true;
		}

		if (mPosCurRed[0] == mPosCurBlue[0] &amp;amp;&amp;amp; mPosCurRed[1] == mPosCurBlue[1])
		{
			if (posFlag)
				++mPosCurBlue[0];
			else
				++mPosCurRed[0];
		}

		if (redFall &amp;amp;&amp;amp; !blueFall)
		{
			mBestCnt = moveCount + 1;
		}

		if ((mCache[mPosCurRed[1]][mPosCurRed[0]][mPosCurBlue[1]][mPosCurBlue[0]] == -1 || mCache[mPosCurRed[1]][mPosCurRed[0]][mPosCurBlue[1]][mPosCurBlue[0]] &amp;gt; moveCount + 1) &amp;amp;&amp;amp; !redFall &amp;amp;&amp;amp; !blueFall)
		{
			mCache[mPosCurRed[1]][mPosCurRed[0]][mPosCurBlue[1]][mPosCurBlue[0]] = moveCount + 1;
			mQueue.push({ {mPosCurRed[1], mPosCurRed[0]}, {mPosCurBlue[1], mPosCurBlue[0]} });
		}
	}

	void Board::MoveU()
	{
		int moveCount = mCache[mPosCurRed[1]][mPosCurRed[0]][mPosCurBlue[1]][mPosCurBlue[0]];
		bool posFlag = mPosCurRed[1] &amp;lt; mPosCurBlue[1]; // [. . R B] or [. . B R]
		bool redFall = false;
		bool blueFall = false;

		for (int y = mPosCurRed[1] + 1; y &amp;lt; mHeight; ++y)
		{
			if (mArray[y][mPosCurRed[0]])
				mPosCurRed[1] = y;
			else
				break;
			if (mPosGoal[1] == mPosCurRed[1] &amp;amp;&amp;amp; mPosGoal[0] == mPosCurRed[0])
				redFall = true;
		}
		for (int y = mPosCurBlue[1] + 1; y &amp;lt; mHeight; ++y)
		{
			if (mArray[y][mPosCurBlue[0]])
				mPosCurBlue[1] = y;
			else
				break;
			if (mPosGoal[1] == mPosCurBlue[1] &amp;amp;&amp;amp; mPosGoal[0] == mPosCurBlue[0])
				blueFall = true;
		}

		if (mPosCurRed[0] == mPosCurBlue[0] &amp;amp;&amp;amp; mPosCurRed[1] == mPosCurBlue[1])
		{
			if (posFlag)
				--mPosCurRed[1];
			else
				--mPosCurBlue[1];
		}

		if (redFall &amp;amp;&amp;amp; !blueFall)
		{
			mBestCnt = moveCount + 1;
		}

		if ((mCache[mPosCurRed[1]][mPosCurRed[0]][mPosCurBlue[1]][mPosCurBlue[0]] == -1 || mCache[mPosCurRed[1]][mPosCurRed[0]][mPosCurBlue[1]][mPosCurBlue[0]] &amp;gt; moveCount + 1) &amp;amp;&amp;amp; !redFall &amp;amp;&amp;amp; !blueFall)
		{
			mCache[mPosCurRed[1]][mPosCurRed[0]][mPosCurBlue[1]][mPosCurBlue[0]] = moveCount + 1;
			mQueue.push({ {mPosCurRed[1], mPosCurRed[0]}, {mPosCurBlue[1], mPosCurBlue[0]} });
		}
	}
	void Board::MoveD()
	{
		int moveCount = mCache[mPosCurRed[1]][mPosCurRed[0]][mPosCurBlue[1]][mPosCurBlue[0]];
		bool posFlag = mPosCurRed[1] &amp;lt; mPosCurBlue[1]; // [. . R B] or [. . B R]
		bool redFall = false;
		bool blueFall = false;

		for (int y = mPosCurRed[1] - 1; y &amp;gt; 0; --y)
		{
			if (mArray[y][mPosCurRed[0]])
				mPosCurRed[1] = y;
			else
				break;
			if (mPosGoal[1] == mPosCurRed[1] &amp;amp;&amp;amp; mPosGoal[0] == mPosCurRed[0])
				redFall = true;
		}
		for (int y = mPosCurBlue[1] - 1; y &amp;gt; 0; --y)
		{
			if (mArray[y][mPosCurBlue[0]])
				mPosCurBlue[1] = y;
			else
				break;
			if (mPosGoal[1] == mPosCurBlue[1] &amp;amp;&amp;amp; mPosGoal[0] == mPosCurBlue[0])
				blueFall = true;
		}

		if (mPosCurRed[0] == mPosCurBlue[0] &amp;amp;&amp;amp; mPosCurRed[1] == mPosCurBlue[1])
		{
			if (posFlag)
				++mPosCurBlue[1];
			else
				++mPosCurRed[1];
		}

		if (redFall &amp;amp;&amp;amp; !blueFall)
		{
			mBestCnt = moveCount + 1;
		}

		if ((mCache[mPosCurRed[1]][mPosCurRed[0]][mPosCurBlue[1]][mPosCurBlue[0]] == -1 || mCache[mPosCurRed[1]][mPosCurRed[0]][mPosCurBlue[1]][mPosCurBlue[0]] &amp;gt; moveCount + 1) &amp;amp;&amp;amp; !redFall &amp;amp;&amp;amp; !blueFall)
		{
			mCache[mPosCurRed[1]][mPosCurRed[0]][mPosCurBlue[1]][mPosCurBlue[0]] = moveCount + 1;
			mQueue.push({ {mPosCurRed[1], mPosCurRed[0]}, {mPosCurBlue[1], mPosCurBlue[0]} });
		}
	}
	void Board::Reset()
	{
		mPosCurBlue[1] = mPosStartBlue[1];
		mPosCurBlue[0] = mPosStartBlue[0];
		mPosCurRed[1] = mPosStartRed[1];
		mPosCurRed[0] = mPosStartRed[0];
	}
}

void test(const std::string&amp;amp; fileName)
{
	int height, width, answer;
	std::vector&amp;lt;std::vector&amp;lt;char&amp;gt;&amp;gt; array;
	
	std::ifstream filePtr(&quot;input&quot; + fileName + &quot;.txt&quot;);
	std::string temp;
	std::getline(filePtr, temp, ' ');
	height = std::stoi(temp);

	std::getline(filePtr, temp);
	width = std::stoi(temp);

	array.resize(height, std::vector&amp;lt;char&amp;gt;(width));
	int y = 0;
	while (std::getline(filePtr, temp))
	{
		for (int x = 0; x &amp;lt; width; ++x)
		{
			array[y][x] = temp[x];
		}
		++y;
	}
	filePtr.close();

	filePtr.open(&quot;output&quot; + fileName + &quot;.txt&quot;);
	std::getline(filePtr, temp);
	answer = std::stoi(temp);
	filePtr.close();

	ans::Board* board = new ans::Board(height, width, array);
	std::cout &amp;lt;&amp;lt; board-&amp;gt;CalcBestWay() &amp;lt;&amp;lt; std::endl;
	//assert(answer == board-&amp;gt;CalcBestWay());
	delete board;
}

void answer()
{
	int height, width;
	std::cin &amp;gt;&amp;gt; height &amp;gt;&amp;gt; width;

	std::vector&amp;lt;std::vector&amp;lt;char&amp;gt;&amp;gt; array;
	array.resize(height, std::vector&amp;lt;char&amp;gt;(width));

	for (int y = 0; y &amp;lt; height; ++y)
	{
		for (int x = 0; x &amp;lt; width; ++x)
		{
			std::cin &amp;gt;&amp;gt; array[y][x];
		}
	}

	ans::Board* board = new ans::Board(height, width, array);
	std::cout &amp;lt;&amp;lt; board-&amp;gt;CalcBestWay() &amp;lt;&amp;lt; std::endl;
	delete board;
}

int main()
{
	//test(&quot;1&quot;);
	//test(&quot;2&quot;);
	//test(&quot;3&quot;);
	//test(&quot;4&quot;);
	//test(&quot;5&quot;);
	//test(&quot;6&quot;);
	//test(&quot;7&quot;);
	
	answer();

	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/kyun1016/BOJ/blob/main/BOJ/13460/main.cpp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/kyun1016/BOJ/blob/main/BOJ/13460/main.cpp&lt;/a&gt;&lt;/p&gt;
&lt;table class=&quot;txc-table&quot; style=&quot;border: none; border-collapse: collapse; width: 905px;&quot; border=&quot;0&quot; width=&quot;905&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 902px; height: 48px; border-width: 0px; border-style: none; background-color: #d9e5ff;&quot; colspan=&quot;1&quot;&gt;&lt;span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;3&lt;span&gt;&lt;b&gt;. 참고&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: '맑은 고딕', sans-serif;&quot;&gt;질문이나 지적 있으시면 댓글로 남겨주세요~&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: '맑은 고딕', sans-serif;&quot;&gt;도움 되셨으면 하트 꾹!&lt;/span&gt;&lt;/p&gt;</description>
      <category>&amp;lt;백준&amp;gt;/DFS와 BFS</category>
      <category>13460</category>
      <category>assert</category>
      <category>bfs</category>
      <category>BOJ</category>
      <category>c++</category>
      <category>CLASS</category>
      <category>cpp</category>
      <category>FStream</category>
      <category>구슬 탈출2</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/330</guid>
      <comments>https://kyunstudio.tistory.com/330#entry330comment</comments>
      <pubDate>Mon, 9 Oct 2023 15:47:50 +0900</pubDate>
    </item>
    <item>
      <title>[cupy] matplot에 cupy를 출력하기 (convert cupy to numpy)</title>
      <link>https://kyunstudio.tistory.com/327</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;gpu를 활용해 코드를 작성하던 도중, plot에 cupy로 작성한 배열이 출력되지 않는 오류가 발생했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;찾아본 결과 cupy 배열은 matplot에 적용이 되지 않는 것이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 해결하기 위해 cupy를 numpy로 바꾸는 코드를 적용하여 문제를 해결하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.cupy.dev/en/stable/reference/generated/cupy.asnumpy.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.cupy.dev/en/stable/reference/generated/cupy.asnumpy.html&lt;/a&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1621778882035&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import cupy as cp
import matplotlib.pyplot as plt

def test_function(x):
    y = x * 10
    return(y)

x = cp.array([0.1, 0.2, 0.3, 0.4, 0.5])
y = test_function(x)
print(y)

plt.plot(cp.asnumpy(y))
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>---------개인공부--------/|딥러닝(python)|</category>
      <category>convert</category>
      <category>cupy</category>
      <category>matplot</category>
      <category>numpy</category>
      <category>Python</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/327</guid>
      <comments>https://kyunstudio.tistory.com/327#entry327comment</comments>
      <pubDate>Sun, 23 May 2021 23:11:39 +0900</pubDate>
    </item>
    <item>
      <title>[cupy] 설치 및 오류 발생 대처</title>
      <link>https://kyunstudio.tistory.com/326</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #b22b31;&quot;&gt;1) 설치&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #b22b31;&quot;&gt;&lt;a href=&quot;https://docs.cupy.dev/en/latest/install.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.cupy.dev/en/latest/install.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #b22b31;&quot;&gt;2) 오류 발생&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #b22b31;&quot;&gt;(1) &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #b22b31;&quot;&gt;cupy is not correctly installed. if you are using wheel distribution (cupy-cudaxx), make sure that the version of cupy you installed matches with the version of cuda on your host. also, confirm that only one cupy package is installed: $ pip freeze if you are building cupy from source, please check your environment, uninstall cupy and reinstall it with: $ pip install cupy --no-cache-dir -vvvv&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #b22b31;&quot;&gt;이 문제에 대해서는&amp;nbsp;&lt;/span&gt;anaconda에 cupy를 따로 설치해야 할 것이라 판단하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ conda install -c conda-forge cupy&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #b22b31;&quot;&gt;CUDADriverError&lt;/span&gt;: CUDA_ERROR_UNSUPPORTED_PTX_VERSION: the provided PTX was compiled with an unsupported toolchain.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #b22b31;&quot;&gt;&lt;a href=&quot;https://forums.developer.nvidia.com/t/provided-ptx-was-compiled-with-an-unsupported-toolchain-error-using-cub/168292&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://forums.developer.nvidia.com/t/provided-ptx-was-compiled-with-an-unsupported-toolchain-error-using-cub/168292&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;드라이버 업데이트 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nvidia geforce experience를 활용, 그래픽카드 드라이버 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>---------개인공부--------/|딥러닝(python)|</category>
      <category>cupy</category>
      <category>deep learning</category>
      <category>Python</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/326</guid>
      <comments>https://kyunstudio.tistory.com/326#entry326comment</comments>
      <pubDate>Sun, 23 May 2021 16:06:41 +0900</pubDate>
    </item>
    <item>
      <title>[python] 딥러닝 - sin 곡선 예측(LSTM)</title>
      <link>https://kyunstudio.tistory.com/325</link>
      <description>&lt;table class=&quot;txc-table&quot; style=&quot;border: none; border-collapse: collapse; width: 908px;&quot; border=&quot;0&quot; width=&quot;908&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 905px; height: 45px; border-width: 0px; border-style: none; background-color: #d9e5ff;&quot; colspan=&quot;1&quot;&gt;&lt;span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 14pt;&quot;&gt;0. [python] 딥러닝&amp;nbsp; - sin 곡선 예측&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table class=&quot;txc-table&quot; style=&quot;border: none; border-collapse: collapse; width: 908px;&quot; border=&quot;0&quot; width=&quot;908&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;line-height: normal; font-size: 13px; font-family: '맑은 고딕', sans-serif; color: #000000; width: 905px; height: 47px; border-width: 0px; border-style: none; background-color: #d9e5ff;&quot; colspan=&quot;1&quot;&gt;&lt;span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 14pt;&quot;&gt;1. 풀이&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif; font-size: 12pt;&quot;&gt;1) LSTM(Long Short-Term Memory)의 구조&lt;a href=&quot;https://en.wikipedia.org/wiki/Long_short-term_memory&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;(1)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;647&quot; data-origin-height=&quot;428&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Tz99M/btq5uT3Nk9U/xR76dV5FTMb3TN3aW4HCk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Tz99M/btq5uT3Nk9U/xR76dV5FTMb3TN3aW4HCk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Tz99M/btq5uT3Nk9U/xR76dV5FTMb3TN3aW4HCk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTz99M%2Fbtq5uT3Nk9U%2FxR76dV5FTMb3TN3aW4HCk1%2Fimg.png&quot; data-origin-width=&quot;647&quot; data-origin-height=&quot;428&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif; font-size: 12pt;&quot;&gt;내부 구조는 위와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;내부에는 3개의 기억셀(c_(t-1))과&amp;nbsp; 3개의 게이트(시그모이드 함수)가 존재한다. 위의 그림을 바탕으로 시그모이드 함수는 각각 망각 게이트(Forget Gate), 입력 게이트(Input Gate), 출력 게이트(Output Gate)이다.&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;font-family: 'Noto Serif KR';&quot;&gt;(1) 망각 게이트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수식 1개&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;(2) 입력 게이트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;수식 2개&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1개는 시그모이드&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1개는 활성화 함수(하이퍼볼릭탄젠트)&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;font-family: 'Noto Serif KR';&quot;&gt;(3) 출력 게이트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1개&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif; font-size: 12pt;&quot;&gt;2) LSTM층의 순전파&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1621701791008&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# w:가중치   v:가중치   b:편향   n_upper:앞 층의 뉴런 수
# n:해당 층의 뉴런 수

w = np.random.randn(4, n_upper, n) / np.sqrt(n_upper)
v = np.random.randn(4, n, n) / np.sqrt(n)
b = np.zeros((4,n))

u = np.matmul(x, w) + np.matmul(y_prev, v) + b.reshape(4,1,-1)
        
a0 = sigmoid(u[0])        # 망각 게이트
a1 = sigmoid(u[1])        # 입력 게이트
a2 = np.tanh(u[2])        # 새로운 기억
a3 = sigmoid(u[3])        # 출력 게이트
        
c = a0*c_prev + a1*a2     # 기억 셀
y = a3*np.tanh(self.c)    # 출력&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: '맑은 고딕', sans-serif; font-size: 12pt;&quot;&gt;3) LSTM층의 역전파&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1621701961235&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# a0: 망각 게이트, a1:입력 게이트, a2:새로운 기억, a3:출력 게이트
# x:입력, y_prev:이전 시점의 출력, c:기억 셀
# grad_y:출력 기울기, grad_c: 기억 셀 기울기
# w,v: 가중치(4개의 행렬을 포함하는 배열)

tanh_c = np.tanh(c)
r = grad_c + (grad_y*a3) * (1-tanh_c**2)
        
# 각 delta
delta_a0 = r * c_prev * a0 * (1-a0)
delta_a1 = r * a2 * a1 * (1-a1)
delta_a2 = r * a1 * (1 - a2**2)
delta_a3 = grad_y * tanh_c * a3 * (1-a3)
        
deltas = np.stack((delta_a0, delta_a1, delta_a2, delta_a3))
        
# 각 파라미터의 기울기
grad_w += np.matmul(x.T, deltas)
grad_v += np.matmul(y_prev.T, deltas)
grad_b += np.sum(deltas, axis=1)
        
# x 기울기
grad_x = np.matmul(deltas, w.transpose(0,2,1))
grad_x = np.sum(grad_x, axis=0)
        
# y_prev 기울기
grad_y_prev = np.matmul(deltas, v.transpose(0,2,1))
grad_y_prev = np.sum(grad_y_prev, axis=0)
        
# c_prev 기울기
grad_c_prev = r * a0&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br style=&quot;font-family: '맑은 고딕', sans-serif; font-size: 13px;&quot; /&gt;&lt;br style=&quot;font-family: '맑은 고딕', sans-serif; font-size: 13px;&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;+) 구현하는 과정 중 반전파의&lt;/p&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;r&amp;nbsp;=&amp;nbsp;grad_c&amp;nbsp;+&amp;nbsp;(grad_y*a3)&amp;nbsp;*&amp;nbsp;(1-tanh_c**2)&lt;/p&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;코드를 (1-tanh_c**2)와 기울기의 곱을 덧셈으로 구현한 실수를 범하게 되었다.&lt;/p&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 구현한 코드를 테스트 한 결과 에러가 출력에 업데이트 되는 속도가 상당히 지연되는 것을 확인할 수 있었다.&lt;/p&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;sin함수를 활용한 경우 출력이 대략 100 epochs에서 1000 epochs으로 학습을 증가시켜야 학습이 이루어지는 것을 볼 수 있었다.&lt;/p&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;이러한 과정이 의미있는 것인지 추가적으로 다른 문제를 풀어보며 확인해보자.&lt;/p&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;이후 학습 모델이 달라지는 경우에는 학습량이 어떻게 차이나는지도 비교해보자.&lt;/p&gt;
&lt;table class=&quot;txc-table&quot; style=&quot;border: none; border-collapse: collapse; width: 919px; height: 60px;&quot; border=&quot;0&quot; width=&quot;906&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 903px; height: 48px; border-width: 0px; border-style: none; background-color: #d9e5ff;&quot; colspan=&quot;1&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2. 소스코드&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/kyun1016/deep_learning_python/blob/master/2021_05_22_LSTM/%EB%85%B8%EC%9D%B4%EC%A6%88%EA%B0%80%20%EC%B6%94%EA%B0%80%EB%90%9C%20sin%20%EA%B3%A1%EC%84%A0%EC%9D%84%20LSTM%20%EC%B8%B5%EC%9D%84%20%ED%99%9C%EC%9A%A9%ED%95%B4%20%EC%98%88%EC%B8%A1.ipynb&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/kyun1016/deep_learning_python/blob/master/2021_05_22_LSTM/%EB%85%B8%EC%9D%B4%EC%A6%88%EA%B0%80%20%EC%B6%94%EA%B0%80%EB%90%9C%20sin%20%EA%B3%A1%EC%84%A0%EC%9D%84%20LSTM%20%EC%B8%B5%EC%9D%84%20%ED%99%9C%EC%9A%A9%ED%95%B4%20%EC%98%88%EC%B8%A1.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1621702678532&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;kyun1016/deep_learning_python&quot; data-og-description=&quot;Contribute to kyun1016/deep_learning_python development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/kyun1016/deep_learning_python/blob/master/2021_05_22_LSTM/%EB%85%B8%EC%9D%B4%EC%A6%88%EA%B0%80%20%EC%B6%94%EA%B0%80%EB%90%9C%20sin%20%EA%B3%A1%EC%84%A0%EC%9D%84%20LSTM%20%EC%B8%B5%EC%9D%84%20%ED%99%9C%EC%9A%A9%ED%95%B4%20%EC%98%88%EC%B8%A1.ipynb&quot; data-og-url=&quot;https://github.com/kyun1016/deep_learning_python&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/2pbny/hyKicVOVoq/bz4zUsRUl0RF8TXkVCqZ20/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/kyun1016/deep_learning_python/blob/master/2021_05_22_LSTM/%EB%85%B8%EC%9D%B4%EC%A6%88%EA%B0%80%20%EC%B6%94%EA%B0%80%EB%90%9C%20sin%20%EA%B3%A1%EC%84%A0%EC%9D%84%20LSTM%20%EC%B8%B5%EC%9D%84%20%ED%99%9C%EC%9A%A9%ED%95%B4%20%EC%98%88%EC%B8%A1.ipynb&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/kyun1016/deep_learning_python/blob/master/2021_05_22_LSTM/%EB%85%B8%EC%9D%B4%EC%A6%88%EA%B0%80%20%EC%B6%94%EA%B0%80%EB%90%9C%20sin%20%EA%B3%A1%EC%84%A0%EC%9D%84%20LSTM%20%EC%B8%B5%EC%9D%84%20%ED%99%9C%EC%9A%A9%ED%95%B4%20%EC%98%88%EC%B8%A1.ipynb&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/2pbny/hyKicVOVoq/bz4zUsRUl0RF8TXkVCqZ20/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;kyun1016/deep_learning_python&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to kyun1016/deep_learning_python development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;table class=&quot;txc-table&quot; style=&quot;border: none; border-collapse: collapse; width: 905px;&quot; border=&quot;0&quot; width=&quot;905&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 902px; height: 48px; border-width: 0px; border-style: none; background-color: #d9e5ff;&quot; colspan=&quot;1&quot;&gt;&lt;span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;3&lt;span&gt;&lt;b&gt;. 참고&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px; margin-left: 2em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: '맑은 고딕', sans-serif;&quot;&gt;아즈마 유키나가, 최재원&amp;middot;장건희 옮김, 「핵심 딥러닝 입문 RNN, LSTM, GRU, VAE, GAN 구현」, 책만, 2020, p.166~194.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: '맑은 고딕', sans-serif;&quot;&gt;질문이나 지적 있으시면 댓글로 남겨주세요~&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-family: 'Ubuntu Condensed', 'Noto Sans Korean'; font-size: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: '맑은 고딕', sans-serif;&quot;&gt;도움 되셨으면 하트 꾹!&lt;/span&gt;&lt;/p&gt;</description>
      <category>---------개인공부--------/|딥러닝(python)|</category>
      <category>Deep</category>
      <category>Gate</category>
      <category>Learning</category>
      <category>LSTM</category>
      <category>Python</category>
      <category>게이트</category>
      <author>코린코린</author>
      <guid isPermaLink="true">https://kyunstudio.tistory.com/325</guid>
      <comments>https://kyunstudio.tistory.com/325#entry325comment</comments>
      <pubDate>Sun, 23 May 2021 01:58:09 +0900</pubDate>
    </item>
  </channel>
</rss>