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) 얼려진 상태에서의 픽셀 충돌 구분
'공부 정리 > API 프로젝트 (별의 커비) 콘텐츠' 카테고리의 다른 글
3. Actor(skill) - Ice (0) | 2024.02.28 |
---|---|
3. Actor(몬스터) - pengi_Ice (중요 함수) (0) | 2024.02.27 |
3. Actor(skill) - ABase(흡수공격) - (중요 함수) (0) | 2024.02.26 |
(공용). enum class (액터 공용) (0) | 2024.02.26 |
(공용). class UActorCommon (액터 공용 클래스) (0) | 2024.02.22 |