본문 바로가기

Unreal/Udemy 강의

(308)
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-17 GetWorld() 라인 트레이스를 사용하기 위해 월드 오브젝트에 대해 알아야할 필요가 있다. 월드드 오브젝트는 액터와 구성 요소가 존재하고 렌더링되는 맵이나 샌드박스를 나타내는 최상위 개체이다. 해당 월브 오브젝트의 function을 살펴보면, 우리가 목표로 하는 Linetrace에 대한 기능이 있는 것을 볼 수 있다. 처음 부딪히는 것만을 체크하는 LineTraceSingleByChannel과, 모두 체크하는 LineTraceMultiByChannel 함수가 존재한다. 더욱 자세한 내용을 알고 싶으면 다음 링크를 참고하면 좋다. 참고링크 : https://docs.unrealengine.com/4.27/en-US/API/Runtime/Engine/Engine/UWorld/ UWorld The Worl..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-16 라인 트레이싱 & 스위프 가고일 석상을 집기 위해서는 가고일 석상이 정확히 어디에 위치하는지 알아야 할 필요가 있다. 여기서 사용하는 방법이 라인 트레이스이다. 라인 트레이스는 시작점꽈 끝점을 기준으로 선으로 연결해준뒤, 해당 선에 부딪히는 모든 오브젝트를 체크하게 된다. 아니면 처음으로 부딪힌 오브젝트에 대해선 일부 최적화된 결과를 얻는 것도 가능하다. 하지만 라인트레이스는 선을 이용하다보니 극도로 정밀해야 한다는 단점이 존재한다. 이를 위한 대안으로 셰이프 트레이스가 존재하며, 지오메트리 트레이스라고도 불리는 이 방법은 사용 중인 모양에 따라 트레이스가 가능하다. 트레이스 범위내 모든 오브젝트에 대해 반응하는 것이 아니라, 우리는 가고일만 잡는 것을 원한다. 이를 위해 사용되는 것이 트레이스 채널이다..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-15 씬 컴포넌트 비밀문이 움직이도록 만들어주었으니, 이제 비밀문을 작동시키기 위한 조각상을 배치해준다. 입구에서 바로 왼쪽 감옥의 문을 열고, 스포트라이트로 조각상이 있을 곳을 비춰서 강조하도록 해주었다. 여기서 사용한 조각상은 가고일 조각상인데, 해당 메시의 바닥 부분이 구멍이 나있어서 보기 좋지 않으니, dirt 메시를 추가적으로 조각상 바닥에 붙여주었다. 이제 해당 조각상을 집을 수 있어야 한다. 우리는 카메라를 통해 회전을 하며 카메리 전방에 있는 조각상을 보게 된다. 따라서 카메라와 같은 방향을 가리키는 컴포넌트를 생성해줄 필요가 있으며, 해당 컴포넌트가 일인칭 카메라를 따라 자동으로 회전하고 컴포넌트의 전방 벡터가 카메라의 전방 방향을 가리키게 된다. 따라서 카메라에 어태치가 가능한 씬 컴포넌트를..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-14 FMath::VInterpConstantTo 이제 우리가 만들었던 비밀문을 움직일 수 있게 만들어야 한다. 여기서 필요한 함수가 제목에 적혀있는 FMath에 속한 VInterpConstantTo 함수이다. 해당 함수는 현재 위치에서 목표위치로 일정한 속도로 움직이게 하는 함수이다. 그럼 이를 위해 먼저 필요한 변수들을 헤더에서 선언해주자. 먼저 이동거리를 나타낼 MoveOffset이 필요하다. 벡터 타입이며, 향후 X, Y, Z 축 중 원하는 방향으로 이동할 지 정하게 된다. 다음으로 이동시간을 나타낼 MoveTime이다. 우선 4초로 설정해주었다. 그리고 비밀문이 아무때나 열리는 것이 아니라, 특정 조건을 만족할 때 열려야 하므로 bool 타입 변수도 하나 선언하였다. 기본값은 false이다. 이제 c..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-13 링커, 헤더, 인클루드 머지않아 외부의 다른 파일에서 코드를 가져오게 되기 때문에, C++에서 해당 작업을 어떻게 수행하는지 알아야 한다. 이를 위해 C++ 컴파일 할 때의 주요 단계를 알아보게 된다. 먼저 코드, C++ 파일, 헤더 파일이 다양한 텍스트 파일 안에 포함되어있다. 해당 파일들은 언리얼 헤더 툴에 삽입되게 된다. 언리얼 헤더 툴은 언리얼의 특정 구문을 모두 C++ 코드로 변환해준다. 예를 들어 GENERATED_BODY를 언리얼 헤더 툴이 다양한 코드로 대체하게 된다. 즉, 블루프린트 월드와 통신한데 필요한 모든 것들을 다 추가해준다. 다음으로 C++ 컴파일 프로세스를 가지게 된다. 해당 프로세스를 아래와 같은 3가지 단계를 거치게 된다. 전처리 단계 -> 컴파일러 -> 링커 첫 번째로 전..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-12 역참조 & 화살표(->) 연산자 이번엔 역참조를 통해 액터에 어태치된 무버 컴포넌트가 액터의 이름이나 위치 등의 액터 프로퍼티를 호출하는 방법을 알아본다. 주소값을 알아보는 것도 좋지만, 실제 액터 자체를 가지고 작업해야하는 경우도 적지 않다. 우리가 포인터를 표현할 때 사용했던 *를 변수 탑과 함께 사용하면 포인터가 되지만, 포인터 표현식 앞에 별표를 사용하면 변수의 주소값을 구할 수 있다. 다음 예제를 살펴보자. 포인터 변수 YourFloat에 MyFloat의 주소를 가리키도록 하였다. 다시 FlofatVlaue에 YourFloat앞에 *를 표시함으로써 해당 변수의 주소값, 즉 MyFloat의 원래 값인 5를 저장하게 된다. 이렇게 주소를 통해 값에 접근하는 것 이것이 바로 역참조이다. 여기서 Flo..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-11 포인터 타입 & GetOwner() 이번에는 컴포넌트의 소유 액터에 대한 포인트를 얻는 방법을 배운다. 우선 포인터에 대한 것과 포인터를 사용하는 이유에 대해서 알아보자. 우리가 사용하는 모든 변수는 데이터를 더장하기 위해서 메모리가 필요하다. 여기서 메모리의 위치가 변수 주소를 의미한다. 아래와 같이 변수의 모든 데이터를 저장하는 것은 오래걸리기 떄문에, 대신 액터 전체를 저장하지 않는 포인터를 사용한다. AACtor MyActor = ..; AActor YourActor; YourActor = MyActor; 포인터는 액터를 찾을 수 있는 액터의 주소만을 저장하기 때문에 훨씬 적은 메모리를 사용한다. 아래와 같이 데이터의 사본을 만드는 대신 오리지널 액터를 가리키게 된다. AACtor MyActor ..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-10 C++ 액터 컴포넌트 지난 강의를 통해 배웠던 컴포지션 기능을 통해 액터에 기능을 추가해준다. 먼저 비밀문 용도를 위해 계단으로 내려가는 입구쪽에 문을 추가로 설치해준다. 이제 해당 문을 움직이기 위한 Mover 컴포넌트를 생성해준다. 클래스를 생성하면 VsCode 창이 열리며, 방금 생성한 Mover.h와 Mover.cpp 파일이 열리게된다. 기존 액터의 경우 접두사로 A를 가졌다. 하지만 이번 컴포넌트의 경우 액터로 부터 상속받은 것이 아닌, 액터의 기능을 가진 컴포넌트이므로 접두사로 U를 가지는 것을 볼 수 있다. 이제 간단한 테스트를 위해 CPP의 TickComponent 함수에 간단한 로그 메시지를 출력하도록 해주었다. 이제 컴파일을 하고 이렇게 만든 Mover 컴포넌트를 비밀문에 할당해준다. ..