TIL day 32

2025. 2. 4. 22:20·TIL

1. 코딩테스트


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

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

 

프로그래머스

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

programmers.co.kr

  • 뭘로 풀지?
    • unordered_map 으로 데이터 저장 및 순회 -> unordered_map 순회 관련 글
    • long long 타입 주의

 

 

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를 작성하면서 주요 구현 내용을 정리해 볼 예정입니다.

'TIL' 카테고리의 다른 글

TIL day 34  (1) 2025.02.06
TIL day 33  (0) 2025.02.05
TIL day 31  (0) 2025.02.03
TIL day 30  (2) 2025.01.31
TIL day 29  (2) 2025.01.27
'TIL' 카테고리의 다른 글
  • TIL day 34
  • TIL day 33
  • TIL day 31
  • TIL day 30
gbleem
gbleem
gbleem 님의 블로그 입니다.
  • gbleem
    gbleem 님의 블로그
    gbleem
  • 전체
    오늘
    어제
    • 분류 전체보기 (189)
      • Unreal Engine (73)
      • C++ (19)
      • 알고리즘(코딩테스트) (32)
      • TIL (60)
      • CS (4)
      • 툴 (1)
  • 블로그 메뉴

    • 홈
    • 카테고리
  • 링크

    • 깃허브
    • velog
  • 공지사항

  • 인기 글

  • 태그

    C++
    applydamage
    map을 vector로 복사
    매크로 지정자
    character animation
    싱글턴
    additive animation
    gamestate
    BFS
    cin함수
    const
    Vector
    actor 클래스
    템플릿
    enhanced input system
    DP
    motion matching
    상속
    addonscreendebugmessage
    blend pose
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gbleem
TIL day 32
상단으로

티스토리툴바