공부 정리/API 프로젝트 (별의 커비) 콘텐츠

3. Actor(몬스터) - Monster_Base (중요 함수)

CE : 하랑 2024. 2. 27. 21:38

 

Monster_Base는 일정 범위 안에서만 좌우 이동

 

1. Tick(float _DeltaTime)

(1) 이동 범위

if (false == checkLocation) // 첫 업데이트와, 벽에 충돌시에만 실행
{
	// 이동 범위 지정
	CurLocation = GetActorLocation()*FVector::Right; 
	RangeXL = CurLocation + (FVector::Left * RangeX);
	RangeXR = CurLocation + (FVector::Right * RangeX);
}

 

- RangeXL : 왼쪽 이동 범위

- RangeXR : 오른쪽 이동 범위

- 첫 업데이트 시 몬스터의 위치를 저장 -> 저장한 위치를 기준으로 이동 범위를 정한다.

 

 

(2) BaseMove - 범위를 벗어나는 경우

if (RangeXL.iX() >= CurX.iX() || RangeXR.iX()<=CurX.iX()) // 기본 몬스터 이동 방향 좌우 +-100 그 범위 벗어나는 경우 -> 방향 변환
{
	StartDir.X *= -1;
	AddActorLocation(StartDir*FVector::Right * _DeltaTime * 100.0f); // 해당 범위 벗어나야 아래의 else문을 실행할 수 있기에 다시 범위안으로 옮기고 리턴
	return;
}

-방향 전환과 동시에 범위 안으로 다시 이동

 

 

2. 얼려진 경우

if (true == IsIce)
{
	IceToMonster(_DeltaTime);
}

// 얼음 상태에서 벽에 충돌시 바로 삭제 -> 추후 이펙트 남길지 고민
Color8Bit ColorR = UActorCommon::ColMapImage->GetColor(GetActorLocation().iX() + WallX, GetActorLocation().iY() - 30, Color8Bit::RedA);
if (ColorR == Color8Bit(255, 0, 0, 0) && true==IsIce)
{
	UEngineSound::SoundPlay("MonsterIceDie.wav");
	IceMove = FVector::Zero;
	MonsterRenderer->ChangeAnimation("Effect");
	IsDie = true;
}

 

 

 

(1) IceToMonster(_DeltaTime);

- 얼려진 상태에서의 충돌체 구분

 

(2) 얼려진 상태에서의 픽셀 충돌 구분