[Unreal] ์ธํ„ฐํŽ˜์ด์Šค

2024. 5. 3. 19:35ยท โš™๏ธ ์—”์ง„/๐Ÿซ ์–ธ๋ฆฌ์–ผ

๐ŸŸฉ ์ธํ„ฐํŽ˜์ด์Šค

๊ฐ์ฒด๊ฐ€ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•  ํ–‰๋™์„ ์ง€์ •ํ•˜๋Š”๋ฐ ํ™œ์šฉ๋˜๋Š” ํƒ€์ž…

๋‹คํ˜•์„ฑ์˜ ๊ตฌํ˜„, ์˜์กด์„ฑ์ด ๋ถ„๋ฆฌ๋œ ์„ค๊ณ„์— ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉ

 

๐ŸŒŸ ํŠน์ง•

1. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋‘ ๊ฐœ์˜ ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ๋จ

  • U๋กœ ์‹œ์ž‘ํ•˜๋Š” ํƒ€์ž… ํด๋ž˜์Šค : ํด๋ž˜์Šค ํƒ€์ž… ์ •๋ณด ์ œ๊ณต
  • I๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ํด๋ž˜์Šค : ์‹ค์งˆ์ ์ธ ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„

2. ๊ฐ์ฒด๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ I ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉ

  • U ํƒ€์ž… ํด๋ž˜์Šค ์ •๋ณด๋Š” ๋Ÿฐํƒ€์ž„์—์„œ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ์—ฌ๋ถ€๋ฅผ ํŒŒ์•…ํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋จ
  • ์‹ค์ œ๋กœ U ํƒ€์ž… ํด๋ž˜์Šค์—์„œ ์ž‘์—…ํ•  ์ผ์€ ์—†์Œ
  • ์ธํ„ฐํŽ˜์ด์Šค์— ๊ด€๋ จ๋œ ๊ตฌ์„ฑ ๋ฐ ๊ตฌํ˜„์€ I ์ธํ„ฐํŽ˜์ด์Šค ํด๋ž˜์Šค์—์„œ ์ง„ํ–‰

3. C++ ์ธํ„ฐํŽ˜์ด์Šค์˜ ํŠน์ง•

  • ์ถ”์ƒ ํƒ€์ž…์œผ๋กœ๋งŒ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋Š” Java, C#๊ณผ ๋‹ฌ๋ฆฌ ์–ธ๋ฆฌ์–ผ์€ ์ธํ„ฐํŽ˜์ด์Šค์—๋„ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•จ

 

๐ŸŒŸ ์–ธ๋ฆฌ์–ผ ์—”์ง„์—์„œ ๊ฒŒ์ž„ ์ปจํ…์ธ ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ์˜ ์„ค๊ณ„ ์˜ˆ์‹œ

์›”๋“œ์— ๋ฐฐ์น˜๋˜๋Š” ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ, ์•ˆ ์›€์ง์ด๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํฌํ•จ(actor)

์›€์ง์ด๋Š” ์˜ค๋ธŒ์ ํŠธ(pawn) : ๊ธธ์ฐพ๊ธฐ ์‹œ์Šคํ…œ์„ ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์›€์ง์ด๋Š” ์˜ค๋ธŒ์ ํŠธ

 

 

๐Ÿง ์˜ˆ์ œ : ์ˆ˜์—…์— ์ฐธ์—ฌํ•˜๋Š” ์‚ฌ๋žŒ๊ณผ ์ฐธ์—ฌํ•˜์ง€ ์•Š๋Š” ์‚ฌ๋žŒ์˜ ๊ตฌ๋ถ„

  • ์ˆ˜์—…์— ๋ฐ˜๋“œ์‹œ ์ฐธ์—ฌํ•ด์•ผ ํ•˜๋Š” ํ•™๊ต ๊ตฌ์„ฑ์› : ํ•™์ƒ, ์„ ์ƒ
  • ์ˆ˜์—…์— ์ฐธ์—ฌํ•˜์ง€ ์•Š๋Š” ํ•™๊ต ๊ตฌ์„ฑ์› : ๊ต์ง์›
  • ์ˆ˜์—… ํ–‰๋™์— ๊ด€๋ จ๋œ ์ธํ„ฐํŽ˜์ด์Šค : ILessonInterface

๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์— ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ ๋ณต์‚ฌํ•ด์„œ ๋ถ™์ด๊ธฐ(์œˆ๋„์šฐ ์ฐฝ ๋‚ด์—์„œ) ๐Ÿ‘‰ ๋ถ™์ธ ํ›„์— refresh ์ฒ˜๋ฆฌํ•ด์•ผ ์ œ๋Œ€๋กœ ๋“ค์–ด์˜ด

 

๋ณต์‚ฌํ•ด์˜จ ์ฝ”๋“œ๋ฅผ ๋ฐ”๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค.

ํ•ด๋‹น ์ฝ”๋“œ์˜ ํ—ค๋”์—์„œ class๋ช…์„ ํ˜„์žฌ ํด๋ž˜์Šค ํ—ค๋”๋กœ ๋ฐ”๊ฟ”์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

๐ŸŒŸ ์–ธ๋ฆฌ์–ผ ์ธํ„ฐํŽ˜์ด์Šค

 

์ƒ์„ฑ๋œ ์ธํ„ฐํŽ˜์ด์Šค ํ—ค๋”

์ฒดํฌ ๋ถ€๋ถ„์— ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋Šฅ๋“ค์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

 

โœจ ์ธํ„ฐํŽ˜์ด์Šค ํ—ค๋”(cpp๋Š” ์ˆ˜์ •ํ•˜์ง€ ์•Š์Œ)

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "LessonInterface.generated.h"

// This class does not need to be modified.
UINTERFACE(MinimalAPI)
class ULessonInterface : public UInterface
{
	GENERATED_BODY()
};

/**
 * 
 */
class UNREALINTERFACE_API ILessonInterface
{
	GENERATED_BODY()

public:
	// virtual void DoLesson() = 0;

	// ์•„๋ž˜์™€ ๊ฐ™์ด ๋น„์–ด๋‘์ง€ ์•Š๊ณ  ์“ธ ์ˆ˜๋„ ์žˆ๋‹ค.
	// ์ด ๊ฒฝ์šฐ ๋”์ด์ƒ ์ถ”์ƒ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๊ฐ•์ œ๋กœ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
	virtual void DoLesson() 
	{
		UE_LOG(LogTemp, Log, TEXT("์ˆ˜์—…์— ์ž…์žฅํ•ฉ๋‹ˆ๋‹ค."));
	}
};

 

โœจ Person(h & cpp)

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "Person.generated.h"

/**
 * 
 */
UCLASS()
class UNREALINTERFACE_API UPerson : public UObject
{
	GENERATED_BODY()
	
public:
	UPerson();
	FORCEINLINE FString& GetName() { return Name; }
	FORCEINLINE void SetName(const FString& InName) { Name = InName; }

protected:
	UPROPERTY()
	FString Name;
};
// Fill out your copyright notice in the Description page of Project Settings.


#include "Person.h"

UPerson::UPerson()
{
	Name = TEXT("ํ™๊ธธ๋™");
}

โœจ Student (h & cpp)

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Person.h"
#include "LessonInterface.h"
#include "Student.generated.h"

/**
 * 
 */
UCLASS()
class UNREALINTERFACE_API UStudent : public UPerson, public ILessonInterface
{
	GENERATED_BODY()
	
public:
	UStudent();

	virtual void DoLesson() override;
};
// Fill out your copyright notice in the Description page of Project Settings.


#include "Student.h"

UStudent::UStudent()
{
	Name = TEXT("์ดํ•™์ƒ");
}

void UStudent::DoLesson()
{
	// ์ƒ์†๋ฐ›๋Š” ๊ฒƒ์ด Person์ด๊ธฐ ๋•Œ๋ฌธ์— Super ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค.
	ILessonInterface::DoLesson();
	UE_LOG(LogTemp, Log, TEXT("%s๋‹˜์€ ๊ณต๋ถ€ํ•ฉ๋‹ˆ๋‹ค."), *Name);
}

 

โœจ MyGameInstance(h & cpp)

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Engine/GameInstance.h"
#include "MyGameInstance.generated.h"

/**
 * 
 */
UCLASS()
class UNREALINTERFACE_API UMyGameInstance : public UGameInstance
{
	GENERATED_BODY()
	
public:
	UMyGameInstance();
	virtual void Init() override;

private:
	UPROPERTY();
	FString SchoolName;
};
// Fill out your copyright notice in the Description page of Project Settings.

#include "MyGameInstance.h"
#include "Student.h"
#include "Teacher.h"
#include "Staff.h"

UMyGameInstance::UMyGameInstance() // ์ƒ์„ฑ์ž ์ฝ”๋“œ
{
	SchoolName = TEXT("๊ธฐ๋ณธํ•™๊ต"); // CDO์˜ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •
}

void UMyGameInstance::Init()
{
	Super::Init();

	UE_LOG(LogTemp, Log, TEXT("=========="));
	TArray<UPerson*> Persons = { NewObject<UStudent>(), NewObject<UTeacher>(), NewObject<UStaff>()};
	for (const auto Person : Persons) {
		UE_LOG(LogTemp, Log, TEXT("๊ตฌ์„ฑ์› ์ด๋ฆ„ : %s"), *Person->GetName());
	}
	UE_LOG(LogTemp, Log, TEXT("=========="));

	// ํ˜•๋ณ€ํ™˜ : ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค(์•„๋‹ ๊ฒฝ์šฐ null ๋ฐ˜ํ™˜)
	for (const auto Person : Persons) {
		ILessonInterface* LessonInterface = Cast<ILessonInterface>(Person);
		
		// ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ
		if (LessonInterface) {
			UE_LOG(LogTemp, Log, TEXT("%s๋‹˜์€ ์ˆ˜์—…์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."), *Person->GetName());
			LessonInterface->DoLesson();
		}
		else {
			UE_LOG(LogTemp, Log, TEXT("%s๋‹˜์€ ์ˆ˜์—…์— ์ฐธ์—ฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."), *Person->GetName());
		}
	}
	UE_LOG(LogTemp, Log, TEXT("=========="));
}

๐Ÿง ์–ธ๋ฆฌ์–ผ C++ ์ธํ„ฐํŽ˜์ด์Šค

  • ํด๋ž˜์Šค๊ฐ€ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ง€์ •ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
  • C++์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์ค‘์ƒ์†์„ ์ง€์›ํ•˜์ง€๋งŒ, ์–ธ๋ฆฌ์–ผ C++์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ€๊ธ‰์  ์ถ•์†Œ๋œ ๋‹ค์ค‘์ƒ์†์˜ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ํ–ฅํ›„ ์œ ์ง€๋ณด์ˆ˜์— ๋„์›€๋œ๋‹ค.
  • ์–ธ๋ฆฌ์–ผ C++ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‘ ๊ฐœ์˜ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ์–ธ๋ฆฌ์–ผ C++ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ถ”์ƒ ํƒ€์ž…์œผ๋กœ ๊ฐ•์ œ๋˜์ง€ ์•Š๊ณ , ๋‚ด๋ถ€์— ๊ธฐ๋ณธ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์–ธ๋ฆฌ์–ผ C++ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ํด๋ž˜์Šค๊ฐ€ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์˜๋ฌด๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์–ด ์ข‹์€ ๊ฐ์ฒด ์„ค๊ณ„๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'โš™๏ธ ์—”์ง„ > ๐Ÿซ ์–ธ๋ฆฌ์–ผ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Unreal] ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ  (0) 2024.05.04
[Unreal] ์ปดํฌ์ง€์…˜  (0) 2024.05.03
[Unreal] ํ€ต์…€ ๋ฉ”๊ฐ€์Šค์บ”  (1) 2024.05.01
[Unreal] ์‹œ์ž‘ํ•ด์š” ์–ธ๋ฆฌ์–ผ2022 ์ •๋ฆฌ  (1) 2024.05.01
[Unreal] ์–ธ๋ฆฌ์–ผ ์˜ค๋ธŒ์ ํŠธ ๋ฆฌํ”Œ๋ ‰์…˜ ์‹œ์Šคํ…œ 2  (0) 2024.03.31
'โš™๏ธ ์—”์ง„/๐Ÿซ ์–ธ๋ฆฌ์–ผ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Unreal] ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ
  • [Unreal] ์ปดํฌ์ง€์…˜
  • [Unreal] ํ€ต์…€ ๋ฉ”๊ฐ€์Šค์บ”
  • [Unreal] ์‹œ์ž‘ํ•ด์š” ์–ธ๋ฆฌ์–ผ2022 ์ •๋ฆฌ
peewoong
peewoong
peewoong.logpeewoong ๋‹˜์˜ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
peewoong
peewoong.log
peewoong
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • ๐Ÿ™‚ Info
    • ๐ŸŽฎ ๊ฒŒ์ž„ ๊ด€๋ จ ๊ฐœ๋…
    • ๐Ÿ‘ฉโ€๐Ÿ’ป ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • ๐ŸŽญ C
      • ๐ŸŽ  C++
      • ๐Ÿ• C#
      • โœจ ์ž๋ฃŒ๊ตฌ์กฐ
      • ๐ŸŽ ์•Œ๊ณ ๋ฆฌ์ฆ˜
      • ๐Ÿ”ข ์ˆ˜ํ•™
      • ๐ŸŽจ ๊ทธ๋ž˜ํ”ฝ์Šค
    • โš™๏ธ ์—”์ง„
      • ๐Ÿง€ VS
      • ๐Ÿค ์œ ๋‹ˆํ‹ฐ
      • ๐Ÿซ ์–ธ๋ฆฌ์–ผ
      • ๐Ÿน DirectX
      • ๐Ÿฆฅ error
    • ๐Ÿ“ฝ๏ธ ํ”„๋กœ์ ํŠธ
    • ๐Ÿง ์ฝ”๋”ฉํ…Œ์ŠคํŠธ

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.v4.2.0
peewoong
[Unreal] ์ธํ„ฐํŽ˜์ด์Šค
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.