본문 바로가기

Unreal

(316)
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-20 Const 참조 & 아웃 매개 변수 참조가 빛을 발하는 건 함수의 매개 변수일때이다. 보통 함수로 값을 넣을 때, 기존 값을 복사하여 넣게 되지만 참조를 이용하여 값을 받으면 복사되지 않고 가져올 수 있다. 이번엔 함수 안에서 참조 변수의 값을 변경해보고 기존 값과 참조 변수의 값을 확인해보자. 두 변수의 값 모두 변경된 수치로 나오는 것을 볼 수 있다. 위와 같은 모습이 그리 바람직한 모습은 아니다. 왜냐하면 바꾸려고 하지 않았던 변수 또한 바꿔버려 실수로 엉뚱한 데미지를 부여할수도 있기 때문이다. 이를 위해 사용되는 것이 우리가 예전에 사용했던 const이다. 참조 변수에 const를 붙이니, 함수 내에서 값 변경이 불가능한 것을 볼 수 있다. 이렇게 const로 작성된 변수는 값 변경이 불가능하지만..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-19 참조 vs 포인터 우리가 앞서 포인터에 대해 배웠었지만, 포인터와 아주 비슷한 개념으로 대신 쓸 수 있는 참조도 존재한다. 둘 다 메모리 주소를 나타내는 것인 동일하지만, 두 개념의 차이로 재할당 가능 여부가 존재한다. 포인터는 포인터를 변경해서 언제든지 새 메모리 주소, 새 액터, 새 컴포넌트 가리키기 등이 가능하지만, 참조는 한 번 가리키면, 다른 값을 가리키는 것이 불가능하다. 따라서 참조는 해당 변수 전용의 별칭느낌으로 사용된다. 또한 포인터는 null 할당이 가능하지만, 참조는 선언과 동시에 초기화가 이루어져야하므로 null 할당이 불가능하다. 이제 간단하게 참조를 이용하여 테스트를 해보자. 간단하게 데미지 변수를 선언하고, 해당 변수를 참조한 DamageRef를 선언해주었다. 포인터가 *를 선..
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..