언리얼엔진 기능
데칼
데칼을 넣으면 박스형태가 보이고, 데칼영역안에 물체가 있으면 박스에 겹치면 어떤 그림을 그리게 하게 한다.
ex ) 총알 자국, 발자국, 수류탄 던지면 바닥에 크레이터 생성
effect -> 새폴더 -> Decal -> Decal Actor 상속 받은 BPC_Crater 생성 -> BPC_Crater가 사용할 머테리얼 생성 MT_Crater
MT_Crater -> 도메인 Deferred Decal, 블랜드 Translucent
MT_Crater -> 베이스 컬러 ( float 4 생성 ) 단순한 색상 표현
* 숫자 4 + 누르면 float 4 생성된다.
MT_Crater -> Textture Object ( 표현하고 싶은 그림 ) -> Texture Sample
* Texcoord ( 그림 그리려는 데칼 안의 UV 값 )
MT_Crater -> Texture Sample 의 알파값 -> 오파시티에 저장
BPC_Crater -> 디테일 -> 페이드인 / 아웃
BPC_Player_C -> 디테일 -> 데칼 수신을 받지않는다 ( 데칼영역 가도 데칼이 입혀지지 않는다 )
충돌
1. 구충돌
무기 구현
플레이어는 몸만 있고 착용할 무기가 각각 자기만의 고유 몽타주를 갖고 있어서 플레이어가 장착.
역으로 무기에서 플레이어로 몽타주를 돌려줘서 알맞은 애니메이션이 재생되게 한다.
충돌도 무기에 달아서 역으로 플레이어에게 알려주는 구조
SkeletonMeshActor를 상속받아서 Weapon_Base 를 제작.
Weapon_Base를 상속 받는 BPC_Sword 제작
시작하자마자 캐릭터에 무기 부착
1. 우선 손위치에 그저 스폰만 됨
단점
-> 스폰을 하는 순간, 어태치 시키기도 전에 BeginPlay 가 시작되어 Owner 를 저장하기 전이라 null 이 나온다.
해결?
이팩트는 지연이팩트를 사용했다.
1. 스폰시킬 때, 소유주를 미리 알려줄 수 있다
2. Public 으로 전환
3.
(1) BPC_Sword 에서 Set Weapon Owner 함수 제작
(2) BPC_Sword 에 IA_Fire 생성해서 연결
(3) BPC_Player_C 이벤트 그래프 연결
몬스터 행동 패턴 ( AI )
몬스터 상속구조
Monster_Base
1. struct.h 에서 구조체 생성
USTRUCT(Atomic, BlueprintType)
struct FMonInfo
: public FTableRowBase
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite)
float CurHP;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
float MaxHP;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
float CurMP;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
float MaxMP;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
float Att; // 공격력
UPROPERTY(EditAnywhere, BlueprintReadWrite)
float DetectRange; // 탐지 범위
UPROPERTY(EditAnywhere, BlueprintReadWrite)
float AttRange; // 공격 사거리
};
2. enum.h 에서 몬스터 enum 값 생성
UENUM(BlueprintType)
enum class EMON_TYPE : uint8
{
MON_MELEE,
MON_RANGE,
MON_BOSS,
};
3. 몬스터 -> Table -> 마우스 우클릭 -> 기타 -> 데이터 테이블 -> FMonInfo -> DT_Monster
* FMonInfo 를 가져오려면 struct.h 에서 FMonInfo 가 FTableRowBase 를 상속 받아야한다.
* FTableRowBase 를 쓰려면 #include "Engine\DataTable.h" 참조해야한다.
4. Monster_Base.h / Monster_Base.cpp 추가
UCLASS()
class UNREAL_3TH_API AMonster_Base : public ACharacter
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Info")
FMonInfo m_Info;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Info")
EMON_TYPE m_MonType;
}
void AMonster_Base::BeginPlay()
{
Super::BeginPlay();
// 데이터 입력
UDataTable* pDataTable = LoadObject<UDataTable>(nullptr, TEXT("/Script/Engine.DataTable'/Game/BlueprintClass/Monster/Table/DT_Monster.DT_Monster'"));
// 데이터 테이블 안에서 몬스터 타입에 맞는 행 정보를 가져와서
if (IsValid(pDataTable))
{
FMonInfo* pInfo = nullptr;
if (EMON_TYPE::MON_MELEE == m_MonType)
FMonInfo* pInfo = pDataTable->FindRow<FMonInfo>(FName(TEXT("MELEE")), TEXT(""));
else if (EMON_TYPE::MON_RANGE == m_MonType)
FMonInfo* pInfo = pDataTable->FindRow<FMonInfo>(FName(TEXT("RANGE")), TEXT(""));
// 몬스터의 m_Info 값을 넣어준다.
if(nullptr != pInfo)
m_Info = *pInfo;
}
}
'언리얼 5' 카테고리의 다른 글
230914 몬스터 AI - Move (0) | 2023.09.15 |
---|---|
230913 enum 찾기 / 카메라 진동 / 몬스터 인공지능 (0) | 2023.09.13 |
230911 싱글톤 / Trace / 사운드 / 수류탄 투사체 제작 (0) | 2023.09.11 |
230907 투사체 수정 / 카메라가 바라보는 방향으로 spine_01 뼈 회전 / 충돌 설정 / 몬스터 생성 (0) | 2023.09.11 |
230906 Effect_Base 구조 변경 / EffectMgr 싱글톤 / 투사체 생성 (0) | 2023.09.11 |