RefreshShownValue란?RefreshShownValue() 함수는 'TMP_Dropdown 컴포넌트'에서 사용되는 함수입니다. RefreshShownValue 함수는 드롭다운 메뉴 값을 갱신하여 현재 선택된 값을 표시합니다. 이 함수를 호출하면 드롭다운의 표시가 변경되어 현재 선택된 값을 나타낼 수 있습니다. 사용 예를 들어. 사용자가 게임 설정에서 그래픽 품질을 변경하는 드롭다운 메뉴가 있다고 가정해 보겠습니다. 사용자가 새로운 품질 수준을 선택하면 이를 즉시 반영하여 드롭다운 버튼에 표시할 때 사용하면 됩니다.
where 키워드란? 제네릭 프로그래밍에서 중요한 역할을 하며, 제네릭 타입에 대한 제약 조건을 지정할 때 사용됩니다. where키워드를 사용함으로써 컴파일 타임에 타입의 특정 특성을 보장할 수 있게 해줍니다. 예를 들어, 특정 타입이 반드시 클래스여야 하거나 특정 인터페이스를 구현해야 한다는 등의 조건을 걸 수 있습니다.where 키워드 예시 형식 설명 예시 where T : class제네릭 타입 매개변수가 클래스여야 함where T : classwhere T : struct제네릭 타입 매개변수가 구조체여야 함where T : structwhere T : new()제네릭 타입 매개변수가 매개변수가 없는 기본 생성자를 가져야 함where T : new()where T : SomeBaseClass제..
transform.GetSiblingIndex()란?transform.GetSiblingIndex()는 GameObject가 현재 계층 구조에서 몇 번째 위치(자식 순서)에 있는 반환해줍니다. 예를 들어, 게임 오브젝트들이 같은 부모 오브젝트 아래에 있는 경우, GetSiblingIndex()를 사용하여 해당 GameObject의 위치 순서(번호?)를 얻을 수 있습니다. GetSiblingIndex함수는 GameObject의 자식들을 정렬하는 경우에 유용합니다. 실제로 transform.GetSiblingIndex()를 사용해서 슬롯을 정렬하는 함수를 만들어봤습니다.int childIndex = transform.GetSiblingIndex();int row = childIndex / maxHorizo..
System.Obsolete란?System.Obsolete는 C#에서 제공하는 속성으로, 특정 메서드나 클래스가 더 이상 권장되지 않음을 나타내는 데 사용됩니다. System.Obsolete속성을 사용하면 해당 메서드나 클래스를 사용하는 코드가 컴파일될 때 경고 또는 오류를 생성합니다.System.Obsolete 속성은 다음과 같이 세 가지 형태로 사용할 수 있습니다.[Obsolete]: 매개변수를 사용하지 않으면 해당 메서드나 클래스를 사용하는 코드가 컴파일될 때 경고를 생성합니다.[Obsolete(string message)]: 더 이상 권장되지 않는 이유를 설명하는 메시지를 포함합니다.[Obsolete(string message, bool error)]: 불리언 값이 true로 설정되면, 해당 메서..
Scene Controller을 만들기 위해서는 Singleton과 UniTask를 사용해야 합니다. 아래 포스팅에서 '싱글톤'과 'UniTask' 사용방법을 참고해주세요. 두고두고 써먹는 싱글톤(SingleTon) 코드싱글톤 패턴이란? Unity 싱글톤 패턴은 특정 클래스가 게임 수명 기간 동안 하나의 인스턴스만 갖도록 하기 위해 Unity 게임 개발에서 일반적으로 사용되는 디자인 패턴입니다. 이 패턴은 게임 내wlsdn629.tistory.com 유니티 코루틴 대신 unitask유니티에서 unitask를 사용하기 앞서, 유니티에서 사용하는 코루틴이 무엇인지 알아야 진정한 unitask의 장점을 알 수 있습니다. 지피지기 백전불태 그렇기에 유니티에 기본적으로 내장되어 있는wlsdn629.tistor..
URP에도 샘플이 존재합니다. 샘플 수가 적은 편이 아니고 꽤 되는 편입니다.Rendering Pipeline공부하시는 사람이라면 반드시 샘플 먼저 공부하시면 도움이 될 것 같습니다. 예전에 지나가면 길이 움푹 파이는 효과를 구현해보고 싶었는데 URP 샘플에 있어서 공부할 수 있었습니다.
using UnityEngine;using System.Collections;[RequireComponent(typeof(Collider))]public class Door : MonoBehaviour { public enum rotOrient { Y_Axis_Up, Z_Axis_Up, X_Axis_Up } public enum rotFixAxis { Y, Z } public rotOrient rotationOrientation; public bool applyRotationFix = false; public rotFixAxis rotationAxisFix; public float doorOpenAngle = -90.0f; [Range(1,5)] public float speed = 3.0f;..
using UnityEngine;using UnityEditor;public class ResetPlayerPrefs : MonoBehaviour{ [MenuItem("Window/PlayerPrefs 초기화")] private static void ResetPrefs() { PlayerPrefs.DeleteAll(); Debug.Log("PlayerPrefs has been reset."); }} 유니티 에디터 상단에서 버튼을 통해 PlayerPrefs 데이터를 초기화하는 코드입니다. 코드는 에디터 폴더에 만드셔야 합니다.코드를 만들고 나면 위 사진처럼 윈도우 탭에서 PlayerPrefs 데이터를 초기화할 수 있게 됩니다.
위와 같이 여러개의 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..
씬이 로드됨을 알아야 할 때가 종종 있습니다. 예를 들어, 멀티플레이어 게임이라든지, 로딩화면에서 대기하고 있으며 로딩이 다 된 경우에 클릭하면 넘어갈 수 있는 상황 등에 사용할 수 있습니다. 유니티에서는 씬(Scene)이 로드될 때 호출되는 콜백 함수는 SceneManager<span style="background-color: #ffffff; color: #111111; text-align: start;"..
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..
Instancing이란? Instancing은 주로 '복제' 또는 '반복 생성'의 개념을 뜻합니다. 특정 객체, 데이터, 또는 구조의 여러 인스턴스를 생성하고 관리하는 과정을 포함됩니다. 유니티에서 Instancing이라는 개념은 GPU Instancing과 Instantiate라는 2가지 의미로 사용되곤 합니다. 이 포스팅에서는 GPU Instancing에 대해서만 말해보고자 합니다. GPU Instancing이란? GPU Instancing은 그래픽 처리 단계에서 사용되는 "최적화 기법"입니다. GPU Instancing을 사용하면 '동일한 메시'의 여러 복제본을 한 번에 그리거나 렌더링할 수 있습니다. 좀비 게임을 예로 들어보겠습니다. 좀비 게임을 할 때 좀비가 한 두마리만 생성되는 경우가 있을까요..
작성된 글은 아래 내용을 정리한 내용입니다. Naming and Code Style Tips for C# Scripting in Unity Pick up best practices for styling your C# code in Unity. These tips can help you and your team create a cleaner, more readable and scalable codebase. unity.com Casing terminology Case Type Description Example Pascal Case 첫 글자와 각 단어의 첫 글자를 대문자로 표기합니다. MyExampleText Camel Case 첫 단어의 첫 글자는 소문자로, 그 이후의 단어의 첫 글자는 대문자로 표기합니..
코드 using UnityEngine; using UnityEngine.UI; public class ResolutionManager : MonoBehaviour { public TMP_Dropdown resolutionDropdown; private Resolution[] resolutions; private void Start() { resolutions = Screen.resolutions; resolutionDropdown.ClearOptions(); HashSet options = new HashSet(); int currentResolutionIndex = 0; for (int i = 0; i < resolutions.Length; i++) { string option = resolutions..