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

3. Actor(Monster) - Monster_Fire - (중요 함수)

CE : 하랑 2024. 3. 1. 22:43

 

1. Monster_Base 기본 행동은 같다.

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

 

- Monster_Base와 같이 특정범위만 좌우 이동(반복)

else {
	//MovePos = FVector::Zero;
	IsAtt = false;
	if (MonsterDirNormal.iX() == -1 && IsIce == false) // 왼쪽 방향
	{
		MonsterRenderer->ChangeAnimation("Move_Left");
		WallX = -20;
	}
	else if (MonsterDirNormal.iX() == 1 && IsIce == false) { // 오른쪽 방향
		MonsterRenderer->ChangeAnimation("Move_Left");
		WallX = 20;
	}
}

- 평상시는 특정 범위만 이동

 

2. pengi_Ice -> 추격 코드 같음 

(1) X축 기준 특정 범위 플레이어를 인식하면 추격

FVector MosterXL = MonsterPos + FVector::Left * sight; // 몬스터 왼쪽 플레이어 인식 시야 X축
FVector MosterXR = MonsterPos + FVector::Right * sight; // 몬스터 오른쪽 플레이어 인식 시야 X축

 

- 플레이어를 인식하면 추격 시작과 동시에 Att 애니메이션 실행

if (MosterXL.iX() < PlayerX.iX() && MosterXR.iX() > PlayerX.iX()) // 몬스터 시야에 포착된 경우 X축 기준 왼쪽, 오른쪽
{
	IsAtt = true;
	MoveSpeed = 100.0f;
	if (MonsterDirNormal.iX() == -1 && IsIce == false) // 왼쪽 방향
	{
		MonsterRenderer->ChangeAnimation("Att_Left");
		WallX = -20;
	}
	else if (MonsterDirNormal.iX() == 1 && IsIce == false) { // 오른쪽 방향
		MonsterRenderer->ChangeAnimation("Att_Right");
		WallX = 20;
	}
	MovePos += MonsterDirNormal * _DeltaTime * MoveSpeed; // 몬스터가 플레이어의 Y축도 인식할 수 있으니 FVector::Right 를 곱해 X축만 추격
}