}
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..
프로젝트 그래픽 퀄리티 옵션 설정 기능 만드는 방법 중 드롭다운(UI)를 이용한 방식에 대해 설명해보겠습니다. 드롭다운 UI를 생성해주고 Option에 High, Middle, Low를 적어줍니다. Option에 적은 순서대로 드롭다운 박스에 나타납니다. 스크립트 작성 public class GameManager : MonoBehaviour { [SerializeField] private List RenderPipelineAssets; [SerializeField] private TMP_Dropdown Dropdown; public void SetPipeline(int value) { if (value = RenderPipelineAssets.Count) { Debug.LogEr..
중요 클래스 - Time - Unity 매뉴얼 Unity의 Time 클래스가 제공하는 중요한 기본 프로퍼티를 사용하여 프로젝트에서 시간과 관련된 값으로 작업할 수 있습니다. docs.unity3d.com 좋은 컴퓨터는 1초에 2프레임 진행된다고 가정해보겠습니다. 플레이어의 속도가 1m라고 가정했을 때 1초에 2프레임이 진행되는 컴퓨터에의 플레이어는 2m를 가게됩니다. 나쁜 컴퓨터는 1초에 1프레임 진행된다고 가정해보겠습니다. 플레이어의 속도가 1m라고 가정했을 때 1초에 1프레임이 진행되는 컴퓨터에의 플레이어는 1m를 가게됩니다. 나쁜 컴퓨터는 억울하겠죠...? 게임이 공평해야지! 컴퓨터가 좋다고 1m더 멀리 가다니.. 그럴 순 없습니다. 이럴 때 사용하는 것이 Time.deltaTime입니다. Time..
이전 글에서 이어지는 내용이므로 이전 글을 보고 와주세요. 2024.03.26 - [Unity/Study] - 유니티 Audio Spectrum에서 얻은 데이터들을 대역 별로 나누기 #기초 Buffer를 사용하면 위 파란색 큐브처럼 값이 급격하게 변화하는 것을 막을 수 있습니다. 값이 갑자기 튀는 현상을 '약간 해결'해줄 수 있다고 생각하시면 됩니다. Buffer란? 'Buffer’는 일반적으로 데이터를 일시적으로 저장하는 임시 저장소를 의미합니다. 데이터를 처리하는 두 개의 프로세스 사이에서 임시 데이터로 사용된다고 생각하시면 됩니다. 아래 코드에서 사용되는 'Buffer’는 FrequencyBands[i]의 값들을 일시적으로 저장하고, 이전의 값들을 기반으로 새로운 값을 계산하는 데 사용됩니다. 버퍼..
유니티에는 씬을 불러오는 두 가지 방법이 있습니다. 동기 방식 - LoadScene LoadScene (동기 방식): LoadScene은 동기 방식으로, 씬을 불러오는 동안 다른 작업을 수행하지 못합니다. 즉, 씬의 모든 데이터를 메모리로 가져오기 전까지 다른 작업이 중지됩니다. 불러오려는 씬의 규모가 크다면, 게임이 멈춰있는 상황이 더 지속될 수 있습니다. 씬의 크기가 작은 경우 LoadScene 방식을 사용하면 됩니다. using UnityEngine; using UnityEngine.SceneManagement; public class Example : MonoBehaviour { public void LoadSceneExample() { SceneManager.LoadScene("SceneName..
아래 스펙트럼 대역에 대한 내용을 보고 와주세요! 유니티 Audio Spectrum 이론에 대해서 #기초 오디오 스펙트럼이란 악기나 음악에 포함된 음향에너지를 주파수별로 나타낸 것을 뜻합니다. 오디오 스펙트럼을 가지고 무엇을 할 수 있냐? 오디오 스펙트럼을 분석해서 아래 사진처럼 비쥬얼 wlsdn629.tistory.com 움짤을 보면 아시겠지만 서브 베이스랑 베이스, 미드 레인지(하)가 가장 강하네요! AudioPeer 수정 이전 Audio Peer 코드는 이전 글을 참고해주세요. 2024.03.25 - [Unity/Study] - 유니티 Audio Spectrum을 이용한 큐브 스케일 변화 시키기 #기초 using UnityEngine; public class AudioPeer : MonoBehavi..
GetSpectrumData 함수 만들기 using UnityEngine; public class AudioPeer : MonoBehaviour { public static AudioPeer Instance; public enum AudioChannel { Left = 0, Right = 1, Center = 2, LFE = 3, RearLeft = 4, RearRight = 5 } [Header("[Ref]")] [SerializeField] private AudioSource audioSource; [Space(3)] [Header("[Value]")] [SerializeField, Tooltip("첫 번째 (왼쪽) 스테레오 채널 또는 모노 채널 \n두 번째 (오른쪽) 스테레오 채널 \n센터 채널 \..
GetSpectrumData란? 재생 중인 오디오 소스의 스펙트럼 데이터를 제공해주는 함수입니다. 스펙트럼 데이터란? 이전 글을 참고해주세요. 유니티 Audio Spectrum 이론에 대해서 #기초 오디오 스펙트럼이란 악기나 음악에 포함된 음향에너지를 주파수별로 나타낸 것을 뜻합니다. 오디오 스펙트럼을 가지고 무엇을 할 수 있냐? 오디오 스펙트럼을 분석해서 아래 사진처럼 비쥬얼 wlsdn629.tistory.com GetSpectrumData 매개 변수 매개변수 설명 samples FFT 결과를 저장할 배열입니다. 배열의 길이는 2의 제곱 수여야 합니다. channel 채널을 나타냅니다. 모노, 스테레오 및 멀티 채널(최대 여덟 개 채널)을 지원합니다. (FFTWindow) window 샘플링할 때 사용..
오디오 스펙트럼이란? 악기나 음악에 포함된 음향에너지를 주파수별로 나타낸 것을 뜻합니다. 오디오 스펙트럼을 가지고 오디오 스펙트럼을 분석해서 아래 사진처럼 시각적 연출을 해보고자 합니다. 스펙트럼 기초 이론 소리를 분석해봤을 때 진동수가 많고 주파수가 높으면 높은소리입니다. 진동수가 적고 주파수가 낮으면 낮은 소리입니다 인간이 들을 수 있는 소리의 범위, 즉 가청 주파수의 범위는 20Hz~20kHz라고 합니다. 스펙트럼에서 사운드에 어떻게 영향을 미치는가에 오디오 스펙트럼을 서브 베이스, 베이스, 미드레인지(하, 중, 상), 하이엔드(하, 상)으로 구분짓는다고 합니다. 스펙트럼 대역 서브 베이스 사람이 들을 수 있는 가장 깊고 낮은 소리의 대역이라고 합니다. 20Hz~60Hz사이라고 합니다. 예시로는 베..
제가 즐겨하는 모바일 게임에서 플레이어 근처에 소환되는 구체들이 멋있길래 한 번 구현해봤습니다. 플레이어를 기준으로 동그랗게 소환되는 방법입니다. 코드 public GameObject SpawnObject; public GameObject go; public int SpawnCount = 10; public float Range = 5f; private void Spawn() { for (int i = 0; i < SpawnCount; i++) { float angle = i * Mathf.PI * 2 / SpawnCount; float x = Mathf.Cos(angle) * Range; float z = Mathf.Sin(angle) * Range; float angleDegrees = -angle ..
Animator와 Shader에서는 String 대신(String최적화)string대신 Animator.stringToHash, Shader.PropertyID를 사용하는 것이 좋습니다. Unity - Scripting API: Animator.StringToHashSuccess! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Closedocs.unity3d.com Animator.stringToH..
GetValueOrDefault이란? C#의 Nullable 구조체에 있는 메서드입니다. 이 메서드를 이용하여 값이 있다면 해당 값을 반환하고, 값이 없다면 해당 데이터 타입의 기본값을 반환합니다. 이 메서드는 두 가지 오버로드를 가지고 있습니다. GetValueOrDefault(): 현재 Nullable 개체의 값이나 기본 유형의 기본값을 반환합니다. GetValueOrDefault(T defaultValue): 현재 Nullable 개체의 값이나 지정된 기본값을 반환합니다. 참고로 Dictionary, HashSet와 같은 타입에도 사용할 수 있습니다. 사용 방법 using System; class Sample { public static void Main() { float? mySingle = 12..
Injection 의존성 주입(Dependency Injection)은 하나의 객체가 다른 객체의 의존성을 제공하는 기술이라고 합니다. 의존성 주입 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 소프트웨어 엔지니어링에서 의존성 주입(dependency injection)은 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉이다. "의존성"은 예를 들어 서비스로 사용할 ko.wikipedia.org 유니티를 위한 DI 프레임워크, VContainer이란? [VContainer이란?] VContainer는 Unity를 위한 가볍고 빠른 DI(Dependency Injection) 프레임워크로, 종속성 및 개체 생성을 쉽게 관리할 수 있도록 도와줍니다. DI는 종속성의 생성 및 관리를 ..