Post

UE - 외부 데이터 임포트 및 BP클래스 만들기

임포트, BP 클래스스

UE - 외부 데이터 임포트 및 BP클래스 만들기

외부 에셋 임포트 방법

  1. 왼쪽 창의 콘텐츠에 마우스 오른쪽 클릭.
  2. 탐색기에서 표시 클릭. 열린 파일에 외부 파일을 옮겨준 다음 돌아가면 팝업창이 뜬다.
  3. 과제에선 Skeletal Mesh를 사용하지 않고 Static Mesh로 임포트 하라해서 스켈레탈 메쉬 항목을 체크 해제했다.
  4. 임포트 해보니 오류가 발생했다. 다시 체크한 다음 임포트할 때는 잘 되는 걸 보니, Static Mesh가 없나보다. 여러모로 시도해본 결과, Common Mehses에서 모든 메시를 타입으로 강제 항목에서 Static Mesh를 선택하니 임포트에 성공했다.

블루 프린트 생성

  1. 다른 콘텐츠들이 있는 창에 오른쪽 마우스 키를 눌러 블루프린트 클래스를 생성한다. 부모 클래스는 액터로 정했다. 이름은 장애물을 뜻하는 obstacle
  2. 더블 클릭으로 들어가보자. 여기서 방금 임포트 한 메시를 붙여주려면 액터에 스태틱 메시 컴포넌트를 추가해야한다. 좌측 상단의 추가를 눌러 ‘스태틱 메시 컴포넌트’ 를 검색해 추가해준다.
  3. 이제 Static Mesh가 선택된 상태에서 오른쪽 디테일 창을 보면, 스택틱 메시 항목을 찾을 수 있다. 여기서 방금 받은 메시를 선택해주자. 메시가 상당히 크다. 참고로 가운데 창인 뷰포트를 조작하고 싶다면, 마우스 오른쪽으로 시점 회전, 마우스 스크롤로 확대, 축소, 마우스 휠 클릭으로 카메라 위치 이동이 가능하니 참고하자. 일단 크기를 줄여보자. 디테일 창에서 트랜스폼을 찾아보면 위치, 회전, 스케일을 찾을 수 있을 것이다. 스케일이 물체의 크기를 조절하는 항목이므로 x, y, z 속성을 모두 0.1로 수정했다.

작업을 다 마쳤으면 잊지말고 반드시 컴파일 하도록 하자. 컴파일하지 않으면 작업 결과가 적용되지 않는다.

컴파일까지 성공적으로 마쳤으면, 다시 씬으로 돌아가자. 방금 만든 BP 클래스를 드래그 해 월드에 옮겨 배치하자.

움직임을 추가

다시 에셋을 열고 이번엔 좌측 메뉴의 이벤트 그래프를 더블 클릭해 이동하자. 이번에는 블루프린트를 이용해 이 액터에게 기능을 부여할 것이다. 설명 Event BeginPlay : 게임이 실행되었을 때, 단 한 번 실행된다. 주로 생성가 관련된 일은 여기서 하면 된다. Event ActorBeginOverlap : 이건 이 액터가 다른 액터와 겹칠 때 작동한다. 물체의 충돌과 관련된 기능을 구현할 때 사용한다. Event Tick : 이건 매 프레임마다 작동하는 친구다. 프레임은 화면이 한 번 갱신하는 작업이니, 화면이 갱신될 때마다 실행하는 것이라 생각하면 된다. 밑에 Delta Seconds는 전 프레임에서 이번 프레임까지 걸린 시간이다.

회전 추가

우선 회전을 넣어보자. 내가 원하는 건 계속 한 방향을 돌아가는 것이니, 매 프레임마다 장애물의 rotation에 값을 더해주면 된다. 매 프레임 동작해야하니 Event Tick을 이용하면 된다.

current rotation = current rotation + delta time * rotSpeed

설명 :

  • 변수로는 회전 속도를 저장할 플로트형 변수 rotSpeed 생성
  • rotSpeed * delta time은 플로트 형이지만, rotation은 백터 자료형이므로 Make Rotator 함수로 결과값을 백터로 만들어줬다.
  • 마지막으로 Add Local Rotation으로 Static Mesh의 rotation을 회전시켰다.

컴파일을 마치고 실행해보면 회전하는 모습을 볼 수 있다.

이동

왕복하는 물체를 만들 것이기 때문에 sin 함수를 이용할 것이다. 속도와 범위를 조절할 수 있게 변수를 추가하자. sin 함수의 주기가 빨라져야 속도가 상승하고, sin 함수의 범위가 (1 ~ -1) 이니 range를 곱해 범위를 늘려준다.

sin(timeSec * moveSpeed) * range

설명 :

  • 변수는 백터 타입의 location, 플로트 타입 moveSpeed, range를 생성했다.
  • 액터의 위치를 저장할 locatio은 게임이 시작될 때 값을 받아올 것이므로 BeginPlay에서 액터의 위치값을 받아온다.
  • sin 함수는 오일러각을 이용한 degree로 선택했고, 여기도 결과 값을 백터로 만들어야해 Make Vector 함수를 이용했다.
  • 이렇게 구한 값을 현재 location에 더해 Set Actor Location으로 위치를 갱신한다.

회전과 이동을 같이 하기 위해 Sequence 노드를 추가하여 이어주었다.

컴파일을 마친 뒤 실행해보았다.

This post is licensed under CC BY 4.0 by the author.