<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>saka4528 님의 블로그</title>
    <link>https://saka4528.tistory.com/</link>
    <description>saka4528 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Sun, 5 Apr 2026 08:50:52 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>saka4528</managingEditor>
    <item>
      <title>TIL 2026-02-23</title>
      <link>https://saka4528.tistory.com/8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;챕터 1-1 : 코딩이란, (1)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;컴퓨터의 언어는 인간의 언어와는 다릅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;보통 사람과 사람이 소통하기 위해 사용하는 영어, 한국어 등의 언어들은 자연어라고 부르며&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;사람과 컴퓨터가 소통하기 위해 사용하는 언어를 프로그래밍 언어라고 부르며&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&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;[챕터 1-2 : Low-Level Language와 High Level Language (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;모든 컴퓨터는 프로그래밍 언어를 최종적으로 0과 1로 이루어진 기계어로 번역하여 이해합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Low-Level Language는 어셈블리어와 같이 프로그래머가 직접 메모리에 접근하고 통제하는 등의 고급 기능을 지원하며&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기계어로 변환되는 속도가 빨라지나 숙련되기 어려워 생산성이 떨어지며 비교적 심각한 오류가 발생할 확률이 높은 단점이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;High-Level Language는 C#, Python 등과 같이 쉽게 배울 수 있고, 프로그래머 친화적이나 기계어로 번역되는데 비교적 오랜 시간이 걸리는 언어들을 의미합니다.&amp;nbsp;&lt;br /&gt;이러한 언어들은 Low-Level Language와는 다르게 메모리에 대한 직접 통제가 제한적이지 생산성이 높습니다.&lt;/p&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;br /&gt;[챕터 1-3 : Compiler (1)]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 설명하였듯이 컴퓨터는 0과 1로 이루어진 기계어만을 이해하고 실행할 수 있습니다.&lt;br /&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;br /&gt;[챕터 1-4 : 프로젝트와 소스코드 생성 (1)]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Visual Studio 기준으로 가장 최상위에 있는 것이 솔루션입니다.&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;br /&gt;[챕터 1-5 : main() 함수와 printf() 함수 (1)]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 솔루션에는 복수의 함수가 존재할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분의 함수는 다른 함수에서 호출을 해 주어야 하는데 main 함수는 별도로 프로그래머가 호출할 필요 없이 시스템에서 가장 먼저 자동으로 호출해주는 함수를 뜻합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수는 시작이 되었다면 끝맺음이 있어야 합니다.&lt;br /&gt;이 끝맺음을 의미하는 것이 return 키워드 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수 내에서 콘솔화면에 무언가 출력하고 싶다면 printf 함수를 사용해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;printf 함수는 printf(&quot;문자열&quot;); 과 같은 꼴로 화면에 문자를 출력해주며&amp;nbsp;&lt;br /&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;\n(개행), \t(탭), \'(따옴표 출력) \&quot;(쌍따옴표 출력), \\(역슬래시 출력) 등이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;[챕터 1-6 : 서식지정자 (1)]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;c에서 사용자 입력을 위해 사용하는 scanf를 통해 변수에 값을 대입하거나, printf에서 고정된 값이 아닌 변수를 출력하고자 한다며&lt;br /&gt;서식지정자를 사용해야 합니다.&lt;br /&gt;대표적인 서식지정자는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;%d(10진수), %o(8진수), %s(문자열), %c(문자), %f(float형 실수) 등이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;[챕터 1-7 : 리터럴 (1)]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리터럴은 코드에 적힌 값을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정수, 실수, 문자열, 문자 등 모든 값이 각각의 리터럴이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;[챕터 1-8 : 자료형 (1)]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자료형이라 하는 것은 해당 리터럴이 어떤 타입인지를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적인 자료형은 int(정수), float(실수), double(실수), char(문자), bool(True/False 디지털 값) 등이 있습니다.&lt;/p&gt;</description>
      <author>saka4528</author>
      <guid isPermaLink="true">https://saka4528.tistory.com/8</guid>
      <comments>https://saka4528.tistory.com/8#entry8comment</comments>
      <pubDate>Mon, 23 Feb 2026 22:21:34 +0900</pubDate>
    </item>
    <item>
      <title>TIL - 2026-02-20</title>
      <link>https://saka4528.tistory.com/7</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMiTn9/dJMcajnDKud/V6N0jVy2IaA9odnivkTGV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMiTn9/dJMcajnDKud/V6N0jVy2IaA9odnivkTGV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMiTn9/dJMcajnDKud/V6N0jVy2IaA9odnivkTGV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMiTn9%2FdJMcajnDKud%2FV6N0jVy2IaA9odnivkTGV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1439&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unreal에서 새 레벨을 생성하면 위와 같이 Cube가 존재함에도 Light가 존재하지 않아 아무 것도 보이지 않는 검은 뷰포트가 보이게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때, 뷰포트에 Directional Light를 추가하게 될 경우&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZibiv/dJMcabDcSUJ/z3utXwaVHuWkxcFbjarbK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZibiv/dJMcabDcSUJ/z3utXwaVHuWkxcFbjarbK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZibiv/dJMcabDcSUJ/z3utXwaVHuWkxcFbjarbK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZibiv%2FdJMcabDcSUJ%2Fz3utXwaVHuWkxcFbjarbK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1439&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unreal의 경우&amp;nbsp;&lt;br /&gt;Directional, Point, Spot, Rect, Sky 등 4개의 Light가 존재하는데 각각&lt;br /&gt;태양광과 같은 한 점에서 비추는 전역광, 형광등과 같은 일점에서 사방으로 나가는 빛, 스포트라이트와 같이 아래를 원뿔 모양으로 쬐는 빛, Blender의 Area Light 처럼 사각형 모양으로 아래를 비추는 빛, Blender의 Enviroment Texture와 동일한 역할을 하는 전역 간접광을 의미합니다.&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;2559&quot; data-origin-height=&quot;1439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLVEGO/dJMcafey9sg/HOU1QWXZBSNEUSpP7kcB30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLVEGO/dJMcafey9sg/HOU1QWXZBSNEUSpP7kcB30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLVEGO/dJMcafey9sg/HOU1QWXZBSNEUSpP7kcB30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLVEGO%2FdJMcafey9sg%2FHOU1QWXZBSNEUSpP7kcB30%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1439&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unreal의 Light 액터에서 Intensity의 경우 Blender Light의 power와 동일하게 광량을 의미하며&amp;nbsp;&lt;br /&gt;Light Color는 해당 Light 액터가 무슨 색으로 발광할지 나타냅니다.&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;2559&quot; data-origin-height=&quot;1439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SSbn4/dJMcadVgPvS/EnQ3IcX7FRKMOUAK44fks0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SSbn4/dJMcadVgPvS/EnQ3IcX7FRKMOUAK44fks0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SSbn4/dJMcadVgPvS/EnQ3IcX7FRKMOUAK44fks0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSSbn4%2FdJMcadVgPvS%2FEnQ3IcX7FRKMOUAK44fks0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1439&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unreal에서는 Blender와 마찬가지로 Roughness 기반의 Material을 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 Blender와는 달리, 임포트 하는 텍스쳐의 파일명과 Material 노드의 어떤 핀에 연결되어 있는지를 바탕으로 자동으로 텍스쳐를 설정해 주기 때문에 Blender와 다르게 Metalness나 Normal 등의 텍스쳐를 수동으로 non-color로 지정하지 않아도 됩니다.&lt;br /&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;2559&quot; data-origin-height=&quot;1439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w3hbS/dJMcagLhWli/qymIp2rVVb4yMUgxV1PpJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w3hbS/dJMcagLhWli/qymIp2rVVb4yMUgxV1PpJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w3hbS/dJMcagLhWli/qymIp2rVVb4yMUgxV1PpJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw3hbS%2FdJMcagLhWli%2FqymIp2rVVb4yMUgxV1PpJK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1439&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&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;2559&quot; data-origin-height=&quot;1439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djBgdP/dJMcagYNtat/X0ckHngEEsIo9EAmlqplb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djBgdP/dJMcagYNtat/X0ckHngEEsIo9EAmlqplb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djBgdP/dJMcagYNtat/X0ckHngEEsIo9EAmlqplb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjBgdP%2FdJMcagYNtat%2FX0ckHngEEsIo9EAmlqplb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1439&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&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;2559&quot; data-origin-height=&quot;1439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blVhtt/dJMcagYNta2/O922n1kMVeLwof3WyKTdCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blVhtt/dJMcagYNta2/O922n1kMVeLwof3WyKTdCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blVhtt/dJMcagYNta2/O922n1kMVeLwof3WyKTdCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblVhtt%2FdJMcagYNta2%2FO922n1kMVeLwof3WyKTdCK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1439&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&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;2559&quot; data-origin-height=&quot;1439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckmNtw/dJMcagEwN9D/Zk3G1kOjfG3YvW6JKUTq9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckmNtw/dJMcagEwN9D/Zk3G1kOjfG3YvW6JKUTq9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckmNtw/dJMcagEwN9D/Zk3G1kOjfG3YvW6JKUTq9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckmNtw%2FdJMcagEwN9D%2FZk3G1kOjfG3YvW6JKUTq9k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1439&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Light Actor의 세기와 각도에 따라 그림자의 형태, 크기, 밝기가 바뀌는 것을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&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;br /&gt;마음을 굳게 먹고 하루 12시간씩 이어지는 본 캠프에 충실하게 참여하여 당초 목표로 하였던 Unreal 엔진 실무에 투입될 수 있는 인재로 거듭나도록 최선을 다하겠습니다.&lt;/p&gt;</description>
      <author>saka4528</author>
      <guid isPermaLink="true">https://saka4528.tistory.com/7</guid>
      <comments>https://saka4528.tistory.com/7#entry7comment</comments>
      <pubDate>Fri, 20 Feb 2026 18:07:21 +0900</pubDate>
    </item>
    <item>
      <title>TIL - 2026-02-19</title>
      <link>https://saka4528.tistory.com/6</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;[내일배움캠프&amp;nbsp;Unreal]&amp;nbsp;사전캠프&amp;nbsp;-&amp;nbsp;레벨&amp;nbsp;생성&amp;nbsp;및&amp;nbsp;기본&amp;nbsp;오브젝트&amp;nbsp;배치 &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;오늘&amp;nbsp;배운&amp;nbsp;개념&amp;nbsp;요약&amp;nbsp; &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unreal에서 animation을 사용하기 위해서는 애니메이션 파일 각각을 의미하는 애니메이션 시퀸스와 그런 애니메이션 시퀸스를 통합하여 관리하는 애니메이션 블루프린트가 필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unity의 경우 캐릭터 FBX 파일을 임포트 하였을 경우 Generic, Humanoic 등 Unity 내에서 사용되는 구조로 리깅을 변환하여 아바타를 생성하기 때문에 각각의 애니메이션 클립에 별도의 아바타를 지정하지 않고 여러 캐릭터가 공유하여 사용할 수 있는 것에 반해 Unreal의 애니메이션 시퀸스는 임포트 시에 해당 애니메이션을 사용하게 될 스켈레톤을 지정해 주어야만 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;애니메이션 블루프린트의 경우 Unity에서 비슷한 역할을 수행하는 애니메이션 컨트롤러와는 다르게&lt;br /&gt;기본적으로 State 기반의 애니메이션을 사용하지 않으며, State 기반 애니메이션의 경우 스테이트 머신 이라는 별도의 노드를 사용하여 적용하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블렌드 스페이스의 경우 복수의 애니메이션 시퀸스를 하나로 묶어둔 집합이라고 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 블렌드 스페이스 내에 있는 애니메이션 시퀸스의 경우 x축, y축 2가지의 변수를 통해 변화될 수 있습니다.(speed 값이 0 -&amp;gt; 중간 -&amp;gt; 높음 순에 따라 idle -&amp;gt; walk -&amp;gt; running 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단, x, y 축 변수는 애니메이션 블루프린트의 이벤트 그래프에서 생성한 변수와 연결하는 별도의 과정을 거쳐야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;2.&amp;nbsp;구현&amp;nbsp;과정&amp;nbsp;요약&amp;nbsp;(스크린샷&amp;nbsp;+&amp;nbsp;간단&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;2559&quot; data-origin-height=&quot;1439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4Y6rC/dJMcabQHy1E/hIcKYFkLGnH2B64nrhBqw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4Y6rC/dJMcabQHy1E/hIcKYFkLGnH2B64nrhBqw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4Y6rC/dJMcabQHy1E/hIcKYFkLGnH2B64nrhBqw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4Y6rC%2FdJMcabQHy1E%2FhIcKYFkLGnH2B64nrhBqw1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1439&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 먼저 Basic Level을 생성하고 저장합니다.&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;2559&quot; data-origin-height=&quot;1439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0F163/dJMcagxHydf/ErytmRFLi95lnTHT7qZWl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0F163/dJMcagxHydf/ErytmRFLi95lnTHT7qZWl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0F163/dJMcagxHydf/ErytmRFLi95lnTHT7qZWl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0F163%2FdJMcagxHydf%2FErytmRFLi95lnTHT7qZWl0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1439&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바닥 역할을 할 Cube를 추가합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biNdoT/dJMcaiI2g5U/FXV4Oo3pAq9lH6oRsLSMG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biNdoT/dJMcaiI2g5U/FXV4Oo3pAq9lH6oRsLSMG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biNdoT/dJMcaiI2g5U/FXV4Oo3pAq9lH6oRsLSMG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiNdoT%2FdJMcaiI2g5U%2FFXV4Oo3pAq9lH6oRsLSMG0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1439&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4개의 cube를 추가하여 벽을 만듭니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PZO51/dJMcacvluYx/4K9szPqy0eO3rfj33kKiG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PZO51/dJMcacvluYx/4K9szPqy0eO3rfj33kKiG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PZO51/dJMcacvluYx/4K9szPqy0eO3rfj33kKiG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPZO51%2FdJMcacvluYx%2F4K9szPqy0eO3rfj33kKiG0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1439&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cube와 Cylinder로 간단한 바 테이블과 의자를 만들어 추가합니다.&lt;/p&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. 느낀 점 &amp;amp; 개선하고 싶은 점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Blender -&amp;gt; Mixamo -&amp;gt; Unreal 로 모델을 보낼 경우&lt;br /&gt;Blender와 Unreal의 경우 xyz 좌표계를 사용하는 반면 Mixamo는 xzy 좌표계를 사용하기 때문에&lt;br /&gt;임포트 시 90도 회전하여 바닥에 누워있는 형태로 보입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 Blender에서 리깅이 완료된 fbx 파일을 임포트 하여 아마추어의 회전값을 apply 한 다음 Unreal에서 사용해야 이상이 없습니다.&lt;br /&gt;또한 Mixamo에서 해당 애니메이션이 적용될 캐릭터가 아닌, 다른 캐릭터나 Mixamo 기본 캐릭터에 애니메이션을 지정한 후 without skin으로 다운받아 Unreal에서 임포트 할 경우 스켈레톤을 다시 지정해도 목이 길어지거나, 팔다리가 얇아지는 등 오류가 발생할 수 있으므로 반드시 Mixamo에서부터 제대로 원하는 캐릭터에 애니메이션을 지정하고 다운받아야 합니다.&lt;/p&gt;</description>
      <author>saka4528</author>
      <guid isPermaLink="true">https://saka4528.tistory.com/6</guid>
      <comments>https://saka4528.tistory.com/6#entry6comment</comments>
      <pubDate>Thu, 19 Feb 2026 17:37:36 +0900</pubDate>
    </item>
    <item>
      <title>TIL  2026-02-13</title>
      <link>https://saka4528.tistory.com/5</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Unreal의 용어를 Unity를 기준으로 정리한다면&lt;br /&gt;씬 - 레벨(Persistant Level + Sub Level)&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;br /&gt;폰은 액터를 상속받았으며 Controller에 Possess되어 제어됩니다.&lt;br /&gt;캐릭터는 폰을 상속받았으며 걷거나, 달리거나, 점프하는 등 몇 가지 기능이 내제되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Capsule Collision을 기본적으로 가지고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unreal에서 카메라를 추가할 때는 Spring Arm 컴포넌트를 먼저 적용하는 것이 좋습니다.&lt;br /&gt;Spring Arm 컴포넌트는 카메라가 다른 오브젝트와 충돌하였을 경우 캐릭터와 카메라 간의 거리를 줄여 다른 오브젝트에 카메라가&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;게임 시작 시에 플레이어 Character에 자동으로 Possess 되게 하기 위해선 오른쪽 하단 Details 탭에서 Pawn - Auto Possess - Player 0&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;br /&gt;Input Action과 Input Mapping Context가 둘 다 필요합니다.&lt;br /&gt;(Input Action은 마우스/키보드 등의 입력을 받아들이는 역할, Mapping Context는 Input Action을 특정 버튼이나 키에 바인딩)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엘더스크롤 V: 스카이림 식 카메라 회전 및 이동을 구현하기 위해선&amp;nbsp;&lt;br /&gt;Character 블루프린트 클래스 - Details - Pawn 에서 rotation pitch / yaw / roll 전부 비활성화 한 후&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Character Movement - Details - Rotation - Use Controller Desired Rotation 체크&lt;br /&gt;Spring Arm - Details - Camera Settings - Use Pawn control Rotation 체크&lt;/p&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;Unreal Asset(.uasset)의 경우 Unity의 Asset Store처럼 Epic Games에서 직접 운영하는 Fab과 기타 외부 스토어에서 구매할 수 있습니다.&lt;br /&gt;&lt;br /&gt;에셋을 활용할 시 개발자가 직접 준비하기 어렵거나, 오랜 시간이 걸리는 리소스(이미지, 3d 모델, Levrel 등등) 을 쉽고 빠르게 준비할 수 있어 개발 시간을 단축해 줍니다.&lt;/p&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;가장 먼저 Fab에서 에셋을 선택해 다운로드 받습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-02-13 145618.png&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nXXsV/dJMcadVcV8r/A5e96wIUckANmqPI3PUFaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nXXsV/dJMcadVcV8r/A5e96wIUckANmqPI3PUFaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nXXsV/dJMcadVcV8r/A5e96wIUckANmqPI3PUFaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnXXsV%2FdJMcadVcV8r%2FA5e96wIUckANmqPI3PUFaK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1439&quot; data-filename=&quot;스크린샷 2026-02-13 145618.png&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&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;그 후 Add to Project 버튼을 눌러 프로젝트에 임포트 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-02-13 145709.png&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ch0OvL/dJMcac25aPE/x4KzIKsNxSgznnqHzqfJJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ch0OvL/dJMcac25aPE/x4KzIKsNxSgznnqHzqfJJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ch0OvL/dJMcac25aPE/x4KzIKsNxSgznnqHzqfJJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fch0OvL%2FdJMcac25aPE%2Fx4KzIKsNxSgznnqHzqfJJk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1439&quot; data-filename=&quot;스크린샷 2026-02-13 145709.png&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&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;제가 선택한 에셋의 경우 루트 폴더인 Soul City 아래에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;캐릭터, 흔들리는 풀, 깜박이는 불 들을 포함한 Blueprints 폴더&lt;br /&gt;여러 VFX 들을 담은 Effects(+EffectsMobileOpt) 폴더&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;material 과 mesh, texture들을 포함한 Enviroment(+ Landscape, Level content) 폴더&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미리 액터들을 전부 배치해둔 Level들을 담은 Maps 폴더&lt;br /&gt;SFX를 포함한 Sounds 폴더로 구성되어 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-02-13 150543.png&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EV1da/dJMcahwBn9B/zfReU0VaKEWUKgCmqqnv60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EV1da/dJMcahwBn9B/zfReU0VaKEWUKgCmqqnv60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EV1da/dJMcahwBn9B/zfReU0VaKEWUKgCmqqnv60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEV1da%2FdJMcahwBn9B%2FzfReU0VaKEWUKgCmqqnv60%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1439&quot; data-filename=&quot;스크린샷 2026-02-13 150543.png&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&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;아래는 해당 에셋을 이용하여 만든 Level 스크린 샷입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;-&amp;nbsp;어떤&amp;nbsp;플랫폼에서&amp;nbsp;어떤&amp;nbsp;에셋을&amp;nbsp;사용했는지&amp;nbsp;간단히&amp;nbsp;서술&amp;nbsp;(예:&amp;nbsp;Quixel&amp;nbsp;/&amp;nbsp;Broken&amp;nbsp;Bench&amp;nbsp;/&amp;nbsp;ID:&amp;nbsp;215332) &lt;br /&gt;-&amp;nbsp;폴더&amp;nbsp;구조에&amp;nbsp;대한&amp;nbsp;설명&amp;nbsp;필수&amp;nbsp;포함 &lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-02-13 153704.png&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAac30/dJMcahDkDIa/b7qFd5VjNJZpdiC7vL9Wg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAac30/dJMcahDkDIa/b7qFd5VjNJZpdiC7vL9Wg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAac30/dJMcahDkDIa/b7qFd5VjNJZpdiC7vL9Wg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAac30%2FdJMcahDkDIa%2Fb7qFd5VjNJZpdiC7vL9Wg0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1439&quot; data-filename=&quot;스크린샷 2026-02-13 153704.png&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;3.&amp;nbsp;느낀&amp;nbsp;점&amp;nbsp;&amp;amp;&amp;nbsp;개선하고&amp;nbsp;싶은&amp;nbsp;점 &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3d 게임 개발을 Unity + Blender로 학습한 저의 기준에서 Unreal에서 사용하는 용어가 Blender/Unity에서 사용하는 용어와 다소 차이가 있어 혼란스러웠으나 대부분의 개념이 1:1로 대응하며 이름만 다르고 기능적으로 동일하다는 것을 알 수 있었습니다.&lt;br /&gt;그러나&amp;nbsp; Texture를 수정하기 위해 더블클릭을 했을 때 시스템에서 사용하는 이미지 편집기 내지는 포토샵과 같은 그래픽 툴이 아닌 Unreal 내부 페이지가 뜨는 탓에 Unity 처럼 자동으로 그래픽 툴로 연결되도록 하는 On / Off 기능이 있었으면 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>saka4528</author>
      <guid isPermaLink="true">https://saka4528.tistory.com/5</guid>
      <comments>https://saka4528.tistory.com/5#entry5comment</comments>
      <pubDate>Fri, 13 Feb 2026 18:00:27 +0900</pubDate>
    </item>
    <item>
      <title>TIL - 2026-02-11</title>
      <link>https://saka4528.tistory.com/4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;개인 플레이 및 분석&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;선택한 게임의 이름은 무엇인가요? &lt;br /&gt;Zone064&lt;/li&gt;
&lt;li&gt;선택한 게임의 장르는 무엇인가요? &lt;br /&gt;협동 로그라이크&lt;/li&gt;
&lt;li&gt;선택한 게임의 어떤 시스템에 집중하셨나요? &lt;br /&gt;전투 / 파밍 페이즈&lt;/li&gt;
&lt;li&gt;인상 깊거나 불편했던 &lt;b&gt;상호작용 장면 3개 이상&lt;/b&gt; 공유해주세요&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Still 2026-02-11 181229_1.1.1.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bP0YTK/dJMcagdnzdN/kkr9Tid51zSyxw1k32BJO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bP0YTK/dJMcagdnzdN/kkr9Tid51zSyxw1k32BJO1/img.png&quot; data-alt=&quot;꿇어 앉기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bP0YTK/dJMcagdnzdN/kkr9Tid51zSyxw1k32BJO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbP0YTK%2FdJMcagdnzdN%2Fkkr9Tid51zSyxw1k32BJO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;Still 2026-02-11 181229_1.1.1.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;꿇어 앉기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Still 2026-02-11 181229_1.2.1.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBd2aw/dJMcaaKYBQ5/KNVPUCsQijRWwtkGeIrWB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBd2aw/dJMcaaKYBQ5/KNVPUCsQijRWwtkGeIrWB0/img.png&quot; data-alt=&quot;상호작용(무기 획득)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBd2aw/dJMcaaKYBQ5/KNVPUCsQijRWwtkGeIrWB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBd2aw%2FdJMcaaKYBQ5%2FKNVPUCsQijRWwtkGeIrWB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;Still 2026-02-11 181229_1.2.1.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;상호작용(무기 획득)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Still 2026-02-11 181229_1.3.1.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCSULk/dJMb99SPH9I/MBlMFvwicDKEIHoKR0kWkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCSULk/dJMb99SPH9I/MBlMFvwicDKEIHoKR0kWkk/img.png&quot; data-alt=&quot;무기 착용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCSULk/dJMb99SPH9I/MBlMFvwicDKEIHoKR0kWkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCSULk%2FdJMb99SPH9I%2FMBlMFvwicDKEIHoKR0kWkk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;Still 2026-02-11 181229_1.3.1.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;무기 착용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Still 2026-02-11 181229_1.3.2.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dsG7YV/dJMcaaRL7Us/A1bQ3Eowq0KksBUxSgor7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dsG7YV/dJMcaaRL7Us/A1bQ3Eowq0KksBUxSgor7k/img.png&quot; data-alt=&quot;구르기(회피)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dsG7YV/dJMcaaRL7Us/A1bQ3Eowq0KksBUxSgor7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdsG7YV%2FdJMcaaRL7Us%2FA1bQ3Eowq0KksBUxSgor7k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;Still 2026-02-11 181229_1.3.2.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;구르기(회피)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 선택한 &lt;b&gt;핵심 상호작용 3개&lt;/b&gt;를 중심으로 분석&lt;/p&gt;
&lt;table id=&quot;f86cf0d7-c437-4208-a949-4947c924ec27&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;0c1e7973-1ec0-4895-a75a-659232155490&quot;&gt;
&lt;td id=&quot;;]nm&quot;&gt;&lt;b&gt;상호작용 사례&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;D=v^&quot;&gt;&lt;b&gt;시스템 반응&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;&amp;#96;&amp;#96;sW&quot;&gt;&lt;b&gt;의도/효과 분석&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;fZEd&quot;&gt;&lt;b&gt;개선 포인트&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;3980c2d2-9ab4-40e2-b74c-7a969be717f2&quot;&gt;
&lt;td id=&quot;;]nm&quot;&gt;조사&lt;/td&gt;
&lt;td id=&quot;D=v^&quot;&gt;조사 대상 인벤토리 / 플레이어 인벤토리 열림&lt;/td&gt;
&lt;td id=&quot;&amp;#96;&amp;#96;sW&quot;&gt;추가 파밍 및 탈출을 위한 물자 보급&lt;br /&gt;그러나 튜토리얼이 없어 모르고 지나칠 가능성 있음&lt;/td&gt;
&lt;td id=&quot;fZEd&quot;&gt;E키를 눌러 상호작용 과 같은 가이드 UI 추가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;4fe08e52-0ebf-49aa-868c-3006b76cd9f2&quot;&gt;
&lt;td id=&quot;;]nm&quot;&gt;무기 착용 후&lt;br /&gt;클릭&lt;/td&gt;
&lt;td id=&quot;D=v^&quot;&gt;무기 휘두르기&lt;/td&gt;
&lt;td id=&quot;&amp;#96;&amp;#96;sW&quot;&gt;좀비 및 적대적 생존자 제거&lt;br /&gt;그러나 클릭 시 바로 작동하지 않고 실제 행동까지 딜레이 존재&lt;/td&gt;
&lt;td id=&quot;fZEd&quot;&gt;인풋렉 삭제 or 시스템의 일종으로 유저에게 사전 고지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;3042dc3e-f514-8073-8534-ce5c7ad7afa4&quot;&gt;
&lt;td id=&quot;;]nm&quot;&gt;구르기&lt;/td&gt;
&lt;td id=&quot;D=v^&quot;&gt;굴러서 공격 회피 및 장거리 이동&lt;/td&gt;
&lt;td id=&quot;&amp;#96;&amp;#96;sW&quot;&gt;좀비에게 둘러 쌓였을 때 긴급회피 + 카이팅 시 거리 유지&lt;/td&gt;
&lt;td id=&quot;fZEd&quot;&gt;스테미나 소모량 조&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 상호작용 사례 시스템 반응 의도/효과 분석 개선 포인트&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;게임의 핵심 시스템이 동작하는 구조의 시작부터 과정을 최대한 자세하게 분석, 나열해주세요! &lt;br /&gt;가) 랜덤 이벤트 페이즈 종료 후 로딩 로딩 과정에서 플레이어가 스폰될 맵 생성 &lt;br /&gt;나) 차량과 좀비, 기타 NPC 생성 &lt;br /&gt;다) 플레이어 스폰 라) 차량 내에 적재되어 있는 기본 아이템 습득 &lt;br /&gt;라) 파밍 개시 &lt;br /&gt;마) 연료 확보 &lt;br /&gt;바) 주유 및 야영지로 이동&lt;/li&gt;
&lt;li&gt;직접 분석해본 내용 중 가장 핵심이 되는 구성 요소는 무엇이라 생각하나요?&lt;br /&gt;ALT 키를 활용한 앉기 및 C 키를 활용한 구르기. 플레이어의 수에 비해 좀비의 수가 압도적으로 많으며 플레이어가 스폰된 구역 바로 옆에 좀비 역시 같이 스폰되어 있으므로 ALT를 이용해 소음을 억제하고 차량에서 나무판자(기본 무기)를 획득한 후 구르기를 활용해 좀비와 거리를 유지하며 카이팅하여 제거하고 안전구역을 확보. 이 안전구역을 확장해 나가며 추가 파밍을 진행하는 것이 전투 / 파밍 페이즈의 최종 목적인 야영지로의 탈출을 달성하는 데 핵심적인 요소라고 생각합니다.&lt;/li&gt;
&lt;/ol&gt;</description>
      <author>saka4528</author>
      <guid isPermaLink="true">https://saka4528.tistory.com/4</guid>
      <comments>https://saka4528.tistory.com/4#entry4comment</comments>
      <pubDate>Wed, 11 Feb 2026 18:16:03 +0900</pubDate>
    </item>
    <item>
      <title>TIL 2026-02-10</title>
      <link>https://saka4528.tistory.com/3</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Unreal 에서 Character Actor 에 카메라를 달아줄 경우 Spring Arm 컴포넌트를 먼저 추가하고 그 자식으로 카메라를 추가하여야 합니다. Spring Arm의 자식으로 카메라를 추가한 경우 카메라 뒤에 있던 오브젝트가 캐릭터의 이동으로 카메라와 캐릭터 사이에 위치하게 될 경우 길이가 줄어들어 카메라를 캐릭터에 가까운 위치로 이동시켜 시야가 가려지는 일을 방지해 줍니다.&lt;br /&gt;&lt;br /&gt;Spring Arm 컴포넌트의 자식일 경우&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HDo4i/dJMcagj6Ira/p5Ke4di4urKGVpfaTZh2Nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HDo4i/dJMcagj6Ira/p5Ke4di4urKGVpfaTZh2Nk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HDo4i/dJMcagj6Ira/p5Ke4di4urKGVpfaTZh2Nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHDo4i%2FdJMcagj6Ira%2Fp5Ke4di4urKGVpfaTZh2Nk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1439&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아닐 경우&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcihWC/dJMcac23K5C/0iWT0SkbcRwKBJ2SVAioNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcihWC/dJMcac23K5C/0iWT0SkbcRwKBJ2SVAioNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcihWC/dJMcac23K5C/0iWT0SkbcRwKBJ2SVAioNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcihWC%2FdJMcac23K5C%2F0iWT0SkbcRwKBJ2SVAioNK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1439&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[퀘스트]&lt;/p&gt;
&lt;div data-block-id=&quot;2952dc3e-f514-8165-b864-d38af87d3b24&quot;&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-block-id=&quot;2952dc3e-f514-8165-b864-d38af87d3b24&quot;&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 선택한 게임의 이름은?&lt;br /&gt;XCOM 2&lt;br /&gt;2.&amp;nbsp;선택한&amp;nbsp;게임의&amp;nbsp;장르는&amp;nbsp;무엇인가요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;턴제 전략 시뮬레이션&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.&amp;nbsp;선택한&amp;nbsp;게임의&amp;nbsp;어떤&amp;nbsp;시스템에&amp;nbsp;집중하셨나요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;캐릭터의 이동과 장애물 상호작용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;4.&amp;nbsp;해당&amp;nbsp;시스템이&amp;nbsp;동작하는&amp;nbsp;구조의&amp;nbsp;시작부터&amp;nbsp;과정을&amp;nbsp;자세하게&amp;nbsp;분석,&amp;nbsp;나열해봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4-1. 플레이어의 차례가 돌아왔을 경우 게임 시스템은 플레이어가 해당 스테이지에 배치한 아군 캐릭터를 선택합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;4-3. 각 캐릭터는 이동력이라는 스테이터스를 보유하고 있으며, 이 스테이터스의 고저에 따라 한 번에 이동할 수 있는 거리가 결정됩니다. 거리 계산의 경우 현재 캐릭터가 서 있는 타일까지의 거리를 0칸으로 간주하고 해당 칸의 상하좌우에 해당하는 타일을 거리 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;4-4. 각 캐릭터는 기본적으로 2의 행동 포인트를 가지며, 4-3 과정에서 계산한 타일은 1의 행동력을 사용하여 이동할 수 있는 타일들이므로 파란색 그리드를 그립니다. 이후 행동력 1로 이동할 수 있는 가장 먼 타일들을 기준으로 4-3 과정을 한 차례 더 시행하고 그 결과는 행동력 2를 전부 사용하였을 때 이동할 수 있는 거리이므로 노란색 그리드를 표시합니다.&lt;/p&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-5 플레이어가 그리드를 우클릭 했을 경우 캐릭터는 해당 타일로 이동할 수 있는 최단 거리를 선택해 이동합니다.&lt;br /&gt;만약 지나가는 과정에서 유리창이나 문과 같이 상호작용을 통해 제거할 수 있는 장애물이 있다면 깨뜨리거나 열고 이동합니다. 이때 소음이 발생합니다.&amp;nbsp;&lt;br /&gt;(CTRL 키를 이용해 플레이어가 직접 경로를 설정하였을 경우, 중간 웨이포인트를 설정한 즉시 4-3 을 재실행하여 그리드를 새로 고칩니다)&lt;/p&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-6. 만약 행동력이 남았다면 4-3 과정을 재실행하여 이동 가능한 그리드를 다시 그립니다.&lt;/p&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-7. 캐릭터가 엄폐물 뒤에 숨었을 경우 소프트 커버 / 하드 커버 중 해당 엄폐물에 해당하는 쪽을 선택하여 캐릭터의 엄폐율을 조정합니다.&lt;/p&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.&amp;nbsp;직접&amp;nbsp;분석해본&amp;nbsp;내용&amp;nbsp;중&amp;nbsp;가장&amp;nbsp;핵심이&amp;nbsp;되는&amp;nbsp;구성&amp;nbsp;요소는&amp;nbsp;무엇이라&amp;nbsp;생각하나요?&amp;nbsp;예시)&amp;nbsp;총알과&amp;nbsp;구조물,&amp;nbsp;적과의&amp;nbsp;충돌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사각형 타일 구조의 스테이지 내에서 이동을 구현하는 것 자체는 어렵지 않으나 XCOM2 같은 경우는 일반적인 SRPG 게임과 달리 그리드의 새로고침이 빈번합니다. 따라서 기능 구현 뿐 아닌 최적화에도 신경을 써서 알고리즘을 설계해야하므로 가장 핵심이 되는 구성요소라고 생각합니다.&lt;/p&gt;</description>
      <author>saka4528</author>
      <guid isPermaLink="true">https://saka4528.tistory.com/3</guid>
      <comments>https://saka4528.tistory.com/3#entry3comment</comments>
      <pubDate>Tue, 10 Feb 2026 17:43:49 +0900</pubDate>
    </item>
    <item>
      <title>TIL - 2026-02-09</title>
      <link>https://saka4528.tistory.com/2</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. Unreal Engine 5에서 &quot;프로젝트 생성&quot; 단계의 주요 흐름은?&lt;/p&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;br /&gt;빌드된 결과물이 구동될 플랫폼, 그래픽 품질, 블루프린트를 선택했다면 블루프린트의 프리셋(Combat, Platforming, Side scroller, All 등), 프로젝트 경로와 프로젝트명을 각각 설정한 후 프로젝트를 생성하게 됩니다.&lt;/p&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;background-color: #ffffff; color: #37352f; text-align: left;&quot;&gt;2. &quot;에디터 인터페이스&quot;의 핵심 요소 3가지는?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에디터 인터페이스라 함은 게임 유저가 보는 GUI 화면을 의미하는 게임 인터페이스와는 별개로, 게임 개발자가 보게 되는&lt;br /&gt;게임 엔진 GUI를 의미합니다.&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;3. Unreal Engine에서 &quot;Actor&quot;란 무엇이며, 어떤 역할을 수행?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Actor는 레벨 안에 직접적으로 배치될 수 있는 모든 것을 의미하는 용어입니다.&lt;br /&gt;PC(Playable Character)와 NPC(Non-Playable Character)는 물론 배경 소품과 라이트, 카메라까지도 전부 Actor에 포함됩니다.&lt;br /&gt;단순히 배치되는 것을 너머 직접적으로 조종되어야 한다면 이런 Actor를 상속받은 Pawn을, 이동 로직까지 필요하다면 Pawn을 다시 상속받은 Character를 사용하면 됩니다.&lt;/p&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;div style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-block-id=&quot;2952dc3e-f514-8167-978d-eddfa539dc12&quot;&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;div&gt;
&lt;div data-block-id=&quot;2952dc3e-f514-817e-a6b8-d9273a75dfba&quot;&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-block-id=&quot;2952dc3e-f514-81fa-b6f3-fe7a78837c50&quot;&gt;실습 내용&lt;br /&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjo5Ou/dJMcacvgQfp/GB2e5NMLB82MW78IjTMQvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjo5Ou/dJMcacvgQfp/GB2e5NMLB82MW78IjTMQvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjo5Ou/dJMcacvgQfp/GB2e5NMLB82MW78IjTMQvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbjo5Ou%2FdJMcacvgQfp%2FGB2e5NMLB82MW78IjTMQvk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1439&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;D드라이브에 Blank 템플릿과 블루프린트를 사용하는 MyProject1 을 생성합니다.&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;2559&quot; data-origin-height=&quot;1439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vuKex/dJMcaaYuqPF/k4f5SaM9mghqPPdSeSVQf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vuKex/dJMcaaYuqPF/k4f5SaM9mghqPPdSeSVQf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vuKex/dJMcaaYuqPF/k4f5SaM9mghqPPdSeSVQf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvuKex%2FdJMcaaYuqPF%2Fk4f5SaM9mghqPPdSeSVQf1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1439&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1439&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;기본 오브젝트 중 하나인 Cube를 배치했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cube의 Detail 속성에는&lt;br /&gt;오브젝트의 위치, 회전값, 크기를 의미하는 Transform&amp;nbsp;&lt;br /&gt;레벨에서 특정 3D 메시를 표현할 때 사용하는 Actor인 Static Mesh&lt;br /&gt;물체의 표면 재질을 의미하는 Material&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;490&quot; data-origin-height=&quot;422&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dtiwce/dJMcac9Nvhe/oyiyjnDkYsKPhnmAxcF3b0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dtiwce/dJMcac9Nvhe/oyiyjnDkYsKPhnmAxcF3b0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dtiwce/dJMcac9Nvhe/oyiyjnDkYsKPhnmAxcF3b0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdtiwce%2FdJMcac9Nvhe%2FoyiyjnDkYsKPhnmAxcF3b0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;490&quot; height=&quot;422&quot; data-origin-width=&quot;490&quot; data-origin-height=&quot;422&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물리 연산 시에 사용하는 Physics&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;496&quot; data-origin-height=&quot;285&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cg3o5W/dJMcaioIbAY/pdRQFtSOs6VdgWKecbmdak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cg3o5W/dJMcaioIbAY/pdRQFtSOs6VdgWKecbmdak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cg3o5W/dJMcaioIbAY/pdRQFtSOs6VdgWKecbmdak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcg3o5W%2FdJMcaioIbAY%2FpdRQFtSOs6VdgWKecbmdak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;496&quot; height=&quot;285&quot; data-origin-width=&quot;496&quot; data-origin-height=&quot;285&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;충돌 판정 시에 사용하는 Collision 등이 있는 것을 알 수 있습니다.&lt;/p&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>
      <author>saka4528</author>
      <guid isPermaLink="true">https://saka4528.tistory.com/2</guid>
      <comments>https://saka4528.tistory.com/2#entry2comment</comments>
      <pubDate>Mon, 9 Feb 2026 17:40:58 +0900</pubDate>
    </item>
    <item>
      <title>TIL - 2026. 02. 06</title>
      <link>https://saka4528.tistory.com/1</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1-1. 게임 엔진이란 무엇인가&lt;br /&gt;게임 엔진은 간단히 말해 컴퓨터 소프트웨어의 일종인 게임을 개발할 때 사용하게 되는 소프트웨어입니다.&lt;br /&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;5. 스크립트 관리&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가 있습니다.&lt;br /&gt;&lt;br /&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;1-2. &lt;span style=&quot;background-color: #ffffff; color: #37352f; text-align: left;&quot;&gt;Unreal Engine의 주요 기능&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;언리얼을 사용한 대표적인 게임인 XCOM2를 예시로 들어 설명하자면&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 개발자가 구현해놓은 게임 속 환경을 유저의 pc 화면에 표시하기 위한 3d 렌더링 파이프라인(그래픽 렌더링)&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. 마우스 휠로 화며을 확대/축소하고 SHIFT 키로 조작 캐릭터를 변경하는 유지 입력 처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 각 캐릭터와 배경 으브젝트의 3d 모델, UI 버튼에 연결된 이미지와 같은 리소스를 추가/삭제/변경하는 리소스 관리&lt;br /&gt;5. 캐릭터가 선택되었을 시 이동 그리드를 보여주고, UI 버튼을 띄우며 또 각각의 버튼을 눌렀을 때 무슨 일이 벌어질지부터 시작해서 적들의 AI, 사격시의 명중/빗나감 판정과 같은 로직들을 구현하는데 필요한 스크립트를 작성하고, 연결하고, 삭제하는 스크립트 관리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;와 같은 기능이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1-3. Unreal의 장점과 단점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현대 게임 개발 시장에서의 독자 엔진을 사용하지 않는 예외를 제외한다면 대부분의 경우&amp;nbsp; 2U라고 불리는 Unity와 Unreal을 게임 엔진으로 채택하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 Unity와 비교하여 Unreal의 장점을 설명하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 강력한 실시간 렌더링 파이프라인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unreal은 게임 개발 엔진을 너머 제한적이게나마 상용 렌더링 엔진으로써도 사용될 정도로 높은 수준의 그래픽 퀄리티를 보여줍니다.&lt;br /&gt;Unity의 경우 URP나 HDRP와 같이 기존의 빌트-인 파이프라인 대비 성능과 퀄리티 면에서 개선된 렌더 파이프라인을 제공하고 있으나 Unreal에 비해 그래픽 퀄리티 면에서 뒤쳐지는 경우가 많습니다.&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;2. 카오스 피직스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unity의 경우 일반적인 Rigidbody + Collider를 이용하여 물체 간의 충돌을 구현할 경우&amp;nbsp;&lt;br /&gt;충돌해오는 물체의 속도가 일정 수준을 넘을 경우 충돌되는 물체를 관통하여 뚫고 이동하는 뚫림 현상이 빈발하곤 합니다.&lt;br /&gt;따라서 맵에서 벗어나선 안될 벽이나 차량처럼 고속 이동하는 물체의 경우 Raycast라는 스크립트 단위의 충돌 판정이 필요합니다.&lt;br /&gt;그러나 Unreal에서 사용되는 카오스 피직스는 Unity가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Collider 컴포넌트를 가진 오브젝트가 1프레임 동한 이동했을 때 다른 Collider의 영역과 겹쳐졌는지 여부를 통해 충돌을 판정, 즉 우선 이동한 이후 충돌을 판정하는 것과 달리 이동 도중 충돌이 발생했을 시 이동을 멈추는 방식이기에&lt;br /&gt;뚫림 현상에서 비교적 자유롭습니다.&lt;br /&gt;&lt;br /&gt;3. BluePrint&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unity에도 비주얼 스크립팅 툴이라는 이름으로 비슷한 기능을 지원하는 것은 사실이지만 시기적으로 Unreal의 블루프린트가 보다 앞서서 업데이트 되었습니다.&lt;/p&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 data-ke-size=&quot;size16&quot;&gt;Unity의 경우 C#을 기반으로 한 MonoScript를 사용하여 C++ 기반인 Unreal에 비해 메모리 관리에서 취약한 모습을 보이며 멀티 쓰레딩 지원을 고려하지 않고 설계된 엔진이기에 복잡한 로직을 처리할 때 멀티 쓰레딩을 전제로 개발된 Unreal이 퍼포먼스적으로 보다 우세한 모습을 보여줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단점의 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 입문자용 튜토리얼의 부재&lt;br /&gt;Unity의 경우 Unreal에 비해 설치 및 구동에 필요로 하는 리소스가 적으며 유저 커뮤니티가 활발하여 입문자 입장에서 양질의 강의와 튜토리얼에 쉽게 접근할 수 있습니다.&lt;br /&gt;반면 Unreal의 경우 모바일 게임 개발에 주로 쓰인다는 인식이 있는 Unity에 비해 AAA급 게임 개발에 쓰이는 고급 엔진이라는 인식으로 인해 입문하려 하는 인원이 적어 이들을 위한 튜토리얼이 상대적으로 부실한 편입니다.&lt;br /&gt;&lt;br /&gt;2. C++ 기반 스크립팅&lt;br /&gt;Unity의 경우 스크립팅 시에 C#을 사용하기에 기본적으로 보다 쉽게 배우고 실무에 투입되기 위한 알고리즘 학습과 컴포넌트의 역할 등에 관한 심화 과정으로 빠르게 넘어갈 수 있으나 Unreal은 C++ 기반이여 기초 단계의 학습에 보다 오랜 시간이 걸립니다.&lt;br /&gt;&lt;br /&gt;3. 크래시 취약&lt;br /&gt;Unreal로 개발된 게임의 경우 CPU나 GPU와 같은 하드웨어의 스펙에 큰 영향을 받습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일부 세대 CPU의 특정 버전 드라이버 설치 시에는 아예 실행이 되지 않거나 정상 작동하지 않는 버그 역시 보고되어 있어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unity에 비해 개발자가 통제하고 예방할 수 없는 크래시가 쉽게 발생합니다.&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;2-1. 레벨은 게임의 구성 요소에서 어떤 역할을 하는가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unreal의 레벨은 게임에서 진행되는 스테이지 하나와 매칭되는 개념입니다.&lt;br /&gt;단, 일반적으로 게임에서 스테이지라고 불리는 개념이 그 스테이지를 구성하고 있는 모든 요소(라이팅, 지형 등)을 모두 통틀어서 지칭하는 개념인 것에 비해 Unreal에서 사용하는 Level은 Persistent Level이라고 불리는 하나의 메인 레벨과 기능적 목적을 위해 분리된 여러개의 Sub-Level로 구성되어 있습니다.&lt;/p&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-2 Unreal Engine에서 사용하는 게임 레벨(Level)의 주요 구성 요소(World, Actor, Light, Camera 등)의 역할을 설명하라&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;월드라 함은 하나의 스테이지를 만들기 위해 Unreal 측에서 제공된 공간을 뜻합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 월드 안에 상술한 Persistent Level과 여러 개의 Sub-Level이 포함되어 하나의 스테이지를 구성하게 됩니다.&lt;br /&gt;&lt;br /&gt;액터는 Level 안에 직접적으로 배치되는 오브젝트 전반을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;XYZ 축으로 해당 액터의 위치, 회전값, 크기를 나타내는 Transform을 가지고 Unreal에서 제공하는 다양한 Component를 해당 액터에 적용하여 기능을 구현할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라이트의 경우 액터의 종류중 하나로써 이름 그대로 광원을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;태양광을 의미하는 Directional, 현실의 스포트라이트에 대응되는 Spot, 전구처럼 제자리에서 빛을 내는 Point, 직사각형 형태의 광원인 Rect 등이 있습니다.&lt;/p&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;br /&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>
      <author>saka4528</author>
      <guid isPermaLink="true">https://saka4528.tistory.com/1</guid>
      <comments>https://saka4528.tistory.com/1#entry1comment</comments>
      <pubDate>Fri, 6 Feb 2026 18:15:42 +0900</pubDate>
    </item>
  </channel>
</rss>