DAY 4 플레이어 캐릭터와 나만의 레벨 디자인

칼든개구리·2024년 12월 20일
0

[언리얼TO리얼]

목록 보기
38/42
post-thumbnail

블루프린트에 너무 약해서 처음부터 다시 진도를 따라잡아본다

이번 시간에는 네모친 레벨에서 진행하도록 한다.

폴더를 따로 만들어준 뒤, 블루프린트 클래스에서 캐릭터를 생성해준다

블루 프린트 클래스를 더블 클릭하여 확인하면 캡슐이 존재하고, 컴포넌트로는 캡슐 컴포넌트, 화살표 컴포넌트, 메시, 캐릭터 무브먼트가 존재한다

캐릭터 블루프린트에서 기본적으로 메시가 추가되어 있으므로 메시를 골라 선택해준다

메시를 불러오고 아래와 같이 돌려준다

그 다음에는 카메라와 스프링 암이 필요하기 때문에 추가해준다.

스프링 암 밑에 카메라를 배치해주고 카메라가 아닌 스프링 암을 회전 시켜 위에서 쳐다보게 끔 만들어준다


Enhanced Input System - Move

캐릭터를 움직이기 위해서는 언리얼 엔진의 입력을 받을 수 있어야 한다. 프로젝트 세팅- 입력에서 하는 것보다 향상된 인풋 시스템으로 이를 대체한다. 유저들의 입력을 매핑할 수 있게 입력 액션과 입력 매핑 컨텍스트를 생성해준다.

Look과 Move는 X,Y축을 모두 사용하기 때문에 설정값에서 Axis 2D를 설정해준다.

IMC_NBC_DefaultMappingContext는 아래와 같이 세팅해준다. 입력 액션에서 입력 이벤트를 정의하고, 매핑 컨텍스트에서 키를 액션에 매핑해준다는 개념이다.

OnlineLearingkit 다운받으면서 함께 온 IA_Move 같이 이름이 햇갈릴 수 있는 것들을 주의하고 새로 만든 것에 키를 매핑해준다


⛔여기서 솔직히 스위즐 입력 축 값 이라는게 뭔지 감도 안온다
찾아본 것을 정리해보도록 한다
모디파이어(Modifier):

  • 입력 데이터를 수정하거나 조작하는데 사용한다
  • 예를 들어 특정 키 입력의 반응을 반전시키거나 값을 스케일링할 때 사용한다.
  • "부정"이라고 하는 것은 입력값을 반전시키는 역할을 한다.

스위즐 입력 축 값(Swizzle Input Axis):

  • 여러 축(x,y,z)을 가진 입력 데이터를 재구성 하거나 순서를 바꾸는데 사용한다
  • 예를 들어, x 축데이터를 y축으로 교환하거나, 특정데이터를 무시하고 나머지 축만 사용할 수 있게 설정할 수 있다.
  • Swizzle(x, y ,x ) -> Swizzle(y,x,z)로 재배열 하면 입력 축 값이 바뀐다.
  • 여기서 w키는 앞으로 이동하는 입력을 담당하며, 보통 z축(y축)에 영향을 미친다
    -스위즐이 없으면 입력 값은 그대로 사용된다
    -스위즐이 적용되면 z축 입력값을 x축이나 y축으로 바꾸는 등의 재구성이 가능하다
  • A,D 키는 좌우 이동(보통 X축)에 영향을 미친다
    -A는 X축(-1)방향으로, D는 X축(1) 방향으로 이동
    -여기서 스위즐 사용하면 좌우 이동 데이터를 다른 축으로 변환할 수 있다.

잠깐 이러니까 회전이 진짜 햇갈리고 있다...

언리얼에서 월드 좌표를 기준으로 축 방향은 다음과 같이 정의된다


X축 (빨간 축): 앞/ 뒤 방향으로 이동

  • +X 방향: 앞으로 이동(월드 공간에서 양의 X축 방향)
  • -X 방향: 뒤로 이동(월드 공간에서 음의 X축 방향)

Y축(초록 축): 좌/우 방향

  • +Y 방향: 오른쪽으로 이동(월드 공간에서 양의 Y축 방향)
  • -Y 방향: 왼쪽으로 이동(월드 공간에서 음의 Y축 방향)

Z축(파란 축): 위/아래 방향

  • +Z 방향: 위로 이동(월드 공간에서 양의 Z축 방향)
  • -Z 방향: 아래로 이동(월드 공간에서 음의 Z축 방향)

로컬 좌표 VS 월드 좌표

  • 월드 좌표: 언리얼 엔진의 전역 공간에 고정된 축 방향
  • 로컬 좌표: 특정 객체의 축 방향 객체가 회전하면 XYZ도 같이 회전
  • 보통 캐릭터나 카메라 이동은 로컬 좌표 기준으로 작업함

다음 플레이어의 이벤트 그래프에 들어가서 다음과 같이 작업해준다

enhanced 저것은 엔진에게 이걸 사용하겠다~!라고 말하는 것이다.
저 위의 코드들로 움직이는 건 아니고 0번 플레이어에게 저 mapping context를 사용하겠다~라고 말하는 것이다


move 관련해서 이제 블루프린트를 짜볼건데, 액터의 앞 벡터를 world direction에 연결해주고 x값은 scale value에 연결해준다.


여기서 a와 d에 스위즐 입력 축 값을 넣어서 Y방향으로 넣어준 것이다.

x방향으로 월드를 기준으로 캐릭터가 보고있는 방향으로 가겠다?는 의미다


앞뒤로 움직이기 성공!!


월드 스페이스 기준으로 y축 즉 오른쪽으로 보내주기 위해 add actor right vector 만들어서 연결해준다

아.. 진짜 암기의 영역이다

x는 yaw에 연결,, y는 pitch에 연결...


이렇게 피치 사용에 체크해주면 플레이어가 술먹은듯 갸우뚱하며 움직이는데 이는 캐릭터 전체에 적용되어 이렇다고 할 수 있다. -> 이 마우스만 움직이고 싶기 때매문에 두개 체크를 다 꺼주고 캐릭터 무브먼트에서 rotation으로 검색하여 무브먼트 방향으로 회전 조정을 눌러준다
스프링암에 폰 회전 제어를 클릭한다. 근데 오른쪽 버튼이나 왼쪽 버튼 누르면 애가 빙글빙글 돈다

위에 잔건 월드 스페이스 기준이다. 플레이어가 바라보는 방향이라는 다른 말이다. 월드를 기준으로 오른쪽으로 움직이는 것이고, 월드를 기준으로 왼쪽으로 움직이는 것이다. 우리가 해야할것은 컨트롤러를 기준으로 움직여야 한다.
아까 스프링 암에 폰 회전 제어를 체크해줬는데 카메라가 지금 컨트롤러 인것이다.


폰 기준에서 yaw 를 받아서 앞으로 가는 것은 수정함


옆으로 가는 것도 같은 방식으로 제어한다

질문: 앞으로 가는데 z를 쓰는 이유?
회전을 방향으로 바꿔주는 중이다. 회전이 z이고 기둥이 z 축이니 둥글둥글하게 회전을 함
이 회전을 어떤 방향으로 할건지 정해주기 위해 z축을 사용함 --?사실 이해가 안가요 엉엉 선생님 살려주세요


점프는 아주 간단히 구현완료!!


📝TIL: 언리얼 엔진 블루프린트를 활용한 캐릭터 컨트롤 구현

축 방향 및 회전에 대한 이해
월드 좌표와 로컬 좌표

  • 월드 좌표: 전역 공간 기준으로 축 방향 고정
    -X축: 앞/뒤 이동
    -Y축: 좌/우 이동
    -Z축: 위/아래 이동
  • 로컬 좌표: 캐릭터 기준으로 축이 회전
    -캐릭터의 이동이나 회전은 일반적으로 로컬 좌표 기준으로 작업

스위즐 입력 축 값

  • 입력 데이터의 축을 재구성하거나 순서를 바꿈

축회전과 이동

  • 언리얼에서 Z축은 회전을 나타내며 주요 축이며 이를 활용해 캐릭터 이동 방향 제어
  • 컨트롤 기준 이동:
    -스프링 암의 "폰 회전 제어"를 활성화 해 컨트롤러(카메라)가 바라보는 방향을 기준으로 이동을 제어

Roll, Pitch, Yaw의 정의와 활용
3D 공간에서 객체의 회전을 설명하는 세가지 주요 회전 축이다.
1. Roll

  • 축 방향: x 축을 기준으로 회전
  • 동작: 좌우로 회전하는 움직임 흔히 구르기 표현
  • 예시
    -비행기가 양 날개를 기준으로 기울어짐
    -캐릭터가 옆으로 회전할 때

2 Pitch

  • 축 방향: Y축을 기준으로 회전
  • 동작: 흔히 고개를 끄덕이는 동작
    -예: 캐릭터의 카메라가 위아래로 회전할 때

3 Yaw

  • 축 방향: Z축을 기준으로 회전
  • 좌우로 머리를 흔드는 움직임. 흔히 머리를 돌리는 동작
  • 예시: 캐릭터가 좌우를 돌아볼 때

❗따로 이해하면서 정리하는 시간을 가져야겠다!

profile
메타쏭이

0개의 댓글