본문 바로가기

Unreal/Udemy 강의

(308)
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-26 PhysicsHandle로 객체 잡기 이제 위치도 알았으니, 진짜로 PhysicsHandle를 이용해 가고일 석상을 잡아볼 차례이다. 우선 PhysicsHandle이 없을 경우 성립자체가 불가능하므로 얼리리턴을 통해 바로 종료하도록 해준다. 다음으로 저번에 잠깐봤었던 GrabComponentAtLocationWithRotation 함수를 채워나갈 차례이다. 해당 함수가 필요한 항목은 다음과 같다. 처음 변수인 UPrimitiveComponent 타입을 어떻게 얻을 수 있을까? HitResult에 속한 함수를 찾아보면 다음과 같은 내용을 찾을 수 있다. HitResult에 속한 함수인 GetComponent 함수를 이용하면 우리가 찾는 UPrimitiveComponent를 얻을 수 있다. 따라서 HitRe..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-25 DrawDebugSphere() 이제 GrabComponentAtLocationWithRotation() 함수를 이용하여 실제로 잡아볼 차례이다. 하지만 해당 함수에 위치를 넣어주는 부분이 다소 까다롭다. 단순히 실제 컴포넌트의 위치를 사용하는 것이 아니기 때문이다. 예시를 들자면, 우리는 가고일의 머리부분을 잡고자한다. 하지만 가고일의 실제 본질은 바닥 부분에 존재하여, 우리가 머리부분을 잡는다면 바닥~머리 부분만큼 위로 더 떠오른 상태로 집게되는 현상이 발생한다. 그래서 구체 트레이스를 할 때 가고일 석상과 만나는 부분을 찾아야한다. 이를 위해 DrawDebugSphere함수를 통해서 닿는 부분을 시각화하여 체크를 해줄 필요가 있다. 해당 함수의 헤더는 DrawDebugLine 함수를 사용할 때 썼던..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-24 FindComponentByClass() & nullptr Grab 기능을 블루프린트로 가져왔지만, 실제로 잡는 것이 아니라 단순 로그메시지만 출력하고 있다. 물체를 잡으려면 물리 시스템과 상호작용을 해야하는데, 여기서 사용되는 것이 PhyscisHandle 컴포넌트이다. BP_Player에서 직접 추가가 가능하다. 이제 PhysicsHandle 컴포넌트를 Grabber 컴포넌트에서 얻을 방법을 알아야한다. 우선 PhysicsHadnle 컴포넌트를 사용하기 위해 헤더부터 선언해준다. 이제 FindComponentByClass 함수를 통해 PhysicsHandle 컴포넌트를 얻는 것이 가능하다. 해당 함수는 템플릿 함수로 여태 봤던 함수와 사뭇 다른 형태를 가지고 있다. 템플릿 함수는 컴파일 할 때 실제로..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-23 블루프린트 호출 간단히 Grab에 대해 문자열을 출력하도록 했지만, 우리가 원하는 것은 우리가 C++에서 구현했던 기능이다. 이 기능을 블루프린트로 호출해줄 필요가 있다. 이를 위해 사용되는 것이 UFUNCTION이다. 테스트로 Release에 대한 함수를 만들어보자. 기존에는 문자열로 출력해줬지만, 이번엔 로그메시지로 출력하도록 함수로 구현해준다. 이제 BP_Player로 돌아가서 기존 print string을 해당 함수로 대체해주자. Grabber 컴포넌트를 끌어와서 해당 컴포넌트를 얻고, 여기서 함수를 가져오면 된다. 주의할 점은 라이브코딩으로 우리가 만든 Release 함수가 보이지 않을 수도 있다. 이 경우에는 에디터를 끄고, Vscdoe에서 제대로 컴파일을 해준 후에 다시 켜야할 필요가 있다...
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-22 인풋 동작 매핑 트레이스가 가능한 상태가 되었지만, 현재 트레이스가 아무때나 계속하여 실행되는 모습을 볼 수 있다. 우리가 원하는 것은 가고일을 집어 드는 것이기 때문에, 가고일을 집는 순간만 트레이스되는 것을 원한다. 따라서 인풋 동작 매핑에 집는 것을 추가해줄 필요가 있다. 이는 프로젝트 세팅 -> 입력 칸에서 가능하다. 액션 매핑과 축 매핑이 존재한다. 간단하게 말해서 액션 매핑은 마우스나 키보드를 누르는 액션, 축 매핑은 마우스를 돌리는 회전과 같은 것이다. 우리는 마우스 클릭을 이용해 집을 것이므로 액션 매핑을 추가해주면 된다. 여기서 작은 빨간색 박스로 표시한 부분을 누르고 왼쪽 마우스 버튼을 누르면 우측에 있는 칸이 해당 버튼으로 입력된다. 따라서 원하는 마우스 버튼이나 키보드 키를 간단하게..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-21 지오메트리 스위핑 이제 드디어 스위핑을 해볼 차례이다. 우리가 참조와 아웃 매개 변수를 배운 것은 스위핑을 하기 위한 함수인 SweepSingleByChannel에서 사용하기 때문이다. 해당 함수에서 어떠한 변수들을 사용하는지는 언리얼 공식 문서에서 확인이 가능하다. 참고링크 : https://docs.unrealengine.com/4.27/en-US/API/Runtime/Engine/Engine/UWorld/SweepSingleByChannel/ UWorld::SweepSingleByChannel Sweep a shape against the world and return the first blocking hit using a specific channel docs.unrealengine.com 이제 ..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-20 Const 참조 & 아웃 매개 변수 참조가 빛을 발하는 건 함수의 매개 변수일때이다. 보통 함수로 값을 넣을 때, 기존 값을 복사하여 넣게 되지만 참조를 이용하여 값을 받으면 복사되지 않고 가져올 수 있다. 이번엔 함수 안에서 참조 변수의 값을 변경해보고 기존 값과 참조 변수의 값을 확인해보자. 두 변수의 값 모두 변경된 수치로 나오는 것을 볼 수 있다. 위와 같은 모습이 그리 바람직한 모습은 아니다. 왜냐하면 바꾸려고 하지 않았던 변수 또한 바꿔버려 실수로 엉뚱한 데미지를 부여할수도 있기 때문이다. 이를 위해 사용되는 것이 우리가 예전에 사용했던 const이다. 참조 변수에 const를 붙이니, 함수 내에서 값 변경이 불가능한 것을 볼 수 있다. 이렇게 const로 작성된 변수는 값 변경이 불가능하지만..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-19 참조 vs 포인터 우리가 앞서 포인터에 대해 배웠었지만, 포인터와 아주 비슷한 개념으로 대신 쓸 수 있는 참조도 존재한다. 둘 다 메모리 주소를 나타내는 것인 동일하지만, 두 개념의 차이로 재할당 가능 여부가 존재한다. 포인터는 포인터를 변경해서 언제든지 새 메모리 주소, 새 액터, 새 컴포넌트 가리키기 등이 가능하지만, 참조는 한 번 가리키면, 다른 값을 가리키는 것이 불가능하다. 따라서 참조는 해당 변수 전용의 별칭느낌으로 사용된다. 또한 포인터는 null 할당이 가능하지만, 참조는 선언과 동시에 초기화가 이루어져야하므로 null 할당이 불가능하다. 이제 간단하게 참조를 이용하여 테스트를 해보자. 간단하게 데미지 변수를 선언하고, 해당 변수를 참조한 DamageRef를 선언해주었다. 포인터가 *를 선..