공부/Unreal

24.06.20

월러비 2024. 6. 25. 12:07

블루 프린트 실행

  • 노드끼리 연결된 흰 선 : 노드의 실행 흐름

액터 폰 캐릭터 관계

  • Actor : 화면에 배치될 수 있는 최소한의 단위 (상속받으면 접두사 A가 붙는다.)
    • Pawn : 액터를 상속받은 객체 - 입력을 받는 객체다. (A_Pawn)
      • Character : 폰을 상속받은 객체 - 캐릭터 무브먼트 컴포넌트를 갖고 캐릭터의 움직임(걷기, 달리기, 수영)을 담당하는 객체다. (언리얼은 이미 동작이 만들어져있고, 그것을 조합만 하면 된다.)
  • 플레이어는 Character로 생성한다.

플레이어 생성

  • 콘텐츠 브라우저 - 우클릭 - 블루프린트 클래스 클릭 - Character클릭
  • 캡슐 컴포넌트 : 캐릭터의 충돌체다. (캡슐 콜라이더)
  • 화살표 컴포넌트 : 캐릭터의 전방 벡터를 알려주는 컴포넌트다.
    • 캐릭터를 넣으면 화살표 컴포넌트와 전방벡터가 안맞는 경우가 생기는데, 이런 경우 캐릭터를 회전시켜 전방벡터를 맞춰줘야한다.
  • 스테틱 메시 : 모양이 정해져있고(큐브, 캡슐), 움직임(애니메이션)이 없는 메쉬
  • 스켈레탈 메시 : 움직임(애니메이션)이 있는 메쉬 (뼈대가 있다)
  • 캐릭터 무브먼트 컴포넌트 : 캐릭터의 움직임을 관할하는 컴포넌트다.

캐릭터 에셋 확인

  • 캐릭터 에셋을 받고 스켈레톤 더블클릭
  • 우측 상단에 뼈대 아이콘을 누르면 캐릭터 에셋의 뼈대를 확인할 수 있다.
  • 에셋 경로 읽는법
    • (에셋 타입 : 캐릭터는 스켈레톤) / 루트 폴더(Game : 콘텐츠 폴더를 의미한다.) / 캐릭터 에셋까지 이어지는 경로들
  • 언리얼의 에셋 파일은 파일명.파일명으로 표시된다.
  • 캐릭터 블루프린트는 경고창이 뜰 수 있다.
    • 주 : 이는 데이터 전용 블루프린트 ~~
    • 그냥 풀 블루프린트 하이퍼링크처럼 생긴 버튼 누른다.
  • 메시 컴포넌트 클릭 - 메시항목의 스켈레탈 메시 클릭 - 넣은 캐릭터 에셋 스켈레톤 삽입
  • 캐릭터는 발이 캐릭터의 중심이기 때문에 캡슐의 중심을 발에 맞춘다.
    • 기본 캐릭터는 2m를 기준으로 하고, 현재 사용하는 캐릭터 에셋의 키는 180cm다.
  • 설정한 캐릭터 블루프린트를 레벨 에디터에 배치하면 캡슐에 맞춰서 바닥에 붙게된다.
  • 기본적인 캐릭터의 카메라는 캡슐 컴포넌트 안쪽으로 1인칭 시점으로 보여진다.

캐릭터 이동

  • 편집 - 프로젝트 세팅 - 엔진 항목 - 입력 : 입력하는 것을 세팅하는 옵션이다.
  • 액션 메핑 : 점프, 공격 등 한번만 입력되는 입력
  • 축 매핑 : 계속 연속적으로 값이 들어가는 입력 (이동)
  • 축 매핑 - +버튼 클릭 - 매핑 이름 작성 - 바로 밑의 목록 클릭 - (이동이니 키보드 선택한다.) 키보드 클릭 - 할당할 버튼 클릭(전방이니 W) - 스케일(버튼이 입력되면 할당되는 값 : 1.0)
    • 같은 축으로 사용된다면 생성한 매핑 옆의 +버튼을 누른다 - 키보드 s - 스케일 : -1.0
  • 좌우도 넣을것이니 새로 매핑한다.
  • 이벤트 그래프 - 우클릭 - 생성한 매핑 이름 검색 - 축 값 : 그냥 값을 가져다 쓴다. / 축 이벤트 : 키가 입력될때마다 이벤트가 호출된다(지금은 이벤트 사용) -
    • Axis Value : 매핑할때 세팅한 스케일 값
    • 키가 입력될때마다 실행 선을 따라서 이벤트가 실행된다.
  • 캐릭터 자체를 이동시킬 주체를 지정해줘야 제대로 입력을 받는다.
    • ‘빙의’ 라는 개념이다.
  • 캐릭터 블루프린트 - 디테일 - 폰항목 - 플레이어 자동 빙의 (0 ~ 7개 까지 동시에 입력 받을 수 있다 - 패드 7개까지 연결할 수 있다는 의미다.) - Player 0번 선택(기본은 0번이다.)
  • 이벤트 그래프 - 우클릭 - Add Movement Input 클릭 - World Direction 설정 후 Axis Value와 Scale Value 연결
    • World Direction : Scale Value(매핑때 할당한 스케일 값)와 World Direction에 설정한 값을 곱한 값으로 이동시킨다. - 즉, x : 1.0으로 준다면 W를 누를때 World Direction(1.0) * 스케일 값(1.0)이 곱해져서 이동한다.
    • Scale Value : 매핑에 할당된 스케일 값이 들어올 핀
  • 좌우도 위와 같이 진행
  • 마우스를 움직여 카메라 회전
  • 이동 매핑과 마찬가지로 세팅하지만 키 할당은 마우스 X(HorizontalLook 세팅), 마우스Y(VerticalLook)
    • 게임에서 상하 시야는 마우스를 위로하면 아래를 보고, 아래로 내리면 위를 보니 스케일 값을 1.0으로 둬야한다.
    • 실제 게임에서는 옵션으로 수직축 반전 시키는 기능이 있다.
  • 마우스 맞춰서 회전
    • 이벤트 그래프 - 우클릭 후 마우스 매핑 노드 검색 - 실행 핀 끌어 놓고 Add Controller (마우스 회전 축) Input 검색
  • 수직 축 회전은 카메라 세팅에서 ‘폰 제어 회전 사용’을 체크해야한다.

캐릭터 카메라 배치

  • 캐릭터 블루프린트 - 컴포넌트 창 - 메시 컴포넌트 클릭 - 좌측 상단 +버튼 클릭 - (한글로)스프링 검색 - 스프링 암 컴포넌트 클릭 - 좌측 상단 +버튼 클릭 - 카메라 검색 후 카메라 컴포넌트 클릭
    • 스프링 암 컴포넌트 : 캐릭터를 따라오는 카메라를 고정시켜주는 컴포넌트다.
    • 디테일 - 카메라 항목 - 타깃 암 길이 : 카메라가 캐릭터를 비추는 간격이다.
    • 카메라 기본 위치 : 캐릭터 우측 발을 바라본다.
  • 실제 게임에서 카메라는 캐릭터를 좌측에 놓고 우측을 비운다.

 

벡터

  • 위치벡터 + 위치벡터 : 그만큼 이동한 위치
  • 위치 + (방향벡터(크기 1로 노멀라이즈한다.) * 거리) = 해당 방향으로 거리만큼 이동한 위치벡터
    • 방향벡터 * 거리 : 결국 그만큼 이동한 위치와 같다.
  • 대각 이동을 하면 x : 1, Y : 1을 하면 대각 1이 안나오는 이유
    • 피타고라스
  • 노멀라이즈 하는 이유 중 하나 : 대각 이동시 속도를 동일하게 맞추기 위해서이다.
  • A 위치벡터 - B 위치벡터 : B가 A를 바라보는 방향 벡터(벡터의 크기는 A와 B의 거리)

메테리얼 생성

  • 콘텐츠 브라우서 - 우클릭 - 메테리얼 클릭 - 디테일에서 디폴트 값으로 베이스 컬러를 설정하고 실행 핀을 베이스 컬러에 연결한다.
    • 메테리얼은 쉐이더에서 벡터가 float4이기 떄문에 RGBA로 조절한다.
  • 메테리얼 클릭 - 우클릭 - VectorParameter 검색
  • 베이스 컬러 : 보여질 색

액터 좌표 지정

  • 이벤트 그래프 - BeginPlay - 우클릭 후 Set Actor Location 검색 - Get Actor Location(self) 검색 - 변수 +버튼 클릭 - 벡터 변수(Location) 생성 (기본값 0, 200, 0) - Get Actor Location과 Location 덧셈 ⇒ 벡터(내 위치) + 벡터(Location 기본값 0, 200, 0) : 내 위치에서 (0, 200, 0) 만큼 이동하여 렌더링된다.
    • 자신의 위치를 구하는 함수 : Get Actor Location(self)

변수 팁

  • 변수 생성 후 오른쪽에 눈 모양 아이콘을 클릭하여 눈을 뜨게하고 컴파일을 누르면 디테일 창에서 기본값을 입력할 수 있다.
    • 카테고리 항목을 지정할 수 있어서 항목별로 변수를 모을 수 있다.

방향 벡터 구하기

  • 벡터 변수와 Normalize를 검색하여 연결하면 벡터가 1로 변환된다.
    • Tolerance : 자신의 크기를 나눠서 1을 만들어야 하는데, 나눠야 하니까 0은 나오면 안되니 0일때 최솟값으로 Tolerance로 지정한 수를 넣어 나누라는 것이다.

액터 연속적으로 자동 이동시키기

  • 틱 이벤트 - 액터 변수(나말고 다른 액터) 생성 - Get Actor Location 연결 : 함수에 연결된 액터 노드의 위치를 가져온다. - ⇒ 할당한 액터의 위치를 표시하는 기본 순서
    • Delta Seconds : 이전 프레임 - 현재 프레임 뺸 시간
    • 사용 이유 : 컴퓨터가 빠르면 틱이 더 많이 검출되니까 그 시간 간격을 곱해서 보정하기 위해 검출한다.
    • 액터 변수 타입 : 기본값을 못넣고 배치한 액터를 아웃 라이너에서 끌고 할당할 수 있다. (눈을 켜얗ㄴ다.)
  • 틱 이벤트 - 액터 변수 생성 - Get Distance To - self 검색하고 셀프 레퍼런스 가져오기 클릭 ⇒ 다른 할당한 액터와 자신의 액터 사이의 거리를 반환하는 기본 순서다.
    • Get Distance To : 연결한 액터들의 거리를 반환하는 함수 노드다.
  • 틱 이벤트 - Set Actor Loccation 검색 - 다른 액터 할당한 변수 놓기 - Get Actor Location 검색 후 연결 - Get Actor Location(self) 검색 - 다른 액터의 벡터와 셀프 벡터를 -연산을 한다.(셀프 액터가 다른 액터를 바라보는 방향이 나온다.) - Normalize 노드를 검색하고 연결한다. - Speed(float, 기본값 10.0f) 변수를 생성한다. - Speed와 틱 이벤트의 Delta Seconds를 곱한다. - 아까 계산한 방향 벡터와 Speed 보정값을 곱한다. - Get Actor Location(self)를 검색하여 방향과 Speed를 곱한 값과 더하고, Set Actor Location에 연결한다.
    • Get Actor Location(self) : 셀프 레퍼런스를 가져와서 연결하지 않아도 배치만 하면 셀프 레퍼런스가 가져와진다.
    • 틱 이벤트의 Delta Seconds(보정값)를 곱하는 이유 : 프레임 별 스피드값의 차이가 나지 않도록 하기 위해서이다.
    • 즉, 내위치 + (방향벡터 * Speed 보정값) = 내 위치에서 방향벡터가 가리키는 방향으로 Speed만큼 프레임 단위로 이동하게 된다.

'공부 > Unreal' 카테고리의 다른 글

24.06.26  (0) 2024.06.28
24.06.25  (0) 2024.06.28
24.06.24  (0) 2024.06.25
24.06.21  (0) 2024.06.25
24.06.19  (0) 2024.06.20