TSubclassOf 는 UClass 유형의 안전성을 보장해 주는 템플릿 클래스입니다.
이 함수는 지정된 클래스의 새 인스턴스를 생성한 다음 새로 생성된 Actor 로의 포인터를 반환합니다.
ProjectileMovementComponent는 틱 중에 다른 구성요소의 위치를 업데이트합니다.
MaxSpeed : 최대 발사 속도 제한(0은 제한 없음을 의미한다.)
InitialSpeed : 발사체의 초기 속도
OnComponentHit구성요소가 단단한 물체에 부딪힐 때 호출되는 이벤트입니다.
AddDynamic : 다이나믹 델리케이드 (콜백함수)
함수 포인터의 직접 접근이 아닌 대리자를 통한 함수 호출 방식
호출할 함수나 이를 포함하는 객체가 없어져도 대리자가 체크해 안전하게 처리할 수 있음.
동일한 형을 가진 함수 여러 개를 대리자가 묶어서 관리하고, 필요할 때 동시에 모두 호출하는 것이 가능함.
일반 피해로 지정된 액터에게 피해를 줍니다.
마지막 Destory는 충격을 준 Projectile이 남아있지 않고 사라지기를 원하기 때문이다.
PlayerController가 처리하는 입력의 활성화 or 비활성화
게임이 시작하고 바로 움직이지 않고 3초 정도의 대기시간을 갖기 위해 위와같이 활성화, 비활성화 상태를 만들었다.
1. FTimerDelegate 객체 PlayerEnableTimerDelegate를 생성합니다.
2. FTimerDelegate::CreateUObject 함수를 사용하여 AToonTanksPlayerController 클래스의 멤버 함수인 SetPlayerEnabledState를 호출하도록 설정합니다.
3. SetPlayerEnabledState 함수에 전달되는 인자로 true가 전달됩니다
4. SetPlayerEnabledState 함수가 호출될 때 true가 전달되어야 합니다
true가 전달되면 사용자의 입력이 EnableInput 상태가 되어 움직일 수 있게 됩니다.
상위 계층의 HandleDestruction을 사용하기 위해 선언하였는데 이상한 문제가 나오면서 작동이 되지 않았다. 강의를 여러번 돌려보며 문제점을 찾았지만 똑같이 작성하였음에도 문제가 생겨 왜 이런 문제가 생기는지 의문이 들었는데. 결국 똑같이 작성하지 않았기 때문에 생긴 문제였다.
아래 32번째 줄을 보면 SUPER가 아닌 Super로 잘못된 SUPER를 사용하고 있었다. 그런데 색이 똑같이 나오니 문제가 없다고 생각했던 것이다. 그래도 여러번 문제가 생겼던 경험에서인지 이제 빠르게 문제점을 파악하고 고칠 수 있게 되었다.