Inventory - B477042/GraduationProject GitHub Wiki

About Inventory

Inventory์™€ ๊ด€๋ จ๋œ ์•„์ดํ…œ๋“ค์— ๋Œ€ํ•œ ๊ตฌํ˜„ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.
๊ฒŒ์ž„์—์„œ ์•„์ดํ…œ์„ ์–ด๋–ป๊ฒŒ ์ €์žฅํ• ์ง€์— ๋Œ€ํ•ด ๋ถ„์„ํ•˜๊ณ  ๊ตฌํ˜„ํ•ด๋ดค์Šต๋‹ˆ๋‹ค.
์•„์ดํ…œ ๊ณ ์œ ์˜ ID๊ฐ€ ์žˆ์–ด์•ผ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ FName Tag๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด ๋•Œ UE4์˜ Tag ์‹œ์Šคํ…œ์„ ๋ชฐ๋ผ์„œ ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค.
๋‚˜์ค‘์— ์•Œ๊ฒŒ ๋˜๊ธด ํ–ˆ์ง€๋งŒ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

Back to Planning & Implementation

๊ตฌํ˜„

UComponent_Inventory.h

class ESCAPEGAME_API UComponent_Inventory : public UActorComponent
{
	UPROPERTY(EditAnywhere, Category = "Items")
		TMap<FName,  FItemDataInfo> Items;
}


USTRUCT(BlueprintType, meta = (ToolTip = "์ธ๋ฒคํ† ๋ฆฌ์— ์ €์žฅ๋˜๋Š” ์•„์ดํ…œ์— ๋Œ€ํ•œ ์ •๋ณด"))
struct  FItemDataInfo
{
	GENERATED_BODY()
	public:
	FItemDataInfo() { Item = nullptr; n_item = 0; }

private:
	//Sort of this item
	UPROPERTY(EditAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true"))
	TWeakObjectPtr<AItemActor> Item;
	
	UPROPERTY(Transient, VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true"))
		int n_item;
	
};

Inventory ๋‚ด๋ถ€์— ์•„์ดํ…œ์˜ ID๋กœ ์‚ฌ์šฉํ•˜๋Š” FName Tag ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์•„์ดํ…œ ์ •๋ณด๋ฅผ Map์„ ์ด์šฉํ•˜์—ฌ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • Key ๊ฐ’์˜ ์•„์ดํ…œ์ด ์กด์žฌํ•˜๋ฉด FItemDataInfo์˜ ๊ฐฏ์ˆ˜ ๊ฐ’์„ ์กฐ์ ˆํ•˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • Key ๊ฐ’์˜ ์•„์ดํ…œ์„ ๋ชจ๋‘ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด, TMap Items์—์„œ ์ œ์™ธ ์‹œํ‚ค๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • Key ๊ฐ’์˜ ์•„์ดํ…œ์ด ์—†๋‹ค๋ฉด, ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€ ๋˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Item์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ํ•ด๋‹น Item์„ Weak pointer๋กœ ์ ‘๊ทผํ•˜์˜€์Šต๋‹ˆ๋‹ค.

AItemActor.h

class ESCAPEGAME_API AItemActor : public AActor
{
public:
	//์ž์‹๋“ค์—์„œ tag๋ฅผ ๋ฐ˜๋“œ์‹œ ์ •์˜ํ•ด์ค˜์•ผ ๋œ๋‹ค. 
	 virtual  FName GetTag()PURE_VIRTUAL(AItemActor::GetTag,return TEXT("Default") ;);
protected:
	//์ด ์•„์ดํ…œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์—‘ํ„ฐ
	UPROPERTY(VisibleAnywhere)
		ACharacter* OwnerActor;
	//์•„์ดํ…œ์„ Player๊ฐ€ ์ฃผ์šธ ๊ฒฝ์šฐ, ์œ ํšจํ•˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค
	UPROPERTY(VisibleAnywhere)
		bool bIsItemVaild;

}

Item Actor๋“ค์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค์ด๊ธฐ์— Pure virtual์„ ์ด์šฉํ•˜์—ฌ Tag์— ๋Œ€ํ•œ ๋ถ€๋ถ„์„ ๋ฐ˜๋“œ์‹œ ๋งŒ๋“ค๊ฒŒ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
Vaildํ•˜์ง€ ์•Š๋Š” ์•„์ดํ…œ์€ level์—์„œ ๋น„ํ™œ์„ฑํ™” ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

๊ตฌํ˜„์‹œ ์–ด๋ ค์› ๋˜ ์ 

Save & Load๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค.
FItemDataInfo์˜ ๊ตฌ์กฐ์ƒ ์•„์ดํ…œ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ด๋‹น ์•„์ดํ…œ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์–ด์•ผ ๋๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
๊ตฌ์กฐ๋ฅผ ๋ฐ”๊ฟ”์•ผ ๋ ์ง€ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ์•„์ดํ…œ๋งŒ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์œผ๋ฉด ๋˜๊ธฐ์— Inventory์— ์žˆ๋Š” ์•„์ดํ…œ ๋ชฉ๋ก์„ ์ €์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ ํ›„, Load ํ•  ๋•Œ ๋ชฉ๋ก์— ์žˆ๋Š” ์•„์ดํ…œ์ด๋ฉด ์Šคํฐ ์‹œ์ผœ์„œ ๊ทธ ์•„์ดํ…œ์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋น„ํ™œ์„ฑํ™” ์ƒํƒœ๋กœ ๋งŒ๋“ค์–ด๋‘๋ฉด ๊ฒŒ์ž„์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  Item Actor์—์„œ ์ž์‹ ์ด Player์—๊ฒŒ ์ฃผ์›Œ์ง„ ์ ์ด ์žˆ์œผ๋ฉด ๋น„ํ™œ์„ฑํ™” ์ƒํƒœ๋กœ Load๋˜๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ