[UE5 TIL] Day 5 - 블루프린트 심화

JungHoon Eum·2026년 2월 27일
  • Get Actor Forward Vector-> Add Movement Input으로 뒷걸음 칠 때 캐릭터가 부들거릴 수 있음 -> CharacterMovementComponent에서 Orient Rotation to Movement를 체크 해놨을 시 두개가 충돌하는 것. Get Control Rotation으로 카메라 기준 전후좌우를 가져오고 여기서 Get Forward Vector로 Movement Input의 방향에 연결하면 문제 없음

  • BS_MM....으로 시작하는 애니메이션 블렌드스페이스 애니메이션 = Multi Movement. 전후좌우 움직임. BS_MF... = Move Forward. 전후만. 1D 블렌드스페이스

  • State Machine 이란? State(상태) 들 과 상태들 간의 변경 조건을 가지는 Machine.

  • 캐릭터가 움직이지 않고 있을 때 (CharacterMovementComponent) 물리엔진이 제대로 작동하지 않는 버그 발생 시 -> 캐릭터에 (진동) - local transform +1 -1씩 추가.

  • 전역 변수와 정적 지역 변수의 차이: 정적 지역 변수는 데이터는 남아있지만(데이터 섹션에) 사용 자체는 해당 함수나 스코프에서만 가능.
    전역 변수는 어디서나 사용 가능.
    함수 내에서 지역 변수 ++ 하면 함수 불러낼 때마다 제대로 +되지만 -> main에서 printf로 출력은 불가능

블루프린트로 플랫포머 구현 과제 - 계속

사실 구현 대부분은 어제 끝냈던 것들이지만, 추가적으로 TIL에 적지 못한 설명들을 추가한다

엘리베이터 기능 구현

  • BP_Elevator가 맵에서 BP_ElevatorTarget 인스턴스를 변수로 가져와 목표 지점을 설정하는 기능의 경우, Event BeginPlay에서 구현된다.
  • 엘리베이터 밑에 달아 놓은 프로펠러의 회전 역시 BeginPlay에서 RotatingMovement의 Set Updated Component를 설정함으로써 구현된다.

Destination의 경우 StartLocation과 TargetLocation 둘을 오가면서 설정되어 Event Tick에서 실제 목표지점으로 설정되는 변수이기 때문에 따로 선언을 해 두었다.

이후 엘리베이터에 캐릭터가 타면 엘리베이터가 "움직임" 상태에 들어가 해당 상태가 해제되기 전까지 움직임을 계속하게 된다. 현재 엘리베이터의 위치와 Start Location을 비교해서 목표지점을 설정하는 방법을 선택했다.

이후 움직임은 Event Tick에서 실행했는데, IsMoving 상태일 때만 실행하도록 Branch, 고정된 이동속도를 가지도록 미리 선언한 Speed 변수에 목표-GetActorLocation을 Normalize한 값을 곱해 Set Actor Location 노드로 움직이도록 했다. 이후 Actor Location과 목표 지점이 가까워지면 (Vector Length와 비교 노드로 검사) Set Actor Location으로 목표 지점에 Actor Location을 고정하고 Is Moving 상태를 해지해 주었다.

  • 여기서 중요했던 점이 마지막에 Actor Location이 목표 지점과 충분히 가까워졌는지 확인하는 지점이었는데, 대충 근처에 왔다~ 라고 설정해주는 거리량이 충분하지 않으면(사진에서 5) 목표지점 근처에서 엘리베이터가 진동을 한다. 한 틱 내 이동량과 검사 Tolerance 를 잘 설정해 주는 것이 중요하다.
  • 또한 중요했던 것이, 실제로 아직은 문제가 발생하진 않았지만, "거리 검사 후 Moving상태 해제" 와 "액터 움직임" 을 한 틱 내에서 검사를 끝낸다" 라고 설정하는 게 Tick별 노드 계산에 도움이 된다는 점을 배웠다.
profile
개발지망생

0개의 댓글