디자인 패턴을 무턱대고 사용하지 맙시다! 본인이 사용하고 있는 코드(디자인) 패턴이 무엇인지는 제대로 알고 사용하고, 디자인 패턴의 본연의 의미를 잃어버리지 맙시다!State Pattern이란? State Pattern은 객체의 상태를 캡슐화하여 해당 상태에 따라 객체의 행동을 내부에서 자동으로 변경하는 디자인 패턴입니다. 유니티 설치과정을 예시로 말해보겠습니다. 우리가 유니티를 설치할 때 내부에서 어떻게 설치되는지 알아야 하는 이유가 있을까요? 저희는 그저 Next 버튼을 클릭하기만 하면 됩니다. Next 버튼을 누르면 내부에서 알아서 설치가 되고, 설치가 마무리되면 프로그램은 저희에게 또다시 Next 버튼을 누르라고 합니다. 그 과정이 끝나면 프로그램은 Finish 버튼을 누르라고 저희에게 알립..
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 { // 클래스 내용} 중복해서 컴포넌트를 게임 오브젝트에 추가하려고 하면 위와 같은 경고창이 나오게 됩니다.