유니티33 [Unity] URP 스텐실(Stencil) 활용하기 스텐실은 GPU의 스텐실 버퍼(Stencil Buffer)를 활용하여특정 픽셀의 렌더링을 제어하는 기능이다. 이번에는 스텐실을 활용한 간단한 예시를 구현해보도록 하겠다.아래의 결과 화면부터 보도록 하자.바라보는 면이 달라짐에 따라,각각 다른 오브젝트가 렌더링되는 것을 볼 수 있다. 이를 구현해보도록 하자.① URP 세팅URP(Universal Render Pipeline)에서는 Renderer Features를 통해스텐실을 간단히 설정할 수 있다. 프로젝트를 URP로 변환하는 과정은 워낙 자료가 많으므로간략히 설명하겠다.먼저, Package Manager에서 Universal RP를 설치해준다. Create > Rendering > URP Asset (with Universal Renderer)을 생성.. 2024. 9. 5. [Unity] Input System으로 입력 처리하기 유니티에서 마우스나 키보드 입력을 어떻게 처리하는가?아마 Input 클래스의 GetKey(KeyCode key), GetMouseButton(int button)와 같은 함수를Update문에서 계속 체크하는 방식을 가장 많이 사용할 것이다. 하지만, 이러한 방식은 타겟 플랫폼이 달라질 때마다,코드를 수정해야한다는 단점이 있다. 유니티에서는 입력 처리를 최적화하고, 통합 관리할 수 있는InputSystem 패키지를 제공한다. 사용 방법에 대해 간단히 알아보도록 하자.패키지 설치일단, Package Manager에서 Input System을 설치해주자. Yes 버튼을 눌러 프로젝트를 다시 시작한다.에셋 생성Create/Input Actions를 클릭하여 Input Action Asset을 생성해준다. 에셋을.. 2024. 6. 8. [Unity] 오브젝트 풀링을 간단히 구현해보자(ObjectPool) 다수의 오브젝트를 생성하고, 파괴하는 과정을 반복하면,GC가 빈번하게 작동하여, 성능 저하(또는 프레임 드랍)가 발생한다. 만약, 사용한 오브젝트를 재사용한다면CPU 성능 소모를 줄일 수 있을 것이다. 이를 오브젝트 풀링이라고 하는데, 유명한 최적화 기법 중 하나이다.유니티에서는 이 오브젝트 풀링을 간단히 구현할 수 있는ObjectPool 클래스를 지원한다. 예시를 간략히 살펴보도록 하자. 결과물위 이미지는 오브젝트 풀링의 결과를 보여준다.한번 사용한 큐브를 잠시 비활성화하고, 필요할 때에 다시 사용하는 것을 볼 수 있다. 핵심은 생성된 오브젝트가 파괴되지 않고 남아있다는 것이다.예시 코드using UnityEngine;using UnityEngine.UI;using UnityEngine.Pool;usi.. 2024. 5. 24. [Unity] 코루틴을 대체하자(UniTask) 코루틴(Coroutine)은 일반 함수와 달리여러 프레임에 걸쳐 실행될 수 있는 특별한 함수이다.※ 유니티 개발을 하면서 반드시 쓰게 된다. 하지만, 이렇게나 강력한 코루틴에도 단점이 있다.일단, 리턴(Return) 값이 없어서 따로 콜백 처리를 해줘야 한다.또한, Try-Catch 예외처리를 못하고,StartCoroutine와 YieldInstruction에서 가비지가 빈번하게 생성된다.만약, 오브젝트가 비활성화되어 있으면 실행되지도 않는다. 이러한 단점들을 극복한 UniTask를 소개해보겠다.UniTask는 기존 C# Task에서 파생되어 만들어졌다.Task와는 다르게 단일 스레드인 유니티에 최적화되어 있다.큰 특징들을 아래에 정리해보았다. ① 리턴 값 존재② Try-Catch 가능③ Zero All.. 2024. 5. 15. [Unity] 선을 그리는 UI를 만들어보자 이전 글에서 UI의 모양을 마음대로 변경하는 방법에 대해 알아보았다.[Unity] UI 모양을 내 맘대로 바꿔보자(VertexHelper) (tistory.com) [Unity] UI 모양을 내 맘대로 바꿔보자(VertexHelper)이전에 Mesh를 생성하여 도형을 만들어봤다. [Unity] Mesh를 생성하여 도형 만들기 (tistory.com) [Unity] Mesh를 생성하여 도형 만들기 3D 게임을 만들기 위해서는 다양한 모델링을 활용한다. 이 모델링들은giseung.tistory.com 이를 활용하여 선을 그리는 스크립트를 작성해보았다.일단, 결과물부터 보도록 하자.결과물스크립트구현하다보니 생각보다 많이 길어졌다.using UnityEngine;using UnityEngine.UI;using .. 2024. 4. 28. [Unity] UI 모양을 내 맘대로 바꿔보자(VertexHelper) 이전에 Mesh를 생성하여 도형을 만들어봤다. [Unity] Mesh를 생성하여 도형 만들기 (tistory.com) [Unity] Mesh를 생성하여 도형 만들기 3D 게임을 만들기 위해서는 다양한 모델링을 활용한다. 이 모델링들은 Mesh 데이터를 통해 형상화하게 되는데, 유니티에서는 Mesh 클래스를 생성해서 원하는 도형을 만들 수 있다. 이번 글에서는 Me giseung.tistory.com 이와 같은 원리로, UI에도 VertexHelper라는 클래스를 활용하여, Canvas에서 사용할 수 있는 원하는 형태의 UI를 만들어낼 수 있다. 자세히 알아보도록 하자. 작성 방법 아래의 코드는 Image 컴포넌트 형태인 사각형을 직접 구현한 것이다. using UnityEngine; using Unity.. 2024. 4. 21. [Unity] 동적으로 메쉬 병합하기(CombineMeshes) 같은 형태의 3D 모델을 사용하더라도, 메쉬(Mesh)와 머티리얼(Material)의 개수가 적을수록 드로우콜(Draw Call)이 감소한다. 그렇지만, 어쩔 수 없이 많은 메쉬와 머티리얼을 사용하는 경우도 있다. 예를 들어, 블럭을 조립하는 게임을 만든다고 가정해보자. 조립하기 전에는 여러 모델이 분리되어 있기에, 모델의 개수만큼 드로우콜이 늘어날 수 밖에 없다. 그러나, 조립하고 난 뒤에는 하나의 모델로도 충분하다. 유니티에서는 Mesh 클래스에 있는 CombineMeshes 함수로 여러 메쉬를 하나의 메쉬로 병합할 수 있다. 따라서, 같은 머티리얼을 가진 메쉬를 병합한다면, 원래 상태를 그대로 유지하면서 최적화할 수 있다. 그림으로 알아보자. 위 그림는 메쉬 4개, 머티리얼 1개를 사용하여, Bat.. 2024. 3. 4. [Unity] 커스텀 단축키 만들기 Edit > Shortcuts 탭을 클릭하면, 기본으로 제공하는 단축키들을 확인할 수 있다. 이 외에도, 필요한 함수를 구현하여 단축키로 실행되게끔 할 수도 있다. 이번 글에서는 단축키를 생성해보고, 예시 코드 몇 가지를 살펴보도록 하겠다. 단축키 생성하기 우선 단축키가 에디터의 기능이므로, 예약 폴더인 Editor 폴더 내에 스크립트가 생성되어야 한다. ※ Editor 폴더 내에 있는 에셋들은 빌드 시 포함되지 않는다. 위와 같이 Editor 폴더 내에 스크립트를 생성해준다. ※ 스크립트 이름은 마음대로 해도 된다. 그리고 아래와 같이 예시 코드를 작성한다. #if UNITY_EDITOR //Editor에서만 컴파일 using UnityEngine; using UnityEditor; public cla.. 2024. 1. 11. [Unity] 자유시점 카메라 구현하기 자유시점 카메라를 간단히 구현해보았다. 여러 상황에서 테스트를 할 때 도움이 될 것이다. 스크립트 using UnityEngine; public class FreeLookCamera : MonoBehaviour { [Header("Component")] public Transform cam; [Header("Move")] [Tooltip("이동속도")] public float moveSpeed = 1f; [Tooltip("전진 키")] public KeyCode forwardKey = KeyCode.W; [Tooltip("후진 키")] public KeyCode backKey = KeyCode.S; [Tooltip("왼쪽 키")] public KeyCode leftKey = KeyCode.A; [Tool.. 2024. 1. 2. [Unity] 동적 Mesh로 포물선(Parabola) 그리기 이전 글에서 Mesh 클래스로 원하는 대로 도형을 생성할 수 있었다. https://giseung.tistory.com/54 [Unity] Mesh를 생성하여 도형 만들기 3D 게임을 만들기 위해서는 다양한 모델링을 활용한다. 이 모델링들은 Mesh 데이터를 통해 형상화하게 되는데, 유니티에서는 Mesh 클래스를 생성해서 원하는 도형을 만들 수 있다. 이번 글에서는 Me giseung.tistory.com 이를 활용하여, 포물선을 그리는 방법을 소개하겠다. 세부 내용은 뒤로 미루고 결과부터 보여주겠다. 결과.gif 스크립트 using UnityEngine; using System.Collections.Generic; public class MeshParabola : MonoBehaviour { [Head.. 2023. 12. 30. 이전 1 2 3 4 다음