저녁과 오늘 만들던 Interaction이 채환누나가 컴퓨터를 끄는 바람에 다 지워져서 다시 구현중이다. 일단 오늘 개발한 부분을 정리해 보겠다.

TESTCharacter

Interaction 키 바인딩 및 LineTrace로 액터 알아내기

void ATESTCharacter::Interaction()
{
	//HitResult for Line Trace
	FHitResult hitResult;
	//Is Hit?
	bool isHit = false;
	//additional intersector start to end
	int32 lineStartPos = 0;
	//Start Vector (FollowCamera)
	FVector start = FollowCamera->GetComponentLocation() + lineStartPos;
	//CollisionQuerys to store Hitdata
	FCollisionQueryParams collisionParams;
	collisionParams.bTraceComplex = true;
	//Ignore Player Character from linetrace
	collisionParams.AddIgnoredActor(this);
	//ECC_GameTraceChannel2 = Interactor Collision Channel Name see DefaultEngine.ini in Config folder for more detail
	
	//ActorLineTraceSingle(hitResult, start, start*interactionRange, ECC_GameTraceChannel2, collisionParams);
	
	//////////////////////////////////////////// Hit Tracer Inbound! ////////////////////////////////////////////
	
	if (ActorLineTraceSingle(hitResult, start, start*interactionRange, ECC_GameTraceChannel2, collisionParams))
	{
		//if the hit actor is pickupable
		if (hitResult.GetActor()->ActorHasTag("Pickup"))
		{
			
		}
		//if the hit actor is Interactable
		else if (hitResult.GetActor()->ActorHasTag("Interact"))
		{

		}
		//something else detected /*ERROR*/
		else
		{
			return;
		}
	}
	else
	{
		//Failed to find interactable actor
		return;
	}
	
}

ActorLineTraceSingle  을 통해 Hit된 액터의 정보를 받아옴 그 후 Tag를 분석해 Pickup인지 Interact인지 구분함 이 구분에 대해서는 아래와 같은 분류 방식을 설정했다.

아직 완벽히 기획이 완성되지 않아 일단 내가 정한 방식대로 구현중이다.

InteractionCore

인터렉션을 관리하기 위해 인터렉션 코어를 구현했다. 이 인터렉션 코어는 GameInstance에 구현된 내용들을 토대로 아이템들에게 정보를 기입시키고 추가적으로 상속을 통해 아이템의 속성과 분류 용도로 구현했다.

#pragma once

#include "TEST.h"
#include "Engine/GameInstance.h"
#include "Engine/DataTable.h"
#include "TESTGameInstance.generated.h"

UENUM(BlueprintType)		//"BlueprintType" is essential to include
enum class EItemType : uint8
{
	ITEM_NORMAL = 1,	//WHITE COLOR
	ITEM_CRAFTED,		//BLUE COLOR
	ITEM_SPECIAL,		//PURPLE COLOR
	ITEM_ETC			//ORANGE COLOR
};

USTRUCT(BlueprintType)
struct FItemData : public FTableRowBase
{
	GENERATED_BODY()
	
public:
	UPROPERTY(BlueprintReadWrite, Category = "Item")
	int32 ID;
	UPROPERTY(BlueprintReadWrite, Category = "Item")
	FString DisplayName;
	UPROPERTY(BlueprintReadWrite, Category = "Item")
	FString InternalName;
	UPROPERTY(BlueprintReadWrite, Category = "Item")
	EItemType Type;
	UPROPERTY(BlueprintReadWrite, Category = "Item")
	int32 MaxClip;
	UPROPERTY(BlueprintReadWrite, Category = "Item")
	int32 CurClip;
	UPROPERTY(BlueprintReadWrite, Category = "Item")
	float Durability;
	UPROPERTY(BlueprintReadWrite, Category = "Item")
	FString AnimationPath;
	UPROPERTY(BlueprintReadWrite, Category = "Item")
	FString ModelPath;
};


UCLASS()
class TEST_API UTESTGameInstance : public UGameInstance
{
	GENERATED_BODY()
	
public:
	UTESTGameInstance();
};

위의 구조체에서는 아이템의 ID, 인게임에서 보일 이름, 내부적으로 게임 개발자들이 분류할 아이템 이름, 아이템 타입, 최대 탄창, 현재 탄창, 내구도, 아이템에 따른 애니메이션, 스태틱 매쉬 모델 경로를 넣기로 했다. 추후 개발을 진행하면서 달라지겠지만 일단 이렇게 정해두었고 저 구조체를 엑셀로 구축해 CSV로 뽑아내는 xlsm도 구현해 두었다.

Export to CSV를 누르면 xlms로 작업된 파일을 csv로 뽑아 넣을 수 있게 된다.

중간에 파일이 소실되서 문제가 생겼지만 일단 오늘 이정도로 구현해 두고 내일 무기 줍고 부착하는 기능과 인터렉터로 대충 문열기 정도를 만들어야겠다.

ps. 주석은 필요하고 중요한 곳에만 달자!