Interaction SDK를 사용할 때는 기본적으로 추천하는 'Rig(리그)' 구조를 사용하면 편리합니다.이번 포스팅에서는 Comprehensive Interaction Rig에 대한 특징과 장점, 그리고 설정 방법에 대해 알아보겠습니다.Comprehensive Interaction Rig란?Comprehensive Interaction Rig는 이전 버전들의 Rig 구조보다 더 발전된 형태로, 다음과 같은 장점이 있습니다.1. 모듈화(Modularity)Rig가 3가지 주요 부분으로 나누어져 있습니다.Data Sources (입력 소스)Interactions (상호작용 처리)Visuals (시각적 요소)각 모듈은 서로 독립적으로 교체할 수 있어서, 다른 플랫폼에도 쉽게 재사용할 수 있습니다.2. 간소..
VR을 개발하다 보면 한 쪽 눈에만 오브젝트 혹은 UI가 렌더링되는 경우가 종종 발생하시죠?이러한 문제들을 해결하기 위해서는 싱글 패스 인스턴스(Single Pass Instanced)라는 개념을 아셔야 합니다. 싱글 패스 인스턴스(Single Pass Instanced) 개념이 어디에 사용되냐고요?아래 사진을 보시면 VR 세팅을 하실 때 보실 수 있습니다.이번 포스팅에서는 싱글 패스 인스턴스(Single Pass Instanced)에 대해 배우진 않고, 어떻게 두 눈에 렌더링 되게 하는지 해결방법에 대해 알아보고자 합니다.싱글 패스 인스턴스(Single Pass Instanced)는 이전 포스팅을 참고해주세요. 유니티 Multi Pass와 Single Pass Instanced/Multi View에 대..
구글링을 해보면 "유니티 UPM" 등록 방법이 전부 다 이상하거나 어려운 말들로만 되어 있어서 "유니티 UPM" 설정에 꽤나 어려움을 겪었습니다... 여러 시행착오 끝에 알아낸 "유니티 UPM" 등록 방법을 아주 쉽게 공유드리겠습니다! (좋아요, 구독 !)1. 유니티 UPM 패키지 폴더 구조 준비바탕화면이나 편한 곳에 폴더를 하나 새롭게 만들어줍니다. 폴더 구조는 아래와 같이 구성합니다. 저는 폴더 이름을 DebugUtils라고 지어주었으며 폴더 내부에는 반드시 Runtimepackage.jsonREADME.md파일들을 만들어주셔야합니다. 이때 확장자도 json이면 반드시 . 뒤에 다 삭제하시고 .json을 입력해주시고, md도 마찬가지입니다! 2. package.json 작성아래는 예시 package..
'The file was loaded in a wrong encoding: UTF-8' 에러란?스크립트 파일을 열 때 나타나는 오류입니다. 보통 한글 주석이나 문자열이 포함된 파일을 UTF-8 인코딩으로 저장하지 않고, ANSI나 다른 인코딩으로 저장된 경우 발생합니다.해결방법스크립트 파일을 메모장이나 VS Code 등에서 열고 파일을 UTF-8 인코딩으로 다시 저장하면 해결됩니다.
유니티 6부터는 Meta XR SDK v74 이상을 사용하는 경우, OpenXR 플러그인을 활용하는 것이 권장됩니다. Meta가 OpenXR 표준을 적극적으로 지원하고 있으며, 다양한 플랫폼에서 일관된 XR 경험을 제공할 수 있도록 하기 위함입니다. XR Plugin Management for Meta QuestThis topic describes how to install XR vendor plugins using the Unity XR Plugin framework. It also explains the overall Meta XR SDKs and Unity XR Plugin framework architecture and the benefits of them.developers.meta.comUn..
이전에 Behaviour Desinger에 대해 소개해드린적이 있습니다.아직도 종종 BD 에셋을 사용해서 AI를 구현하곤 하는데요, 간만에 정리의 필요성을 느껴서 이렇게 작성하게 되었습니다. 유니티 Behaviour Designer란?Behaviour Tree, 줄여서 BT라고 불리는 이 용어는 예전부터 들어왔었습니다. 하지만 BT의 실용성에 대해 그닥 느끼지 못했기에 지금까지 사용하지 않았지만 FSM Pattern을 직접 제작해보고 난 이후 BT의wlsdn629.tistory.comSequence 계열 (순차 실행)Task이름 설명SequenceTask를 순차적으로 실행하며, 하나라도 Fail이면 즉시 중단하고 Fail 반환Random Sequence모든 자식 작업이 성공해야 Success 반환, 하나..
렌즈 플레어(Lens Flare)를 추가하기 위해서는 두 개의 스텝을 밟으셔야 합니다.첫 번째, 라이팅 에셋에 Lens Flare (SRP)를 추가해줍니다. 두 번째, Main Camera에 Flare Layer를 추가해주시면 됩니다. Lens Flare (SRP) 옵션 정리표 옵션 설명기본값추천 설정 예제Lens Flare Data사용할 렌즈 플레어 데이터 에셋Default Lens Flare (SRP)태양, 가로등 등 각각의 환경에 맞는 Flare Data 사용Intensity렌즈 플레어의 밝기 조절1.0태양: 1.5 / 가로등: 0.8Scale렌즈 플레어의 크기 조절1.0태양: 1.2 / 가로등: 0.9Light Override특정 Light 컴포넌트와 연결없음태양, 가로등 등 특정 광원에 연결Sc..
게임 개발을 하다 보면 변수 하나 선언하는 것도 신중해야 할 때가 많습니다. 특히, 게임 데이터(ex_ HP, 경험치, 레벨 등)는 외부에서 무분별하게 변경되면 심각한 버그를 초래할 수 있습니다. 이번 글에서는 유니티에서 데이터 보호를 위한 캡슐화, 보안, 유지보수, 그리고 데이터 무결성 개념을 정리해보습니다.캡슐화란 무엇인가?캡슐화(Encapsulation)는 객체지향 프로그래밍(OOP)의 중요한 원칙 중 하나로, 데이터를 외부에서 직접 접근하지 못하게 하고, 반드시 정해진 인터페이스(메서드나 프로퍼티)를 통해서만 변경할 수 있도록 하는 기법입니다.잘못된 예시 (캡슐화 X)public class Player{ public float HP = 100; // 누구나 직접 변경 가능}// 다른 스크립..
RecenterPose()란 무엇인가?OVRManager.display.RecenterPose() 함수는 (Meta)VR 환경에서 사용자의 현재 트래킹 데이터를 기반으로 Tracking Origin을 재설정합니다. 사용자가 VR 공간에 들어서거나 예상치 못한 문제가 발생했을 때, 이 함수를 호출하면 사용자의 포지션과 방향이 초기 상태로 재조정됩니다.OVRManager.display.RecenterPose();
[Button] public void PrintMessage() { Debug.Log(message); } [Button("Reset Position")] public void ResetPosition() { transform.position = Vector3.zero; Debug.Log("Position Reset!"); } [Button("Print Custom Message")] public void PrintCustomMessage(string message) { Debug.Log($"Custom Message: {message}"); }using System;using Uni..
OvrAvatarManagerOvrAvatarManager는 SDK의 생명주기(LifeCycle)를 관리하며, 주요 API를 제공하는 싱글톤 컴포넌트로써 중앙 설정 관리 역할을 수행하며 다음 기능들을 제공합니다.아바타 로드 속도 및 동시 실행 제한 등을 제어하여 프레임 속도를 유지합니다. 네트워크 대역폭 설정으로 로드 시간을 조정합니다.-1로 설정하면 대역폭 제한이 없으며, 설정 값을 낮추면 로드 시간이 증가할 수 있습니다.아바타 로드를 빠르게 하기 위해 자산(Avatar Asset)을 미리 로드합니다.Asset Preload는 로드 속도를 높이는 대신 메모리 사용량이 증가합니다.로그 레벨 설정으로 SDK 디버깅을 지원합니다.스키닝 솔루션 및 각 LOD에 대한 품질 설정을 지원합니다.사용하지 않는 Ski..
📌 Handles.Label()란?Handles.Label()은 씬(Scene) 뷰에서 특정 위치에 텍스트를 표시할 수 있는 함수입니다. Handles.Label()은 에디터 전용 기능입니다.기본적인 Handles.Label() 사용법using UnityEngine;using UnityEditor; // Handles를 사용하기 위해 필요public class HandlesLabelExample : MonoBehaviour{ void OnDrawGizmos() { Handles.Label(transform.position, "여기가 내 위치!"); }}씬(Scene) 창에서 오브젝트의 위치에 "여기가 내 위치!"라는 텍스트가 표시됩니다.public static void La..
Unity Meta SDK를 사용할 때 음성 인식 기능을 구현하려면 Meta Voice SDK와 Wit.ai을 활용하시면 됩니다. GitHub - oculus-samples/voicesdk-samples-whisperer: Oculus Voice SDK showcase demonstrating the use of Voice SDK in Unity. ThisOculus Voice SDK showcase demonstrating the use of Voice SDK in Unity. This project contains the source code for the "Whisperer" demo available on App Lab. The Oculus SDK and other suppor...github...
게임 개발 과정에서 실사풍과 스타일라이즈드는 게임의 전체적인 비주얼과 분위기를 결정하는 중요한 스타일입니다.두 스타일은 게임의 목적, 타겟층, 기술적 요구사항에 따라 선택되며, 각각의 장단점이 뚜렷합니다. 이번 글에서는 이 두 가지 스타일의 개념과 특징을 자세히 살펴보겠습니다.실사풍 (Realistic Style)실사풍은 현실 세계를 최대한 사실적으로 재현하는 스타일입니다. 이 스타일은 고해상도의 텍스처, 자연스러운 조명, 그리고 물리적 정확성을 강조합니다. 요즘 게임은 현실보다 더 현실같은 스타일을 만들어내곤 하죠. 그래픽의 발전덕분에요.목적: 현실과 유사한 경험 제공 (실제로 있을 법한 경험을 제공하기 위해, 현실보다 더 아름다운 분위기를 연출)디자인 특징: 세밀한 디테일, 고해상도 텍스처조명: 물리..
데이터를 다룰 때 종종 중복된 값이 문제를 일으키곤 합니다. LINQ에서 제공하는 Distinct() 메서드는 이러한 중복을 쉽게 제거해줍니다. Distinct()의 사용법과 다양한 활용 예제를 살펴보겠습니다.Distinct()란?Distinct()는 컬렉션 내의 중복된 요소를 제거하고 고유한 요소만 반환하는 LINQ 메서드입니다.using System;using System.Linq;using System.Collections.Generic;class Program{ static void Main() { var numbers = new List { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4 }; var uniqueNumbers = numbers.Distinc..