UE - 외부 데이터 임포트 및 BP클래스 만들기
임포트, BP 클래스스
외부 에셋 임포트 방법
- 왼쪽 창의 콘텐츠에 마우스 오른쪽 클릭.
- 탐색기에서 표시 클릭. 열린 파일에 외부 파일을 옮겨준 다음 돌아가면 팝업창이 뜬다.
- 과제에선 Skeletal Mesh를 사용하지 않고 Static Mesh로 임포트 하라해서 스켈레탈 메쉬 항목을 체크 해제했다.
- 임포트 해보니 오류가 발생했다. 다시 체크한 다음 임포트할 때는 잘 되는 걸 보니, Static Mesh가 없나보다. 여러모로 시도해본 결과, Common Mehses에서 모든 메시를 타입으로 강제 항목에서 Static Mesh를 선택하니 임포트에 성공했다.
블루 프린트 생성
- 다른 콘텐츠들이 있는 창에 오른쪽 마우스 키를 눌러 블루프린트 클래스를 생성한다. 부모 클래스는 액터로 정했다. 이름은 장애물을 뜻하는 obstacle
- 더블 클릭으로 들어가보자. 여기서 방금 임포트 한 메시를 붙여주려면 액터에 스태틱 메시 컴포넌트를 추가해야한다. 좌측 상단의 추가를 눌러 ‘스태틱 메시 컴포넌트’ 를 검색해 추가해준다.
- 이제 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 노드를 추가하여 이어주었다.
컴파일을 마친 뒤 실행해보았다.