게임 엔진/언리얼

Unreal Engine을 다룬 내용을 기록하는 페이지입니다.
문제 상황 저격 총에서 특정 트리거가 입력되면 scope UI를 노출하는 기능을 구현하고 싶었다. 다만, 일반적인 PC 환경과는 달리 VR 환경에서는 양안 렌즈를 통해 유저가 입체적으로 오브젝트를 인지하도록 만들기에 2D UI를 구성하는데 어려움이 있었다. 문제 해결 과정과 테스트 사실 처음에는 그냥 무조건 2D로 UI를 구현하려고 했다. 내 머릿속의 3D UI는 world 내의 다른 오브젝트에 의해 언제든 가려질 수 있는 것이었고, 그렇기에 아래와 같은 목표를 달성하기 위해서는 무조건 Unity 내 canvas의 screen space로 UI를 구성한 것처럼 world에서 분리된 2D UI를 사용해야 된다고 생각했다. 화면의 최상단에 렌더링 돼야 한다. 다른 오브젝트와 충돌해서는 안 된다. 그래서, 대..
※ 'Today, I Learned'에서 하나의 개념을 온전히 다루려고 하다 보니 기록하기가 힘들다. 앞으로는 하나의 개념을 설명하는 게 아니라, 하나의 이슈를 해결하는 걸 기준으로 기록하려고 한다. 문제 상황 레이저 무기를 구현하고 싶었다. 단순히 피격 대상 감지 후 데미지를 부여하는 것만이라면 Linetrace와 Apply Damage 만으로도 가능했겠지만, 레이저 효과를 화면에 표현하기 위해서는 나이아가라 시스템에 대해 알 필요가 있었다. 언리얼 공식 문서의 간단한 레이저 예제를 찾아보고 이를 구현하던 도중에 레이저가 Linetrace Impact Point까지 그려지게 하기 위해선 해당 location의 vector 값을 외부로부터 읽어올 필요가 있었다. 이에 나이아가라 시스템에서 외부 데이터를 ..
문제 상황 미사일 런처를 구현하는 중, 플레이어의 조준점을 따라 장전 중인 미사일이 회전하고, 미사일을 발사하는 경우에도 조준점을 향해 날아가도록 구현하고 싶었다. 이에 대해 고민하던 중, Linetrace로 hit point를 검출한 뒤 미사일이 해당 location을 향해 회전하도록 구현하면 될 것 같아 시도해봤다. 기능 이해와 테스트 Linetrace는 출발점부터 도착점까지 보이지 않는 광선을 발사해서 오브젝트를 검출하는 기능이다. 블루프린트에서 활용할 수 있는 Linetrace의 방식은 아래와 같다. (Single) Line Trace By Channel : 특정 Trace Channel에 대응하는 최초로 검출된 오브젝트를 반환한다. (Single) Line Trace For Objects : 특..
문제 상황 미사일 런처를 구현하는 중, 조준 중일 때는 미사일이 플레이어의 에임을 따라오게 구현하고 싶었다. 그래서, 미사일을 스폰하고 정렬해 플레이어의 에임을 따라오게 하는 것까지는 성공했는데, 무거운 느낌을 주기 위해서 애니메이션을 조금 느리게, 플레이어의 움직임보다 살짝 늦게 따라오도록 구현하고 싶었다. 이를 위해 기능을 찾던 중, Timeline 노드가 좋아 보여서 Lerp 노드와 함께 써보기로 결정했다. 기능 이해와 테스트 내가 느낀 Timeline 노드는 그냥 선형 보간(Linear Interpolation)처리를 위한 Lerp 노드와 크게 다를 바 없어 보였다. 다만, 한 가지 차이가 있다고 하면 보간의 대상(float, vector, color, event 등등..)과 보간 방식을 더 자유..
문제 상황 기관총을 구현하는 과정에서 트리거가 되는 키를 N초 이상 누르고 있을 때 총탄이 발사되게 하고 싶은데 Enhanced Input Action 노드의 몇몇 핀이 같은 액션에 실행된다. 기능 이해와 테스트 나는 특정 키를 눌렀을 때 기관총이 예열을 시작하고, N₁초가 지났을 때 발사를 시작하며, 발사를 마친 기관총은 N₂초가 지났을 때 다시 발사를 할 수 있게 구현하고 싶었다. 그러나, 나는 Input Action과 Input Context Mapping, Enhanced Input Action 노드를 잘 모르는 상태로 기능을 구현하려고 했다. 한 번 이것들이 어떤 동작을 하는지 이해해 보자. 가장 먼저 Input Action이다. Input Action은 플레이어의 특정 입력 액션을 트리거하는 ..
문제 상황 아직 프로토타이핑에 불과하지만, 총탄이 사실적이지 않다는 사실이 신경 쓰여서 약간이나마 수정해보려고 했다. 이에 현재 언리얼 엔진에서 기본적으로 제공하는 Projectile Actor에 부착돼 있는 Projectile Movement Component에 대해 알아봤다. 기능 이해와 테스트 엔진에서 제공하는 Projectile Movement Component는 물리적으로 동작하는 투사체를 다루는 component로 투사체의 속도와 방향, 중력에 의해 받는 영향, 탄성, 마찰, 유도 등을 설정할 수 있는 component다. 가장 먼저 Initial Speed와 Max Speed를 살펴봤다. 언뜻보면 투사체의 속도를 관리하는 값으로 보이는 데 이 둘의 초기값은 0이었으나 투사체는 방향과 속도를 ..
문제 상황 Overlap 이벤트로만 데미지 처리를 구현했는데, 나중에 Bullet이 많아지면 성능이 떨어질 것 같아서 엔진에서 제공하는 기능으로 데미지 처리를 구현해보고 싶었다. 아직은 잘 모르지만 raycast가 overlap보다 더 적은 리소스를 사용한다고 해서 추후 raycast랑 용이하게 연결하기 위해서라도 엔진 자체 데미지 처리 기능을 사용해보려고 했다. 기능 이해와 테스트 엔진에서 Apply Damage와 Take Damage라는 기능을 제공한다고 한다. 기존의 Overlap 방식과의 차이는 다음과 같다. Overlap 방식은 겹침이 발생했을 때에만 데미지를 가할 수 있지만, Apply Damage는 겹침이 발생하지 않아도 원하는 시점에 데미지를 가할 수 있다. 이에 일단 Overlap이 되면..
문제 상황 사격 키를 눌렀을 때, 3 점사가 되는 블루프린트를 구성하고자 했다. 이에 아래와 같이 For Loop 노드로 bulletsPerFire개수만큼 fire 함수를 호출하려고 했는데, delay 노드가 무시되어 한 번에 fire 되는 문제가 발생했다. (지금 보니까 변수명이랑 함수명이 너무 헷갈리게 돼있는 것 같다... 프로토타이핑 이후에 수정할 예정!) 문제 원인과 테스트 For Loop 흐름 제어 노드와 Delay 노드의 동작 방식 차이 때문에 발생하는 문제였다. For Loop는 동기적으로 동작하고 Delay는 비동기적으로 동작하는데, 이 때문에 Delay가 수행되기 전에 다음 loop가 돌아가는 것이 문제 원인이었다. 동기적 (Synchronous) : 이전 작업이 수행된 후 다음 작업을 ..
AeonFlor
'게임 엔진/언리얼' 카테고리의 글 목록