안녕하세요, 솜이불입니다.

 

이번에 작업하면서 OnActorBeginOverlap의 인자가 햇갈린다는 얘기를 들어서 한번 작성해봅니다.

 

OnActorBeginOverlap 이벤트

  • Overlapped Actor : 마지막으로 오버랩됬었던 액터, 위의 경우에는 TriggerVolume이 리턴됨.

  • Other Actor : 마지막으로 빠져나간 액터, 만약 플레이어 캐릭터라면 플레이어 캐릭터 클래스가 리턴됨.

언리얼엔진에서 제공해주는 기본 VR 템플릿의 텔레포트 기능을 다른맵에 적용하는 방법에 대해서 설명해보고자 합니다.


언리얼을 조금 많이 다뤄보고, VR을 좀 만져보신분들은 그거 모르는사람이 어디있어? 하실수도 있으시겠는데..
오늘까지 저도 당연하게 모든분들이 알고있을줄 알고있었던 사실이였는데, 의외로 물어보시는분들이 많더라구요 ㅋㅋ

그래서 이번기회에 한번 작성해보고자 합니다.

자, 시작 해볼까요?

일단 테스트를 할 맵은 초보자들이 한번쯤은 켜볼 Third Person Template의 기본 예제 맵입니다.

VR Template의 MotionControllerPawn을 배치하고 한번 돌아다녀봅시다.



"어.. 앙.. 앙대자나?"

위의 사진과 같이, 실제로 참 간단하게 이동할수있을거같았던 VR Template의 맵과 비슷하게 생긴 Third Person Template 맵인데 왜 예쁜 곡선 텔레포트가 생성이 안될까요..??

정답은 바로 "네비 매쉬"입니다.



그렇습니다. <P>키를 눌러보면 네비매쉬를 확인할수있는데, Third Person 맵은 네비매쉬가 설치되지않아서 네비게이션이 되지않는거였습니다. 그에 반해서 VR Template 맵은 네비매쉬가 생성되어 있는것을 확인할수있습니다.

자 이쯤이면 의문이 생기지 않을수가 없습니다.

"아니 네비매쉬 그거 AI 움직일수있는 범위 지정할때만 쓰는거아니였어?!"
-> 저도 처음에는 네비매쉬를 사용한 이동방식은 처음봤습니다. 하지만 내부를 뜯어보니, Path를 예측하는 노드를 기반으로 네비매쉬의 텔레포트할 지점을 투영하는 방식으로 만들어져 있었습니다. 여기에 네비매쉬가 있는지 없는지 검사를해서 네비매쉬가 없으면 텔레포트를 못하도록 막아두는 형식으로 되어있더군요. <자세한설명을 못드려서 죄송합니다>

여하튼 정답이 네비매쉬인걸 알았으니 이제 한번 적용해봅시다.
이부분은 AI를 다뤄보신분들이라면 아주 쉽게 적용이 가능할텐데요, AI를 안다뤄본 초보분들은 안해봤어도 겁안먹으셔도됩니다.

아.주.쉽.습.니.다
거짓말이아니라 정말로 쉽습니다.


<모드 탭>의 <불륨 탭>을 눌러보시면 중간보다 아래쪽에 Nav Mesh Bounds Volume 이라는 액터가 있습니다.
이 액터가 바로 네비매쉬를 생성해주는 액터인데요, 이걸 그냥 끌어다가 레벨에 배치해주시면 끝입니다.

참 쉽죠?

-> 여담으로 밑에 Nav Modifier Volume의 역활은 이 액터를 네비매쉬에 설치하면 설치된 부분은 네비매쉬가 지워집니다. 그렇습니다. 지우개같은 놈입니다. Modify의 뜻이 수정하다 라는 뜻이니까요!


네비매쉬 볼륨을 설치해주신다음 그게 끝이아닙니다. 빌드 탭의 경로 빌드까지 해주신다면, 비로소 네비매쉬가 적용됩니다.
빌드해줍시다. 그렇게 하면 짠!! 아주 예쁜 녹색의 네비매쉬가 빌드 되었습니다. 다시 말씀드리지만, P키를 누르시면 네비매쉬가 정상적으로 빌드되었는지 확인이 가능합니다.




자그럼 다시 VR로 실행해서 테스트 해보면!! 위의 이미지와 같이 예쁜 곡선을 그리면서 네비매쉬가 있는곳은 텔레포트가 가능해집니다!!

여기까지 제 공략글을 읽어주셔서 감사합니다.

참고로 콜리전의 형태에 따라서 네비매쉬가 생성되는 모양이 천차만별이 될수도있으니까 조심해주시구요..
이부분은 책..책임지지 않습니다!!

자 그럼 다들 즐거운 VR 개발되세요~~! ㅎㅎ


 

AI 컨트롤러가 스폰이 되지않아서 그럴가능성이 있습니다.

 

그런 상황일때, 비긴 플레이에 해당 API를 연결해주시면 해결 됩니다.


이번에는 일반 블루프린트에서 레벨 블루프린트로 접근 하는 방법을 소개 드릴까 합니다.


1. 블루프린트 디스패처 사용하기

2. 블루프린트 인터페이스 사용하기

기본적인 블루프린트 통신에 대해서는


해당 문서가 잘 설명해 주고 있으므로 패스하도록 하겠습니다.

첫번째 방법은 이벤트 디스패처를 사용해서 이벤트
를 발생 시켜주는 방법인데요.
해당 방법은 레벨상에 해당 액터가 이미 배치 되어 있어야 한다는 전제로 작동이 됩니다.

문서에서도 레벨과 통신하기위해서 해당 방법을 많이들 사용하실텐데요, 방법이 하나가 더 있더군요.




두번째 방법은 다음과 같습니다.
인터페이스를 사용해서 레벨 블루프린트로 정보를 보내서 이벤트를 발생 시키는 방법입니다만,

아래 방법은 퍼시스턴트 레벨일 경우 사용이 안되는 단점이 있습니다.
하지만 디스패처를 사용해서 BP의 델리게이트 빨간줄이 왓다갔다 하는게 싫으신분들은 이걸로 사용하셔도 좋을거같긴합니다.



두번째 인터페이스를 사용해서 하는 방법은 모르시는 분들도 많을거같아서 공유합니다.


이번에는 엄청 신박한 기능을 발견하여 들고왔는데요.



언제부터인가 Print String에 개발 전용이라는 문구가 붙어 나오기 시작했었습니다.

저는 이걸 보면서 저걸 그냥 노드에서도 쓰면 좋지않을까 생각만 하고있었습니다만,

그게 실제로 기능으로 존재 하더군요.

하지만 Experimental 기능이라 좀 아쉽긴합니다만 그래도 향후 메인 기능으로 들어오지 않을까 기대를 하면서

이번에는 이걸 한번 소개 해볼까 합니다.

제가 테스트한 엔진 버전은 4.18 버전 입니다.

일단 이 기능은 다시한번 말씀드리지만 Experimental 입니다!!

아직 실험적인 기능이기때문에 사용시 어떤 문제가 발생할지 모르기때문에 사용에 주의를 바라겠습니다.

지금은 그냥 "아~ 나중에 이런기능이 나오는구나!" 라는것만 생각해주시면 되지않을까싶네요 ㅎㅎ

본론으로 들어가서

1. 이 기능을 키기 위해서는 우선 [편집] -> [에디터 개인설정]에 들어갑니다.


2. [에디터 개인설정] -> [블루프린트에디터] 탭에 들어가서 최하단 [Experimental] 탭을 열어주시면

[Allow Explicit Impure Node Disabling] 이라는 체크 항목이 있습니다.

이걸 체크해주면 이제 Development Only와 노드를 끌수있는 기능이 활성화 됩니다.


이제 기능을 켰으니 사용방법을 한번 알아봅시다.

먼저 저는 간단하게 요런 형태의 이벤트를 만들었습니다.


그리고 이벤트를 사용하는 형태라고 쳤을때, 해당 이벤트 오른쪽 마우스를 누르면 해당 메뉴들이 있습니다.


딱 봐도 아실거라 생각하기에 자세한 설명은 생략합니다.


참고로 해당 함수들을 개발 전용이나 비활성화 시킨다고해서 이벤트 선언부가 똑같이 변하지는 않습니다.


마지막으로 이벤트 선언부도 개발 전용이나 비활성화를 시킬수있습니다.

하지만 이렇게 사용할떄는 정말로 주의해서 사용하셔야 할 것 같네요.

개발 전용은 그냥 그대로 쓸수있지만, 비활성화된 이벤트인 경우 실행 노드는 비활성화 되지않아서 문제를 일으킬수도 있습니다.

이 방법은 왠지 잘못하면 로직이 꼬일수도 있을거 같은 느낌이라 설계부터 잘 생각해야 될 것 같습니다.




이번에 저도 처음 보는 기능이고 원했던 기능이 정말로 존재해서 깜짝 놀랬는데요.

이런 좋은 기능은 널리 알리는게 좋을거 같아서 카페에 공유 해봅니다. ㅎㅎ

지금까지 솜이불 이였습니다.

모두 즐거운 개발 되시길 바랄게요~

감사합니다.


과거에 작성했던 글입니다. 언리얼 카페 원문 (2015년 6월 2일)
본 강좌글은 4.7 버전기반이라 다른 부분이 많습니다.
2019년 기준 언리얼 엔진 4.21이 나온시점에서 VR 세팅은 따로 안해주어도 됩니다.

첫강좌로 언리얼엔진을 사용하여 VR을 적용하는 방법에대해서 한번 적어보겠습니다 %EC%A2%8B%EC%95%84%20%EB%8F%99%EA%B8%80%EC%9D%B4

일단 HMD는 현재 나와있는 오큘러스 리프트 세팅법에 대해서 적어볼게요.

예제 탬플릿은 삼인칭 블루프린트를 기준으로 작성하겠습니다.

엔진 버전은 최신인 4.7.6버전이구요.

결과는 오큘러스의 1인칭과 Non-VR의 토글기능을 만드는걸로 목표를 잡겠습니다.


일단 시작하면 이런 화면 이실겁니다.

여기서 1인칭으로 변환을 해줄건데요.

엄청 간단하게 변환을 해줄수있습니다.


3인칭 블루프린트폴더를 찾으신다음 저기보이시는 저 블루프린트를 들어갑니다.


저희는 오큘러스로쓸 1인칭과 일반화면의 논VR 2가지를 토글로 사용할것이니,
원래있던 FollowCamera는 그냥 냅두시고,
VR전용으로 사용할 Camera를 새로 생성하신뒤, 위의 사진처럼 캐릭터의 얼굴부분에 붙도록 세팅을 해줍니다.

카메라를 세팅하기전, 이상태로 실행하시면 매우 이상하게 보이니 일단은 실행시키지마세요 ㅋㅋ


그리고 VRCamera는 따로 세팅이 필요한데요. 저기 디테일탭에서 Use Pawn Control Rotation을 체크해주시길 바랍니다.

여기까지가 일단 기초 세팅이고, 두번째 블루프린트 부분을 설명드리겠습니다.

삼인칭 캐릭터 이벤트 블루프린트 부분에 가신뒤,

게임이 시작되면 오큘러스가 장착되어있는지 안되어있는지를 확인하기 위해,

Begin Play 이벤트를 선언한다음 Enable HMD와 분기문을 선언하여 밑의 사진처럼 구성해주세요.



Enable HMD는 현재 HMD가 사용가능한지 리턴해주는 변수입니다.
HMD가 연결되어있으면 VR 카메라를 사용해야하니 체크해주세요!

그리고 현재 VR모드인지 아닌지 저장해주는 Bool형변수를 따로 선언해줍니다.


저같은경우는 VRmod라고 했습니다.
옆에 노란눈을 눌러 외부에서 편집가능하게 해주시면 레벨블루프린트에서도 사용가능하시니 참고.

자 기본적인 변수선언들은 마쳤으니, 이젠 아까 위에 설정해줫던 카메라를 세팅하는 단계입니다.

VR 카메라와 3인칭 카메라의 컴포넌트를 블루프린트를 가져오신후,
컴포넌트에서 노드를 끌어 Activate와 Deactivate를 검색한후 밑의 사진처럼 구성을 해주시면 일단 카메라 세팅 완료입니다.
 


카메라 세팅까지 마쳤으니 이번엔 오큘러스를 세팅해줄 차례입니다.
오큘러스 세팅은 매우매우 엄청 간단합니다.

Execute Console Command를 검색해신뒤 Command 란에 stereo on 만 치시면 오큘러스 멀티렌더링이 됩니다!


물론 off를 쓰면 꺼지겠죠?
위의 함수들을 카메라세팅해줫던 뒷부분에 붙이시기만 하시면됩니다.


이제 오큘러스가 없다면, 무조건 NonVR 모드로 들어가겠죠?

자이제 토글 기능을 만들 차례입니다.

토글 기능도 매우 매우쉽습니다.


그냥 저렇게 붙여주시면 됩니다.


그냥 저렇게 붙이시면 토글기능 됩니다. 네..

뭐라구요? 너무 쉽다구요? 네.. 언리얼이 이래서 좋습니다 ㅋㅋ

끝입니다. 이제 실행시켜서 결과를 보면,


네.. 끝났습니다 ㅋㅋ


+ Recent posts