}
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과 같은 버전 관리 시스템에서 명확하게 정리되어 있는 폴더 구조를 사용하면 파일 충돌 및 중복 작업을 방지하는 데 도움이 됩니다.확장성: 프로젝트 규모가 커짐에 따라 명확하게 정리되어 있는 폴더 구조를 사용하면 점점 늘어나는 리소스들을 관리하는 데 도..
위와 같은 방식은 유니티에 내장되어 있는 Video Player를 이용한 방법이며, Video Player에 대한 사용방법에 대해 알아보겠습니다! Video Player란? Video Player를 사용하면 비디오를 재생할 수 있으며 로컬 콘텐츠와 스트리밍 콘텐츠를 모두 지원한다고 합니다. 재생, 반복 및 오디오 관리를 위한 컨트롤을 제공하고 3D 개체, UI 요소 또는 장면 배경에 비디오를 렌더링할 수 있는 기능 또한 제공한다고 합니다. 하이러키창에서 [Video] - [Video Player]를 선택하여 생성할 수 있습니다. Video Player Video Player를 실행시키기 위해 반드시 2가지는 설정하셔야 합니다. 첫 번째로 Video Clip이며, 두 번째로 Target Texture입니다..
Volume 컴포넌트를 이용하여 다양한 포스트 프로세싱을 컨트롤할 수 있습니다. 에디터 환경에서 포스트 프로세싱을 컨트롤 할 수 있지만, 스크립트를 이용하여 해당 포스트 프로세싱에 접근하고 싶은 경우가 생깁니다. 저의 경우, 포스트 프로세싱 중 Channel Mixer에 접근하여 런타임 중에 On/Off 하는 기능을 원했습니다. 다음은 스크립트를 이용한 Channel Mixer에 접근하여 On/Off하는 방법입니다. 코드 public Volume Volume; public void ToggleMixer(bool isOn) { ChannelMixer channelMixer; if (Volume.profile.TryGet(out channelMixer)) { channelMixer.active = isOn;..
유니티에서 화면을 회색으로 바꾸는 방법은 정말 다양합니다. 예를 들어, 셰이더를 이용해서 카메라의 렌더링을 컨트롤한다거나, 간단하게 UI를 이용하여 화면을 회색으로 가리는 방법 등이 있습니다. 저는 그중에서 (Post Processing)채널 믹서를 이용한 방법에 대해 소개드리고자 합니다. (Post Processing)채널 믹서 을 이용하기 위해서는 URP & HDRP환경이여야 합니다. 즉, 빌트인 환경에서는 어렵다는 뜻입니다. 채널 믹서란? 채널 믹서는 Unity의 URP 및 HDRP에서 사용되는 포스트 프로세싱 효과입니다. 채널 믹스를 통해 이미지의 빨강(R), 녹색(G), 파랑(B) 색상 채널의 강도를 조정할 수 있습니다. 앞서 언급했다시피, Unity의 채널 믹서를 이용하여 일반적으로 각 R, ..
CreateAssetMenu란? CreateAssetMenu는 특정 스크립트에서 새로운 어셋을 생성할 수 있는 메뉴 옵션을 제공해줍니다. 이를 통해 사용자가 유니티 에디터의 메뉴를 통해 쉽게 새로운 인스턴스를 만들 수 있게 됩니다. CreateAssetMenu 어트리뷰트(attribute)는 클래스 선언 바로 위에 위치해야 합니다. 예시 [CreateAssetMenu(fileName = "MonsterData", menuName = "MonsterScriptable/CreateMonsterData", order = int.MaxValue)] public class MonsterData: ScriptableObject { [SerializeField] private int hp; public int HP ..
애니메이션을 제작하다보면 가끔 디자이너로부터 잘못된 애니메이션 클립을 전달받는 경우가 생깁니다. 디자이너가 바쁘지 않다면 바로 수정해줄 수 있지만 여유가 없다면 유니티 개발자가 직접 수정하는 방법도 있습니다! 물론, 애니메이션 클립을 수정해주는 것이 가장 좋은 방법이라고 저는 생각합니다만 서로의 시간을 아끼기 위해 이번 포스팅에서는 개발자가 "직접" 애니메이션 클립을 조정하는 방법에 대해 알아보고자 합니다. Animation Clip 조정해보기 애니메이션 클립을 조정해보기 위해 애니메이션 클립 하나를 선택해봅니다. 애니메이션 클립을 눌러보면 Loop Time, Root Transform Rotation, Root Transfom Rotation(Y), Root Transfom Rotation(XZ) 옵션..
라이트맵과 라이트 프로브에 대해 총 정리하는 시간을 가져보고자 합니다. Unity Light Types유니티에는 총 4가지 형태의 빛이 있다 1. Spot 2. Directional 3. Point 4. Area 1번 Spot같은 경우 가로등 같은 형태의 오브젝트에서 타원형의 빛을 발광하기 위해 사용된다 또는 스포트라이트 생각하면 된wlsdn629.tistory.com Unity Light Probe에 대해서light mapping은 장면의 실사 느낌을 향상시킬 수 있지만, 동적인 객체가 사실적으로 렌더링 되지 않는 단점이 있다. 동적인 물체에 대한 라이트맵핑을 실시간으로 계산하는 것은 불가능 하지만, Ligwlsdn629.tistory.com 유니티 초보자인 내가 Light Probe를 사용할 수 있다..