호경

Unreal Engine 4 : (3) C++ 함수 선언 및 구현해보기 본문

캡스톤 졸업작품/언리얼 엔진 4

Unreal Engine 4 : (3) C++ 함수 선언 및 구현해보기

rlaghrud1234 2022. 3. 3. 16:29

시작에 앞서...

학부 연구생으로 활동하고 있는 도중에

교수님께 새로운 IC-PBL 강좌로 언리얼 엔진 관련해서 개설한다고 하셨다.

 

이전부터 게임 개발 관련해서도 관심이 많았었는데, 이번 기회에 언리얼 엔진에 대해 제대로 배울 수 있을 것 같아, 강의 개설에 참여한다고 말씀드렸다.

 

블로그에서 다룰 툴은 언리얼 엔진 4이며,

모든 내용은 유튜브 채널 "베르의 게임 개발 유튜브"에서 참고했다.

https://www.youtube.com/channel/UC9j37A2ACL9ooSbsT4mtGww/featured : 베르의 게임 개발 유튜브

 


목차

- 유튜브 강의 노트 정리

- C++로 함수 구현해보기

 


유튜브 강의 노트 정리

 

"베르의 게임 개발 유튜브"에서 크리에이터 "베르"님이 얘기하시는 내용 중

C++과 블루프린트의 상호작용에 의해서 더욱더 효율적인 게임 개발을 할 수 있다고 하셨다.

C++개발자가 코드를 짜게 되면 그 코드를 기반으로 해 디자이너들이 블루프린트를 디자인한다고 하셨다.

 

C는 익숙해서 다루기가 쉽지만 C++은 아직 익숙치 않아서 강좌 중 입문편에서 함수 선언에 대해 나와 있어

그 부분을 오늘은 포스팅 하겠다.

 

 

 

C++로 함수 구현해보기

 

 

먼저, 헤더 파일은 다음과 같이 작성했다.(수정 부분만 추가, 같은 부분은 포스팅하지 않음)

 

public:	
	// Sets default values for this actor's properties
	AMyActor1();

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Damage")
		int32 TotalDamage; //32비트 int형 TotalDamage 변수

	UPROPERTY(EditAnyWhere, BlueprintReadWrite, Category = "Damage")
		float DamageTimeInSeconds; //float형 DamageTimeInSeconds 변수

	UPROPERTY(BlueprintReadOnly, VisibleAnywhere, Transient, Category = "Damage")
		float DamagePerSeconds; //float형 DamagePerSeconds 변수

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;

	void CalculateDamagePerSeconds();

	virtual void PostInitProperties() override;
	virtual void PostEditChangeProperty(FPropertyChangedEvent & PropertyChangedEvent) override;

 

다음으로 소스파일은 다음과 같이 작성했다.(수정 부분만 추가, 같은 부분은 포스팅 하지 않음)

void AMyActor1::CalculateDamagePerSeconds()
{
	DamagePerSeconds = TotalDamage / DamageTimeInSeconds;
}

void AMyActor1::PostInitProperties()
{
	Super::PostInitProperties();
	CalculateDamagePerSeconds();
}

void AMyActor1::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)
{
	CalculateDamagePerSeconds();
	Super::PostEditChangeProperty(PropertyChangedEvent);
}

코드를 적기 전에 '언리얼 엔진'만에서 쓰는 각종 함수에 대해서 조금 정리하고자 한다.

물론 정리 노트에다가도 적긴 했지만 조금 더 쉬운 이해를 위해 한 번 더 정리하려고 한다.

 

코드에서 PostInitProperties와 PostEditChangeProperty라는 함수가 등장하는데,

새롭게 작성해준 함수를 발동시키기 위해서는

void AMyActor1::CacultateDamagePerSecond
{
	DamagePerSeconds = TotalDamage / DamageTimeInSeconds;
}

해당 함수가 자동으로 불러오는 시점이 있어야 하는데

해당 시점이 되는 상황은 TotalDamage 혹은 DamageTimeInSeconds가 변화되는 순간의 시점이 될 것이다.

 

언리얼엔진에서는 PostInitProperties와 PostEditChangeProperty라는 함수를 통해 프로퍼티가 초기화 또는 수정될 때 해당 함수가 호출되도록 만들 수 있다.

 

 

따라서 컴파일 한 후, MyActor1을 월드에 배치해 주고, TotalDamage와 DamageTimeInSeconds를 수정해주면 다음과 같이 변화되는 것을 확인할 수 있다.

 

 

먼저 Total Damage 값을 변경해 보겠다.

Total Damage를 변경해 본 결과

 

다음으로 Damage Time In Seconds 값을 변경해 보겠다.

DamageTime In Seconds 변경해 본 결과

 

이와 같이 값을 입력해 주는 시점에 바로 Damage Per Seconds가 변화하는 것을 확인할 수 있다.

 

마치며...

앞으로, 기초적인 자습 내용은 "베르"님 유튜브를 참고하면서 할 예정이며, 포스팅 할 예정이다.

더 나아가 자신만의 게임을 만들어 보는 것을 개인 프로젝트로 해볼 것이며,

IC-PBL 강좌 개설 때는 VR/AR과 연동하실 계획이시라고 하니, 그 부분에 대해서도 자습 후 포스팅 할 예정이다.

 

졸업 작품도 이 쪽으로 해보면 굉장한 경험이 될 것이라고 생각한다.

 
Comments