- [언리얼/VR/수학] VR 환경에서 3D 객체와 UMG 위젯 위치 동기화 Inverse Transform Location / Transform Location VR 개발을 하다보면 일반 게임 개발과 다른 방법으로 계산을 해야할 때가 있다. 목적? 가상 현실(VR) 환경 내에서 3D 객체의 움직임에 따라 같이 움직이는 UMG 위젯을 구현하고자 한다. 조금 더 자세히 서술하자면, 사용자의 손가락이 움직임에 따라 함께 움직이는 UMG 위젯을 구현하고자 한다. 방법론? 이를 위해서는 3D 객체의 월드 좌표를 2D 위젯 좌표계로 변환하여, 객체의 움직임에 위젯이 동기화되도록 해야한다. 초기 시도 처음에는 ProjectWorldToScreen 혹은 ProjectWorldLocationtoWidget 함수를 사용하여 3D 좌표를 2D 스크린 좌표로 변환하려고 시도했다. ProjectWorldToScreen 함수는 3D 월드 좌표를 카메라 시점을 기반으로 하는 2D 스크린 .. 2024.04.12
- [언리얼/UMG] Set Visibility 언리얼 UMG를 다루다 보면, 각 UI element들의 Visibility를 설정해야 할 때가 있다. 그때마다 대략 이정도 의미겠지~하고 넘어갔었는데, 이번 기회에 제대로 정리해보고자 한다. 별거 아닌 것처럼 보일 수 있지만, 그 의미를 제대로 파악하지 않고 넘어가면 예상치 못한 인터랙션이 발생할 수 있으니 주의해야 한다. 'ESlateVisibility' 타입으로 5가지 Enumerator로 이루어져 있다. 1. Visible - 화면에 보임 O - 사용자 인터렉션 (클릭, 터치 등) O - 게임 스레드에 상당한 오버헤드를 추가할 수 있기에, 인터렉션이 필요한 경우에만 사용해함. 2. Collapsed - 화면에 보이지 X - 공간 차지 X - ex> UI 요소가 화면에 필요 없을 때, 공간도 차지하.. 2024.04.12
- [언리얼/블루프린트] Custom Primitive Data vs Dynamic Material Instances (커스텀 프리미티브별 데이터 vs 다이나믹 머티리얼 인스턴스) Custom Primitive Data? 런타임에서 머티리얼을 동적으로 변경할 수 있는 방법으로 그동안 제일 많이 쓰던 방법은 Dynamic Material Instances (DMI)이다. Custom Primitive Data (CPD)은 DMI와 비슷한 기능을 하지만, 퍼포먼스 최적화에 더 좋은 방법이다. DMI는 새로운 머티리얼 인스턴스를 생성해 런타임에 머티리얼을 동적으로 변경한다.하지만, CPD는 해당 머티리얼이 적용된 Primitive Object (ex> static mesh, skeletal mesh) 자체의 데이터를 저장해, 머티리얼의scalar/vector 파라미터를 런타임에서 쉽게 수정할 수 있게 해주는 기능이다. CPD를 사용하면 중복 geometry가 있는 경우, draw cal.. 2024.03.23