VR 개발하시는 분들이라면 Grab Interactable Object를 만들 때 Rigidbody 만들고, Collider 만들고, Grabbable 컴포넌트 추가하는 등의 매우 귀찮은 작업을 항상 하셔왔을 것입니다. 이제는 그럴 필요가 없어졌습니다. 버튼 딸깍 딸깍 한 번으로 Interaction 기능을 만들 수 있게 되었습니다.사용 방법 사용하고자 하는 Interactor를 선택해서 생성해줍니다. 이때도 Block Building 방법으로 쉽게 만들 수 있지만 , 저는 아직 버그가 많아보여서 사용하지 않고 프로젝트에서 검색해서 Drag해서 끌어다 놓는 방법을 여전히 이용중에 있습니다. Interactor를 끌어다놨으면 그에 맞는 Interactable 객체를 만들어야겠죠? Cube를 하나 만들어주..
[System.Serializable]이란?C#의 속성(attribute)으로, 클래스, 구조체 또는 필드에 적용할 수 있습니다. System.Serializable 속성을 사용하면 직렬화 시스템에 의해 데이터가 직렬화될 수 있음을 나타냅니다. 직렬화는 데이터 구조나 객체 상태가 에디터에 저장되고 나중에 재구성할 수 있는 포맷으로 자동으로 변환하는 프로세스를 뜻합니다. 직렬화?🔽더보기직렬화는 데이터를 저장하거나 전송하기 위해 일련의 연속적인 바이트로 변환하는 과정을 말합니다. 연속적인 바이트로 변환시키면 복잡한 데이터 구조를 쉽게 저장하고 전송할 수 있습니다. 직렬화된 데이터는 나중에 역직렬화를 통해 원래의 형태로 복원할 수 있습니다.예를 들어, 우리가 게임을 만들고 있고 플레이어의 정보, 아이템, ..
위와 같이 여러개의 Image를 사용하는 캔버스가 있다고 가정하겠습니다.이런 경우, 우측 사진처럼 각 이미지마다 Draw Call을 발생하게 됩니다. 하나의 Image를 여러개의 이미지처럼 사용하는 Altas기법을 사용해서 최적화를 해보겠습니다.Sprite Altas 사용하기 Sprite Altas를 사용하기 위해서는 사전 세팅이 필요합니다.프로젝트 세팅에 가서 에디터 탭, Sprite Altas 모드를 Sprite Altas V1 - Always Enabled로 설정해줍니다. 만약 보이지 않는다면 2D Sprite 패지키를 다운받아줍니다. 그 후, Sprite Atlas를 생성해줍니다. 생성해준 다음 사용할 Sprite들을 집어넣어줍니다.Preview를 하면 아틀라스가 생성된 것을 확인할 수 있습니다..
해당 글은 아래 유니티 블로그에 나온 글을 정리한 것입니다. Optimize your mobile game performance: Get expert tips on physics, UI, and audio settings | Unity BlogYou might have UI elements that only appear sporadically in the game (e.g., a health bar that appears when a character takes damage). If your invisible UI element is active, it might still be using draw calls. Explicitly disable any invisible UI componentsblog.u..
ArRaycastManager란?ArRaycastManager 컴포넌트는 AR Foundation에서 Raycast 기능을 관리하는 역할을 합니다. ArRaycastManager 컴포넌트를 사용하면 물리(Real) 세계에 존재하지 않는 AR Ray Cast Manager에 대해 Raycast를 수행할 수 있습니다. 이 말은 Camera로 촬영하고 있는 공간은 실제 세계이지만 실행되고 있는 앱은 실제 세계가 아닌 AR 환경이라는 뜻입니다. 증강 현실(AR) 환경은 가상의 객체를 실제 세계에 '추가’하여 사용자가 실제 세계와 가상의 객체 사이에서 상호작용할 수 있게 하는 기술임을 잊지 말아야 함! - 인터페이스 느낌 ArRaycastManager 컴포넌트는 다음과 같은 역할을 합니다.단일 Raycast를 수..
게임을 제작하다보면 적을 공격할 때 데미지를 표기해야하는 경우가 많습니다.Damage Numbers Pro에셋을 사용하면 아주 쉽고, 퀄리티 좋은 데미지 표현을 만들 수 있습니다! 심지어 가격도 매우매우매우 착합니다. 만드는 방법 하이러키창에 Damage Numbers Pro를 누르고 Mesh와 GUI 둘 중 하나를 선택해줍니다.Mesh는 2D/3D 상에서 표현할 때 사용하는 것이며, GUI는 Canvas에서 표현할 때 사용하는 것입니다. 상황에 맞게 Type을 선택하셨다면 우측 사진처럼 다양한 효과를 연출할 수 있는 세팅창이 뜹니다.상단에 Main, Text, Fade in....이 탭에서 효과를 세세하게 설정할 수 있고, 귀찮으시면 아래 Presets에 정리되어 있는 효과를 가져다 쓰면 됩니다! 효..
using UnityEngine;using UnityEngine.SceneManagement;namespace testnamespace{ public class SceneLoader : MonoBehaviour { public Scene scene; }} 인스펙터에 Scene을 할당하기 위해 public으로 Scene을 선언해도 인스펙터에는 보이지 않습니다. 인스펙터에 Scene 할당하는 방법기본적인 방식으로는 인스펙터에 Scene을 할당할 수 없습니다. 따라서 에셋을 사용하거나 그 외 본인이 직접 커스터마이징을 해주어야 합니다. 저는 제가 좋아하는 유튜버인 NK Studio님의 작업물을 가져와서 소개해드리고자 합니다. 일단 아래 NK Studio님의 Repo에 가셔서 다운..
씬이 로드됨을 알아야 할 때가 종종 있습니다. 예를 들어, 멀티플레이어 게임이라든지, 로딩화면에서 대기하고 있으며 로딩이 다 된 경우에 클릭하면 넘어갈 수 있는 상황 등에 사용할 수 있습니다. 유니티에서는 씬(Scene)이 로드될 때 호출되는 콜백 함수는 SceneManager<span style="background-color: #ffffff; color: #111111; text-align: start;"..
namespace란?<figure id="og_1714460716140" contenteditable="false" data-ke-type="opengraph" data-ke-align="alignCenter" data-og-type="article" data-og-title="Unity namespace" data-og-description="💡namespace namespace는 클래스들의 묶음이다 namespace를 쓰는 이유는 프로젝트의 규모가 커질수록 각종 이름들의 충돌 발생 가능성을 막아주기 위함이다 namespace 네임스페이스-이름 { class A{} class B{} " data-og-host="wlsdn629.tistory.c..
에디터에서는 디버그를 확인할 수 있어 버그를 즉각 고칠 수 있지만, 빌드 후 생겨나는 버그들은 디버그를 확인할 수 없어서 버그를 고치는데 어려움을 겪을 수 있습니다. 이럴 때 사용하는 것이 "In-game Debug Console" 에셋입니다!무려 무료!!!!!!!!!!!!!!!!!! In-game Debug Console | GUI 도구 | Unity Asset StoreUse the In-game Debug Console from yasirkula on your next project. Find this GUI tool & more on the Unity Asset Store.assetstore.unity.com 인게임 디버그 창 위 사진은 빌드 후 찍은 사진입니다. 게임을 실행하면 위처럼 디버그 콘..
샘플을 다운받으면 여러가지의 서브 그래프를 다운받을 수 있습니다.이때 주의하실 점은 쉐이더 그래프 버전에 따라 제공되는 샘플의 종류가 다르므로 본인의 쉐이더 그래프의 버전을 확인하시길 바랍니다. Procedural Patterns Procedural Patterns 예제에는 다양한 패턴들의 소개가 나와있습니다. Node Reference Node Reference 예제에는 각 노드에 대한 설명이 나와있습니다.쉐이더 그래프를 처음 다룰 때 참고하시면 매우 좋을 것 같습니다! Feature Examples Feature Examples 예제에는 실제로 사용할수 있는 쉐이더 기법에 대한 설명이 나와있습니다.본인이 만들고자 하는 쉐이더가 있다면 참고하시면 좋을 것 같습니다.
쉐이더 그래프를 이용해서 작업을 하다보면 Black Board에 프로퍼티 값들이 많아져서 본인이 원하는 값을 찾기가 어려워집니다. 아래 예시와 같이 말이죠. 그럴때 사용할 수 있는 게 카테고리 기능입니다.카테고리 기능을 이용해서 비슷한 프로퍼티들 끼리 묶어주면 나중에 해당 값을 찾을 때 더 쉽게 찾을 수 있습니다. 카테고리 만드는 방법은 [+]를 누른 후 Category를 선택하시면 됩니다. 그 후 카테고리를 더블클릭해서 이름을 바꿔줄 수 있습니다.
DisallowMultipleComponent란?[DisallowMultipleComponent] 애트리뷰트를 클래스에 적용하면 해당 클래스의 컴포넌트가 단일 게임 오브젝트에 대해 단 "한 번만" 추가될 수 있도록 제한해줍니다. 예를 들어, 아래와 같이 DisallowMultipleComponent 애트리뷰트를 OnlyOne 클래스에 정의하면, OnlyOne 클래스의 인스턴스는 게임 오브젝트에 한 번만 추가될 수 있습니다.using UnityEngine;[DisallowMultipleComponent]public class OnlyOne : MonoBehaviour { // 클래스 내용} 중복해서 컴포넌트를 게임 오브젝트에 추가하려고 하면 위와 같은 경고창이 나오게 됩니다.
AR Anchor 이란? AR Anchor 컴포넌트는 실제 세계에 객체의 위치를 고정시키는 역할을 합니다. AR Anchor는 성능을 많이 잡아 먹으므로 씬에 많은 앵커가 있으면 FPS가 떨어집니다. AR Anchor는 AR Plane이 없으면 작동하지 않는 것을 주의해야 합니다. AR Anchor Manager 이란? AR Anchor Manager는 특정 공간의 Anchor을 추적하는 역할을 합니다. 고정시킬 객체에 AR Anchor 컴포넌트를 할당해줍니다. 마지막으로 XR Origin 객체에 AR Anchor Manager컴포넌트를 붙여줍니다. 결과
Day Night System 시간을 세팅하자 아침을 몇시로 세팅 할 지, 저녁은 몇 시로 할 것인지, 흐르는 시간의 배율 등을 세팅할 수 있게 도와주는 SO를 만들어보겠습니다. using UnityEngine; [CreateAssetMenu(fileName = "TimeSettings", menuName = "TimeSettings")] public class TimeSettings : ScriptableObject { public float timeMultiplier = 2000; public float startHour = 12; public float sunriseHour = 6; public float sunsetHour = 18; } 시간의 흐름과 낮/밤의 변화를 관리하자 using Syste..
Heatmap Color Mode란? Unity 6(2023.3.0a10) 이상에서 도입된 Heatmap Color Mode는 Shader Graph의 노드들의 GPU 비용을 시각적으로 색을 통해 나타내는 기능입니다. Heatmap Color Mode는 각 노드의 색상이 해당 노드의 '상대적인 성능 비용'을 나타냅니다. 어두운 색상의 노드는 쉐이더의 전체 GPU 성능 비용이 적게 드는 것을 뜻하며, 밝은 색상의 노드는 GPU 계산을 더 많이 하는 것을 뜻합니. Heatmap Color Mode를 사용하면, 각 노드의 GPU 사이클 수를 측정하여 카테고리(위 사진 Name참고)를 할당하고, 이를 기반으로 그래디언트를 사용하여 노드의 색상을 표시합니다. Heatmap Color Mode를 사용하기 위해서는 ..
Instancing이란? Instancing은 주로 '복제' 또는 '반복 생성'의 개념을 뜻합니다. 특정 객체, 데이터, 또는 구조의 여러 인스턴스를 생성하고 관리하는 과정을 포함됩니다. 유니티에서 Instancing이라는 개념은 GPU Instancing과 Instantiate라는 2가지 의미로 사용되곤 합니다. 이 포스팅에서는 GPU Instancing에 대해서만 말해보고자 합니다. GPU Instancing이란? GPU Instancing은 그래픽 처리 단계에서 사용되는 "최적화 기법"입니다. GPU Instancing을 사용하면 '동일한 메시'의 여러 복제본을 한 번에 그리거나 렌더링할 수 있습니다. 좀비 게임을 예로 들어보겠습니다. 좀비 게임을 할 때 좀비가 한 두마리만 생성되는 경우가 있을까요..
GPU Lightmapper란? Bakery Asset은 Unity의 인라이튼(Enlighten)과 프로그레시브(Progressive)의 '대안'으로 설계된 GPU LightMapper입니다. 'RTX 그래픽 카드'를 사용하여 빠르게 Light를 Bake할 수 있습니다. 인라이튼 - Unity 매뉴얼 Unity에서는 베이크된 전역 조명(Baked Global Illumination) 과 미리 계산된 실시간 전역 조명(Precomputed Realtime Global Illumination) 이라는 두 가지 기법으로 전역 조명(GI)과 바운스된 조명을 미리 계산할 수 docs.unity3d.com 참고: 최신 Nvidia GPU(6xx 이상) 및 64비트 Windows(7 이상)가 필요합니다! Render..
Step Node란? Step Node는 입력값 In이 Edge 값보다 크거나 같으면 1을 반환하고, 그렇지 않으면 0을 반환합니다.예를 들어, 특정 임계값을 기준으로 텍스처의 특정 부분을 강조하거나 숨기는 데 사용할 수 있습니다. 위 사진은 Step Node가 사용하는 함수입니다.두 개의 Value를 비교해서 Branch Node를 통해 1 or 0을 반환합니다.이때 기준은 A가 되며 A가 B보다 크거나 같은 경우에만 1, 그 외에는 0입니다. 프로그래머가 한 번에 이해하는 방법=> 입력 값 In(A) > Edge(B) ? 1: 0 대박슨ㅋㅋㅋㅋ