멤버 함수
기존의 Spawn Projectile 함수를 보면 탄약을 스폰한 이후 해당 탄약의 전방 벡터를 얻고, 4000을 곱해 충격량량을 추가해주는 부분은 모두 BP_Projectile 인스턴스를 사용한다.
따라서 이 모두를 BP_Proejectile 클래스로 옮겨 데이터를 다루는 코드가 데이터 자체와 같이 살 수 있게 만들고자 한다.
함수가 조작하는 데이터와 함께 사는 것 이것은 객체 지향 프로그래밍의 핵심이기도하다.
이를 위해 BP_Projectile에 직접 함수를 추가해준다.
이렇게 추가한 함수를 멤버 함수라고 하며, 멤버 함수는 클래스의 함수로 항상 특정 인스턴스에서 호출되는 함수이다.
위는 테스트 삼아 BP_Projectile 클래스에 멤버 함수 Print Your Name을 추가해준 상태이다.
이렇게 만든 멤버 함수는 레벨 블루 프린트에서 호출이 가능하다.
기존 BP_Projecitle을 참조해서 호출하게 되며, 이때 저절로 실행핀 아래 Target에 연결된 모습을 볼 수 있다.
여기서 다소 의아한 점이 생길 수 있는데, 기존 멤버 함수에는 실행핀만 있고 Target은 없기 때문이다.
이는 암묵적으로 모든 멤버 함수는 현재 타겟이나 현재 인스턴스라는 파라미터를 가지고 있기에 발생하는 현상이다.
이제 멤버함수를 대략 만들 수는 있지만, 기존 Static Mesh Component와 Get Actor Forward Vector 함수 앞 Target에는 무엇을 연결해야 할지 알 수 없다.
기존에는 SpawnActor BP Projectile에서 반환된 BP_Projectile 레퍼런스를 연결해줬기 때문이다.
여기서 사용되는 것이 Self이다.
멤버 함수로 돌아가 우클릭을 하고 Self를 검색해보면, Get a reference to Self라는 함수를 가져올 수 있다.
그리고 Self 객체 참조를 통하여 특정 객체의 속성을 알 수 있다.
테스트 삼아 BP_Projectile의 이름을 알기 위해 Self에서 연결된 Get Display Name 함수를 이용해 이름을 얻고, 이를 Print String에 연결하여 얻은 이름을 출력해준다.
이렇게 만든 멤버함수를 임펄스 이후에 연결해주고 실행시켜보면 탄약을 발사할때 마다 이제 BP_Projectile의 이름이 나오게 된다.
그런데 발사된 탄약의 이름이 모두 다른 것을 볼 수 있다.
이는 멤버 함수에 의해 참조되는 self가 다른 발사체에서는 서로 다른 self이기 때문이다.
(새롭게 발사된 생성체를 기준으로 한 self이기 때문)
이렇듯 Self는 멤버 함수 안에서 사용 가능한 노드이며, 우리가 사용하는 현재 인스턴스를 항상 가리킨다.
이제 처음으로 돌아가서 원래 목표인 멤버 함수를 만들어보자.
Launch라는 이름의 멤버함수를 만들고 Static Mesh Component, Get Actor Foawrd Vector, Multiply, Add Impulse 이렇게 4가지를 기존 레벨 블루 프린트에서 복사해주었다.
Static Mesh Component와 Get Actor Forward Vector의 경우 앞에 Target을 입력받아야 하는데, 기존에 BP_Projecitle 레퍼런스를 받아왔다.
현재 BP_Proectile 클래스의 멤버 함수이므로 여기서 Self를 이용해 레퍼런스를 가져와 연결해줄 수 있다.
그리고 시작노드 Launch는 Add Impusle에 실행핀을 연결해준다.
이렇게 만든 멤버함수 Launch를 기존 레벨 블루 프린트에 대체해주면 전보다 더 깔끔한 모습을 볼 수 있다.
'Unreal > Udemy 강의' 카테고리의 다른 글
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 2-26 (1) | 2024.03.02 |
---|---|
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 2-25 (0) | 2024.03.01 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 2-22 (0) | 2024.02.29 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 2-21 (0) | 2024.02.29 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 2-20 (0) | 2024.02.29 |