2024-03-24
깃허브! |
---|
https://github.com/ChangJin-Lee/ARproject |
★ https://github.com/ChangJin-Lee/ToonTank |
느낀점
Possession에 대해서 배웠다. 월드에서 폰을 제어하고 어떤 폰에 카메라를 부착하여 플레이어로만들어야 하는지 알게 되었다. 그리고 Axis Mapping을 통해 플레이어의 움직임을 제어하는 방법에 대해 배웠다. 이전에는 블루프린트로 연결해서 구현했는데 이번에는 C++ 코드를 써서 구현한다! 매우 흥미롭다. 그리고 AddActorLocalOffset으로 월드 기즈모가 아니라 로컬 기즈모의 움직임에 대해서 배웠다. FVector에 FVector::ZeroVector가 있다는 것도 알게 되었다.
w, s 키가 매핑되어 매 프레임마다 Move 함수를 계속해서 호출하면서 float Value 값을 넘겨준다.
Move( float Value) 요 함수가 계속해서 실행된다. 콜백 함수를 만들어서 우리가 직접 값을 가지고 처리를 할 수 있다!
가상 함수를 오버라이드한 SetupPlayerInputComponent가 있는 SetupPlayerInputComponent 함수의 부모 버전을 호출해 주는 거라서 인풋을 넘겨야한다.
void ATank::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
// 문자열 리터럴(축 이름), 함수를 바인드하는 대상 객체의 포인터(게임 안에 있는 폰 탱크), 함수의 주소
PlayerInputComponent->BindAxis(TEXT("MoveForward"), this, &ATank::Move);
}
AddActorLocalOffset을 사용해서 탱크의 로컬 기즈모를 이동시킬 수 있다.
FVector를 FVector(0.0f,0.0f,0.0f) 로 초기화해서 사용했는데 FVector에는 FVector::ZeroVector라는 녀석이 이미 있었다.
그리고 움직임은 Tank만 하고 있으니 Tank.h, Tank.cpp에서 움직임을 제어할 수 있게끔 코딩해야한다. BasePawn에서는 움직임은 없애면 됨.
void ATank::Move(float Value)
{
// UE_LOG(LogTemp, Display, TEXT("Value : %f"), Value);
// FVector DeltaLocation;
// DeltaLocation = FVector(0.0f,0.0f,0.0f);
FVector DeltaLocation = FVector::ZeroVector;
DeltaLocation.X = Value;
AddActorLocalOffset(DeltaLocation);
}