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는 종속성의 생성 및 관리를 ..
Application SpaceWarp란? Application SpaceWarp는 애플리케이션이 실제 디스플레이 갱신 속도의 절반으로 렌더링하도록 허용합니다. 예를 들어, 기존 72 FPS으로 돌아가던 애플리케이션의 FPS를 36으로 렌더링한다는 뜻입니다. 애플리케이션은 "standard eye buffer" 외에도 "motion vector buffer"와 "depth buffer"렌더링해야 하며, Application SpaceWarp 시스템을 사용하여 새로운 프레임과 동기화하여 여전히 72 FPS를 디스플레이에 출력하도록 합니다. 32FPS와 72FPS차이가 궁금하시면 토글 펼치기~ 더보기 36fps로 렌더링 장면을 렌더링하고 초당 36회 디스플레이를 업데이트합니다. 각 프레임을 렌더링하는 데 약..
partial class를 사용하여 클래스 정의를 여러 소스 파일에 분할할 수 있습니다. 이는 대규모 프로젝트에서 여러 프로그래머가 동시에 작업하거나 자동으로 생성된 소스 코드를 수정할 때 유용합니다. partial class를 사용하면 클래스의 정의를 여러 부분으로 나눌 수 있으며, 컴파일 시간에 나눠진 부분들이 결합됩니다. using System;// Employee 클래스를 partial로 분할public partial class Employee{ public void DoWork() { Console.WriteLine("Employee is working."); }}// Employee 클래스의 다른 부분public partial class Employee{ p..
메소드 숨기기는 파생 클래스에서 기본 클래스의 메서드와 동일한 이름을 사용할 수 있도록 합니다. override 한정자는 기본 클래스의 virtual 메서드를 확장하고, new 한정자는 기본 클래스의 메서드를 숨깁니다. class BaseClass { public void Method1() { Console.WriteLine("Base - Method1"); } } class DerivedClass : BaseClass { public new void Method1() { Console.WriteLine("New - Method1"); } } 이렇게 new한정자를 사용하여 DerivedClass derivedClass = new DerivedClass (); derivedClass.Method1(); 를..
LoadSceneMode에는 두 가지 옵션이 있습니다. Single: 이 옵션을 사용하면, 기존에 로드된 모든 씬이 종료되고 지정한 씬이 로드됩니다. 즉, 현재 열려 있는 씬을 닫고 새로운 씬을 엽니다. 씬을 종료한다는 것은 해당 씬에 생성된 모든 게임 오브젝트를 파괴한다는 의미입니다. Additive: 이 옵션을 사용하면, 현재 로드된 씬에 지정한 씬이 추가로 로드됩니다. 즉, 현재 열려 있는 씬을 유지하면서 새로운 씬을 엽니다. 이렇게 하면 여러 씬을 동시에 열어놓을 수 있습니다. 따라서, LoadSceneMode.Single은 새로운 씬을 열 때마다 기존의 씬을 닫는 반면, LoadSceneMode.Additive는 새로운 씬을 열 때마다 기존의 씬을 유지합니다. 이 두 가지 옵션을 적절히 사용하여..
유니티 프로젝트를 하다 보면 위와 같이 경고문을 볼 수 있습니다. 몇 몇 경고문들은 주의하셔야 하지만, 사용되지 않는 필드 등 필요 없는 경고문도 존재합니다. 그런 경고문을 아래 코드를 사용하여 없앨 수 있습니다. #pragma warning disable 경고문을 보면 해당 경고문의 번호가 나오는 데 해당 번호를 적으시면 됩니다.
메쉬를 묶는 이유는 Batch를 줄이기 위함입니다. CombineMesh함수를 이용하지 않고 MeshBaker 에셋을 이용해서 줄이는 방법도 있지만, 이번 시간에는 CombineMesh함수를 이용한 방법에 대해 알아보고자 합니다. 유니티 MeshBaker MeshBaker란? 여러 개의 메시를 하나의 큰 메시로 결합하고 해당 오브젝트의 텍스처를 텍스처 아틀라스 및 텍스처 배열로 만드는 데 있어 도움을 주는 툴(Tool)입니다. 텍스쳐 아틀라스를 사용하지 wlsdn629.tistory.com 사용방법 using System.Collections.Generic; using UnityEngine; public class MeshCombiner : MonoBehaviour { public GameObject P..
이번 포스팅에서는 Text Mesh Pro 사용방법에 대해 알아보고자 합니다.TextMesh Pro 임포트 프로젝트 세팅에 들어가셔서 TextMesh Pro를 임포트해줍니다.그 다음, TextMeshPro - Text를 하나 생성해준 다음 영어와 한글을 적어줍니다. 캔버스를 보시면 한글이 깨져있는 것을 볼 수 있습니다. 그 이유는 폰트가 영어 및 기호들만 Bake 되어 있는 동시에 Static Mode이기 때문입니다. 따라서 TextMeshPro에서 기본적으로 제공하는 폰트는 한글을 지원하지 않는다는 소리입니다. Static TextMeshProStatic Mode는 표시할 텍스트에 대해 미리 메모리를 할당합니다. 메모리가 미리 할당되기 때문에, Static TextMeshPro는 텍스트가 자주 변경되..
메티리얼을 직접 수정하면 각 객체에 대해 메모리에 해당 머티리얼의 새로운 인스턴스를 생성하게 됩니다. MaterialPropertyBlock를 사용하여 복사본이 생성되는 문제를 해결할 수 있습니다. MaterialPropertyBlock 아래 코드는 MaterialPropertyBlock를 사용한 간단한 예시 입니다. void ChangeColorWithMaterialPropertyBlock() { Renderer renderer = GetComponent(); MaterialPropertyBlock propBlock = new MaterialPropertyBlock(); renderer.GetPropertyBlock(propBlock); propBlock.SetColor("_Color", Color.r..
Unity 프로젝트에 국한된 내용이 아닌 모든 소프트웨어 개발 프로젝트에서 잘 정의된 폴더 구조를 따르는 것은 여러 가지 이유로 중요하며 다음과 같은 많은 이점을 제공합니다.체계적인 폴더 구조를 따를 때 얻을 수 있는 이점가독성: 명확하게 정리되어 있는 폴더 구조를 사용하면 찾고자 하는 폴더를 쉽게 찾을 수 있습니다. 효율성: 명확하게 정리되어 있는 폴더 구조를 사용하면 찾고자 하는 리소스를 더 빠르게 찾을 수 있어 개발 속도가 빨라집니다.충돌 방지: Git과 같은 버전 관리 시스템에서 명확하게 정리되어 있는 폴더 구조를 사용하면 파일 충돌 및 중복 작업을 방지하는 데 도움이 됩니다.확장성: 프로젝트 규모가 커짐에 따라 명확하게 정리되어 있는 폴더 구조를 사용하면 점점 늘어나는 리소스들을 관리하는 데 도..