💻 Code : https://github.com/tedison7/ArenaBattle 애니메이션 블루프린트 언리얼 엔진에서는 애니메이션 시스템 제작 도구인 애니메이션 블루프린트를 제공한다. 애님 인스턴스(Anim Instance) : 스켈레탈 메시를 소유하는 폰의 정보를 받아 애님 그래프가 참조할 데이터를 제공 (BP, C++) 애님 그래프 (Anim Graph) : 애님 인스턴스의 변수 값에 따라 변화하는 애니메이션 시스템을 설계하는 공간 (BP) C++로 애님 인스턴스를 제작하여 속력 값을 저장하고 애님 그래프에서는 이 값을 가지고 IDLE, RUN 애니메이션을 재생하도록 해보자 이후 이전에 생성해놓은 WarriorAnimBlueprint 애셋에서 부모 클래스를 ABAnimInstance로 변경하고..
💻 Code : https://github.com/tedison7/ArenaBattle 캐릭터 모델 Character 클래스를 부모로하는 ABCharacter 클래스를 생성한다. ACharacter 는 APawn 클래스를 상속 받고 있다. 앞서 실습한 ABPawn과 동일하게 Capsule 컴포넌트, SkeletalMesh 컴포넌트를 사용하고 있으며, CharacterMovement 라는 컴포넌트를 사용하여 움직임을 관리한다. 게임 모드에 기본 폰으로 설정하자 캐릭터 모델은 캐릭터 무브먼트(CharacterMovement) 컴포넌트를 사용하는데 이는 FloatingPawnMovement에 비해 다음과 같은 장점을 가진다. 점프와 같은 중력을 반영한 움직임을 제공 다양한 움직임 설정. 걷기, 기어가기, 날기..
💻 Code : https://github.com/tedison7/ArenaBattle 폰의 구성요소 기본적인 인간형 폰을 제작하기 위해 고려할 요소는 다음과 같다. 시각적 요소 : 애니메이션 기능을 가지고 있는 스켈레탈 메시 컴포넌트. 애니메이션을 재생하도록 리깅(Rigging)데이터를 추가한 메시를 스켈레탈 메시라고 하며 이를 관리하는 컴포넌트가 스켈레탈 메시 컴포넌트다. 충돌 요소 : 인간형의 경우 일반적으로 캡슐 컴포넌트를 사용한다. 움직임 요소 : 폰 무브 컴포넌트를 사용한다. FloatingPawnMovement와 CharacterMovement 두가지가 있다. 내비게이션(Navigation) : 폰은 엔진의 내비게이션 시스템과 연동되어 스스로 목적지까지 이동하는 길찾기 기능을 가지고 있다. ..
💻 Code : https://github.com/tedison7/ArenaBattle 게임 모드 게임모드(Game Mode)는 게임의 규칙을 정하고, 게임의 틀을 잡아주는 역할을 한다. 폰(Pawn)은 플레이어가 조종할 수 있는 액터를 뜻한다. 게임모드와 폰을 직접 제작해보자. 기존 Step1 레벨을 다른이름으로 저장 기능을 통해 Step2로 저장 GameModeBase 클래스를 부모로하는 ABGameMode 클래스를 생성 Pawn 클래스를 부모로하는 ABPawn 클래스를 생성 Step2 레벨에서 월드세팅에 GameMode Override 항목을 생성한 ABGameMode로 선택 플레이 버튼을 눌러보면 월드 아웃라이너에 ABGameMode와 DefaultPawn이 생성됨을 확인 ABGameMode의 코..
💻 Code : https://github.com/tedison7/ArenaBattle 로깅 환경의 설정 출력 로그 윈도우 언리얼 엔진은 로그(Log) 환경을 위해 UE_LOG 라는 매크로를 제공하고 있다. UE_LOG(카테고리, 로깅수준, 형식 문자열, 인자... ) 해당 매크로를 사용하여 생성된 로그는 Saved\Logs 폴더의 Log 파일과 출력로그 윈도우에서 확인할 수 있다. 로그 카테고리 로그에는 카테고리를 지정할 수 있다. 로그를 확인해보면 로그가 "카테고리:" 으로 시작하는것을 확인할 수 있다. 로깅 수준 로깅 수준은 크게 메시지(Log), 경고(Warning), 에러(Error) 세가지로 나뉜다. 각각 흰색, 노란색, 붉은색으로 출력 로그 윈도우에 표시된다. 색상은 편집 > 에디터 개인설정..
💻 Code : https://github.com/tedison7/ArenaBattle 언리얼 컨텐츠의 구성요소 월드 언리얼 엔진의 가상 공간을 월드(world)라고 부른다. 월드에는 다음과 같은 요소가 제공된다. 공간(Space) : 가상 세계를 구성하는 3차원의 영역을 의미. 트랜스폼(Transform) 구조체를 제공하며 단위는 cm이다. 시간(Time) : 가상 공간에서 흐르는 시간 단위는 초 단위. 멈추거나 느리게 혹은 빠르게 속도를 조절할 수 있다. 물리(Physics) : 월드 공간에 있는 오브젝트에 작용하는 물리적인 환경. 대표적으로 중력이 있다. 물리적 영향을 받기 위해서는 콜리전(Collision)정보가 있어야 한다. 렌더링(Rendering) : 엔진이 제공하는 시각적인 기능. 빛과 머..
💻 Code : https://github.com/tedison7/ArenaBattle 들어가며 이전에 유니티 엔진으로 개인프로젝트를 진행하며 공부를 하려고 했었다. 진행하다보니 현재 회사에서는 언리얼을 하고 있어서 언리얼의 기본을 더 다져야 한다는 생각이 들었다. 막연히 공식문서를 이것저것 읽어보기 보다 좀더 체계적으로 배우기 위해 책을 한권 구매하였다. 이득우의 언리얼 c++ 게임 개발의 정석 책을 구매하였고, 따라하면서 몇몇 내용들을 기록하고자 한다. 엔진 설치 및 비주얼 스튜디오는 설치를 한 상태이다. 프로젝트 생성단계부터 시작해보자 언리얼 프로젝트의 생성 기본 프로젝트 생성 책에서는 4.19버전으로 기록되어있으나 현재 최신버전인 4.27버전으로 프로젝트로 생성하였다. 삼인칭 템플릿으로 선택 시작..
05. 컴퓨터 아키텍처와 운영체제 컴퓨터는 어떻게 프로그램과 메모리를 조직적으로 관리할까? 컴퓨터 아키텍처(Computer Architectur)는 컴퓨터의 여러 구성 요소를 배치하는 방법을 뜻한다. 기본적인 구조 요소들 컴퓨터 구조의 대표적인 두가지는 폰 노이만(von Neumann)구조와 하버드(Harvard)구조 이다. 두 구조의 유일한 차이는 메모리 배열이다. 폰노이만 구조는 데이터 버스와 주소버스가 하나 뿐이라서 동시에 명령어와 데이터를 가져올수 없다. 그래서 약간 더 느리다. 하버드 구조는 동시에 명령어와 데이터를 둘다 가져올수 있어서 좀 더 빠르지만 두 번째 메모리를 처리하기 위한 버스가 더 필요하다. 프로세서 코어 멀티 프로세서(multiprocessor) 시스템은 단일 CPU보다 더 좋은..
04. 컴퓨터 내부 구조 컴퓨터 하드웨어는 어떻게 구성되는가 현대적 컴퓨터는 크게 메모리(Memory), 입출력(intput and output), CPU(central processing unit) 세가지 부분으로 나눌 수 있다. 메모리 컴퓨터에서 조작할 비트들을 저장할 장소를 메모리라고 부른다. 입력과 출력 컴퓨터에 정보를 전달하거나 컴퓨터에서 정보를 가져올 방법을 입력과 출력이라 부른다. 이들은 컴퓨터 주변에 위치하여 주변장치(peripheral device)라고 부른다. 중앙 처리 장치 중앙 처리 장치(CPU)는 실제 계산을 처리하는 컴퓨터 부품이다. 산술 논리 장치 ALU(arithmetic logic unit)은 CPU의 핵심 부품이다. ALU는 산술 계산, 불리언 대수 및 기타 연산을 수행한..
01. 컴퓨터 내부의 언어체계 컴퓨터는 어떤 말을 사용할까? 언어는 정보를 소통하기 위해 만들어졌다. 프로그래머는 컴퓨터에게 명령을 내리는 사람이다. 사람이 컴퓨터의 말을 배워서 컴퓨터에게 명령을 내린다. 언어란 무엇인가 모든 언어의 뜻은 기호들의 집합으로 인코딩(encoding) 된다. 언어가 제대로 동작을 하려면 의사소통하는 당사자들이 모두 같은 문맥(context)을 공유해서 같은 기호에 같은 뜻을 부여해야 된다. 문자 언어 문자언어는 기호를 나열한 것이다. 기호를 정해진 순서대로 나열하여 단어를 만들 수 있다. 비트 자연어에서는 문자(character)라고 부르는 것을 컴퓨터에서는 비트(bit)라고 부른다. 비트는 2진법의 바이너리(binary)와 숫자의 디지트(digit)가 합쳐진 말이다. 비트..
11장 WebFlux로 Reactive API 개발하기 🎯 이 장에서 배우는 내용 스프링 WebFlux 사용하기 리액티브 컨트롤러와 클라이언트 작성하고 테스트하기 REST API 소비하기 리액티브 웹 애플리케이션의 보안 11.1 스프링 WebFlux 사용하기 매 연결마다 하나의 스레드를 사용하는 스프링 MVC 같은 전형적인 서블릿 기반의 웹 프레임워크는 thread blocking과 다중 스레드로 수행된다. 즉 요청이 처리될 때 스레드 풀에서 작업 스레드를 가져와서 해당 요청을 처리하며, 작업 스레드가 종료될 때까지 요청 스레드는 블로킹된다. 이에 반해 비동기 웹 프레임워크는 더 적은 수의 스레드로 더 높은 확장성을 성취한다. 이벤트 루핑 Event looping 이라는 기법을 적용한 이런 프레임워크는 ..
10장 리액티브 프로그래밍 & 리액터 💻 실습 : https://github.com/cusbert/spring-in-action-5th 🎯 이 장에서 배우는 내용 리액티브 프로그래밍 Reactive Programming 이해하기 프로젝트 리액터 Project Reactor 리액티브 데이터 오퍼레이션 Operating on data reactively 왜 리액티브 프로그램을 쓰는가? 신문을 구독받는다고 가정해보자. 1년 치 구독료를 지불하였는데 배달이 오지 않고 1년 치 신문이 모두 준비되면 그제야 배달을 시작한다면 어떻게 될까? 당연히 말이 되지 않는다. 실제로는 기사가 최신일 때 독자가 읽을 수 있도록 출간 후 가능한 빨리 배달된다. 또한 독자가 기사를 읽는 동안 기자는 새로운 다음 기사를 작성한다. ..