
데미지 적용 이제 실제로 데미지를 적용시켜주자. 데미지는 hit 한 순간에 적용되어야 하므로 우리가 만들었던 OnHit 함수에서 ApplyDamage 함수를 호출하게 된다. 먼저 해당 함수의 인풋 매개 변수를 체크해보자. 데미지 받은 액터, 기본 데미지, 컨트롤러, 데미지 입히는 액터, 데미지 타입을 필요로 하는 것을 알 수 있다. 우선 데미지 받은 액터는 OnHit 함수의 OtherActor에 해당하여 쉽게 할당이 가능하다. 다음으로 기본 데미지는 우리가 줄 데미지 수치로, 헤더에서 따로 선언해주자. 일단 초기 데미지로 50을 선언해주었다. 이제 컨트롤러다. 컨트롤러의 경우 다소 복잡하다. 우선 컨트롤러의 대상은 컴포넌트의 소유주이다. 따라서 GetOwner()를 통해 접근할 수 있다고 생각하지만, 현..

체력 컴포넌트 발사체가 무언가를 맞췄을 때 데미지를 입어야 한다. 따라서 데미지에 앞서 체력을 설정하기 위해 체력 컴포넌트 클래스를 생성해보자. 체력은 트랜스폼이나 어태치 기능이 필요없기에, 액터 컴포넌트 클래스로 생성해주자. 그리고 이어서 최대 체력과 현재 체력을 표시할 변수를 선언해주자. 우선은 체력을 최대 체력에서 시작하고, 데미지를 입으면 감소하게 된다. 따라서 BeginPlay에서 체력을 최대 체력으로 설정해주자. 이제 해당 컴포넌트를 블루프린트 클래스에서 탱크와 터렛에 추가해주자. 최대 체력은 언리얼에서도 편집이 가능하다. 이제 데미지에 대한 내용을 구현해야한다. 우선 언리얼 엔진에는 데미지 기능 또한 존재하며, 모든 액터는 데미지 이벤트를 상속받는다. 여기서 전 강의에서의 OnComponen..

타격(Hit) 이벤트 발사체가 파괴되기 위해서는, 마지막에 부딪히는 시점을 알아야 한다. 따라서 부딪히는 방식을 알기 위해 히트 이벤트에 대해 다루게 된다. 발사체는 UStaticMeshComponent이고, 해당 컴포넌트의 부모는 UPrimitiveComponent이다. UPrimitiveComponent는 히트 이벤트 생성이 가능하고 여기서 OnComponentHit이라는 변수가 존재한다. 해당 변수는 구조체 타입이며, 구성은 다음과 같다. 그리고 이 OnComponentHit이라는 히트 이벤트 멀티캐스트 델리게이트라고도 한다. 멀티캐스트 델리게이트는 여러 개의 함수 바인딩이 가능하다. 또한 바인딩된 함수는 인보케이션 리스트라는 곳에 저장된다. 이 인보케이션 리스트가 히트 이벤트가 호출하라고 하면 호..
문제링크 : https://www.acmicpc.net/problem/11508 11508번: 2+1 세일 KSG 편의점에서는 과일우유, 드링킹요구르트 등의 유제품을 '2+1 세일'하는 행사를 하고 있습니다. KSG 편의점에서 유제품 3개를 한 번에 산다면 그중에서 가장 싼 것은 무료로 지불하고 나머지 두 www.acmicpc.net #include using namespace std; typedef long long ll; typedef pair pii; const int MAX = INT_MAX; int N, arr[100001]; int result; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> N; for(int i=1; i> ar..

발사체 이동 컴포넌트 현재 발사체가 고정되어있는 상태이므로, 이름에 맞게 발사시켜주어야 한다. 이를 위해서는 직접 위치를 설정시킬 수 있고, 임펄스를 추가해줄 수도 있으나, 우리는 언리얼에 내장된 기능인 발사체 이동 컴포넌트를 사용하여 발사시켜줄 것이다. 이를 위해 우선 발사체 클래스에서 해당 컴포넌트를 생성해주어야 한다. 생성하고 나면 해당 컴포넌트를 통해서 최대속도 및 기초속도와 같은 변수에 접근할 수 있다. 해당 값들을 직접 설정해주자. 이제 컴파일을 해보면 발사체 블루프린트 클래스에 컴포넌트가 추가되었고, 초기속도와 최대속도 변수도 값이 설정된 것을 볼 수 있다. 이제 플레이를 해보면 탱크와 터렛 모두 발사체가 무사히 발사되는 것을 볼 수 있다. 하지만 설정된 속도만큼 이동한 이후에 여전히 멈춰있..