TIL

TIL day 32

gbleem 2025. 2. 4. 22:20

1. 코딩테스트


오늘 오전 코딩테스트는 프로그래머스 level 2 시소 짝꿍을 풀었습니다.

https://school.programmers.co.kr/learn/courses/30/lessons/152996

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

2. 과제


 

기능들은 구현이 대체로 완료되어서 추가적으로 게임성을 추가하였고, 충돌 관련 내용을 구현하였습니다.

  • 나이아가라
    • 날아다니는 캐릭터에 Trail 같은 것이 붙어있으면 좋을 것 같다는 생각을 하게 되어서 관련 내용을 찾아보다가 나이아가라 시스템을 접하게 되었습니다.
    • 그러나 이 시스템이 쉽지 않은 것 같아서 간단한 사용법을 익히고, 간단하게만 구현을 해보았습니다.
    • 관련 정리 글

https://gbleem.tistory.com/61

 

Unreal Engine - Simple Niagara (with cpp)

캐릭터가 움직이면, 해당 캐릭터의 뒷부분에 Trail 효과를 주고 싶어서 관련 기술을 찾아보던 도중 나이아가라 시스템을 알게 되었고 간단히 사용해 본 내용을 정리해 볼 것이다.1. 나이아가라 시

gbleem.tistory.com

  • 충돌 처리
    • 해당 과제에서는 물리를 끈 상태로 중력과 충돌을 구현해야 했기 때문에 약간의 어려움이 있었습니다.
    • 기존의 구현
      • 캐릭터가 땅에 있는지 하늘에 있는지를 SweepSingleByChannel을 통해서 체크하고
      • 땅에 있다면, 캐릭터의 좌표 중 roll 회전을 0으로 만들고 pitch 회전을 못하게 만들어서 지면에 붙어있도록 구현하였습니다.
    • 추가 구현
      • 캐릭터가 static mesh와 같은 다른 actor는 뚫고 가는 문제가 있었습니다.
      • 이 문제를 해결하고자 Sweep을 통해서 해당 actor를 체크하고, 캐릭터를 캐릭터의 이동 방향의 반대로 밀어주면 될 것이라고 생각하였습니다. (기존에 배웠던 Launch Character에서 영감을 얻음)
      • 결론적으로 Lerp를 통해서 캐릭터를 뒤로 밀어주어서 통과되지 않도록 구현하였습니다.
    • 충돌 구현 코드
void AFlyingCharacter::CollisionCheck()
{
	FVector Start = GetActorLocation();
	FVector End = Start + FVector::DownVector * 10.f;

	FCollisionShape Sphere = FCollisionShape::MakeSphere(MaxCollisionSphereRadius);
	FHitResult HitResult;

	bool HasHit = GetWorld()->SweepSingleByChannel(HitResult, Start, End, FQuat::Identity, ECC_WorldStatic, Sphere);
	
	if (HasHit)
	{
		if (!Controller)
			return;

		FVector HitVector = GetActorForwardVector();
		FVector NowLocation = GetActorLocation();
		FVector ToLocation = NowLocation + -HitVector * HitBackDistance;
		FVector ResultLocation = FMath::Lerp(NowLocation, ToLocation, GetWorld()->GetDeltaSeconds() * HitBackSpeed);
		
		SetActorLocation(ResultLocation);
	}
}
  • 충돌 영상 (actor와 충돌되는 것과 지면 충돌)

 

구현하다 보니 아직 충돌을 구현할 때 어려움이 많아서, 관련 내용을 좀 더 공부해보고 정리해 보아야 할 것 같습니다.

  • 공부 예정 주제
    • Collision Channel
    • Sweep and Trace

내일은 과제 제출 영상 만들고, 깃허브 readme를 작성하면서 주요 구현 내용을 정리해 볼 예정입니다.