본문 바로가기

볼봇의 코딩 생활

(51)
[UE4] 웹 동영상 재생하는 플러그인 개발 (WebMediaPlayer) 이번에는 필자가 만든 플러그인에 대해 소개하는 시간을 가지도록 하겠다. 마켓 플레이스에 올려보려고 시도해봤으나 퇴짜 맞았고, 혼자 가지고 있기도 아깝고 해서 깃허브에 올리고 가볍게 홍보도 해보고자 한다. 언리얼 미디어 프레임워크와 http 모듈을 활용해서 비디오 재생 플러그인을 만들었다. 완성하고 보니 미디어 프레임워크에 크게 의존하고 있다는걸 알게 되었는데 (이게 퇴짜 원인 인듯하다) 비디오 캐싱을 통해 서버단 트래픽도 아껴 줄 수 있고, 무엇보다 블루프린트로 쉽게 구성 할 수 있도록 만들어두어서 잘 쓰면 나름 합리적인 플러그인이 될 수 있다고 생각한다. 서두는 이쯤에서 하고 예제로 만든 (예제 만드는게 가장 오래 걸렸다) 맵을 보도록 하겠다. 실행 영상 URL 집어 넣으면 알아서 다운로드 한 후 재생..
UE4 렌더 타깃을 사용하여 CCTV 를 만들어보자 이번 포스팅에서는, 렌더타깃을 사용해서 CCTV 와 같이, 인 게임에서 실시간으로 씬을 캡쳐해서 게임 내에서 출력 해보는 과정을 알아 볼 것이다. 우선 과정을 마치면 아래와 같은 결과를 얻을 수 있다. 수영장을 실시간으로 캡쳐하여 인 게임 TV 에 보여주고 있다. Scene Capture 액터 두기 모드 탭에서, 'Scene' 이라고 검색하면 두가지의 캡쳐 방식이 나온다. 2D 캡쳐는 말 그대로, 화면을 2D 로 캡쳐 한다는 것을 의미한다. 이는 CCTV 와 같은 평면의 화면에 출력할때 좋다. 큐브 캡쳐는 입체로 캡쳐를 하게 되는데, VR 과 같이 360도 화면에서 사용 할 수 있다. 우리의 목적은 CCTV 를 만드는것 이므로, 2D 캡쳐를 사용하도록 하겠다. 배치해보면, 카메라가 나온다. 이 카메라를 ..
[UE4] 언리얼 엔진에서 .pmx 임포트 하기 MMD (미쿠미쿠댄스) 프로그램에서 사용되는 확장자인 .pmx 파일로 만들어진 모델파일을 언리얼엔진에서 불러와 적용해보려고 한다. 추가로 .vmd 파일 (Vocaloid Motion Data) 파일도 적용하여 MV 영상 을 제작해 내는것을 목표로 한다. 언리얼 엔진에서는, 비공식적으로 플러그인을 통해 .pmx 파일을 임포트 할 수 있는 기능을 제공했다. 하지만 지금은 개발이 중단됬는지 4.16 버전 까지만 나왔고, 현재 필자가 사용하는 4.24.1에 대응하는 플러그인은 없었다. https://github.com/bm9/IM4U bm9/IM4U IM4U Plugin Release Repository for Unreal Engine 4 .**DEVELOPMENT DISCONTINUED** - bm9/IM4U..
[UE4] SteamVR 모션 컨트롤러가 작동하지 않을 때 VR 게임을 개발하면서, 모션 컨트롤러의 사용은 필수이다. 4.24 로 엔진 버전을 올리고 늘 똑같이 MotionControllerComponent 를 추가해서 실행해봤는데 안된다. MotionSource 도 제대로 설정했는데 안된다. '아무키' 노드를 연결하고 모션 컨트롤러 키를 눌러봤는데 안된다. 이상한 마음에 VR 템플릿을 가져와서 실행해보니 된다. 결론적으로는 내 프로젝트 어디선가 문제가 발생했다는건데, 며칠간 삽질 한 결과 SteamVR Manifest 관련 문제임을 알게 되었다. 해결하기 관련 자료를 찾아봤는데, 정확히 저 파일이 어떤 역할을 하는지 알아내지 못했다. 우선 VR 템플릿이 잘 작동하니 파일을 대충 읽어보고 config 폴더에 붙여넣었다. VR 템플릿을 하나 만든다. config ..
[UE4] License for package Android SDK Build-Tools not accepted. 오류 해결 언리얼 엔진 4.21 버전에서, 안드로이드 앱으로 패키징을 할때 Build-Tools 가 라이선스 승인이 안되어 있다는 오류가 발생했다. 이전에도 (4.19 사용당시)꽤 자주 발생 했었는데, 이번에 정리를 하면서 해결책을 확실히 잡아두는 편이 좋다고 판단 했고 이번에 글을 쓰기로 마음 먹었다. 이 오류의 원인은 UE4가 안드로이드 SDK 26.0.1을 기본으로 사용하고 있는데 빌드는 26.0.2로 시도하려고 했기 때문이다. 즉, AndroidCodeWorks 으로 SDK 를 설치했다면 26.0.1이 기본으로 설치, 라이선스 승인을 했겠지만, 빌드할 때는 26.0.2를 찾기 때문에 당연히 설치도 안됬고 라이선스 승인도 안됐을것 이다. 그렇다면, 해결책은 두가지 인데. 빌드를 26.0.1으로 할것이냐, 26..
[UE4] VisualStudio 를 위한 인텔리센스 구성 언리얼 엔진에서 C++ 프로그래밍을 하다 보면(사실 인텔리 센스 문제는 C, C++ 계열에선 좀 심각한 편이다) 가장 불편한 것 중 하나가 바로 "인텔리 센스"이다. 외국에서는 "인텔리 노센스"라는 말이 나올 정도. 필자도 언리얼 위에 C++ 코드를 당연히 작성해보았고, 한없는 불편함을 느꼈다. 오늘, 그 불편함은 극도로 커졌고 이번 겨울방학에 언리얼을 정말 열심히 하겠다는 마음에, 인텔리센스를 고쳐보기로 마음먹었고, 해냈다. 이 포스팅을 보면 아래와 같은 멋진 인텔리 센스 효과를 얻을 수 있고, 독자분들의 언리얼 개발 속도는 크게 향상될 것이라고 믿는다. (VS 2017에서 테스트했으며, 이전 버전에서도 돌아갈 것이다.) 인텔리 센스 적용 결과 설치할 익스텐션 visual assist whole tom..
[C++] 이중 포인터 사용 예 심심해서 지식인을 돌다가, 재미있는 질문글을 발견 하고 답변을 달고 있었다. (내가 글을 열심히 썼는데, 누가 먼저 답변하고 채택됬다고 더 안올라간다 ;;;) 아까워서, 나름 포인터 이해에도 한층 도움을 준듯 하여 블로그에 남긴다. 질문의 요지는 이것이다. 여기서 왜, ip 변수의 값이 바뀌지 않느냐 인데... 그 풀이를 남기면 다음과 같다. int *ip = NULL; 에서, ip 포인터 변수는 아무것도 가르키지 않게 된다. f(ip); 에서, f 를 호출 할 때 nullptr 을 복제하여 f(int *p) 에 넘겨준다. 보다 싶이, nullptr (0) 가 넘어감을 볼 수 있다. 여기서 짚어야 하는 점은, main() 의 ip 포인터 변수가 복제되어 f() 에 넘어갔기 때문에 f() 부분의 p 와 m..
[UE4] 언리얼 에디터에서 외부 모듈 리로드 한동안 (지금도) 시험기간이 겹쳐서 글을 올리지 못했습니다... 잠깐 시간이 비어서 이번에 새로 알게된 내용에 대해 정리해보려고 한다. 외부 모듈 (프로젝트 내 서브 모듈이나 플러그인 등...) 을 추가 하게 되면, 주 모듈과 다르게 핫리로드가 안된다. 즉, 빌드를 해도 바로 적용되지 않고, 에디터를 재시작해야 변경 사항이 적용 된다는 것. 이를 해결할 방법을 찾아봤지만, 아쉽게도 별달리 없으며, Live C++ 플러그인을 사용하거나 수동으로 리로드를 해줘야 한다고 한다. 참고로, Live C++ 플러그인은 UE 4.22 부터 사용 할 수 있으므로, 필자가 사용하는 버전에서는 지원하지 않는다. https://docs.unrealengine.com/ko/Support/Builds/ReleaseNotes/4..