Audio Mixer란?오디오 소스에 대한 제어, 균형 및 동적 조정을 제공하여 리소스 사용을 최적화하여 게임을 즐기는 유저의 오디오 경험을 향상시킬 수 있습니다.Audio Mixer를 사용해야 하는 이유오디오 제어 및 균형 조정: Audio Source의 레벨과 균형을 세밀하게 제어할 수 있습니다. Audio Source의 볼륨을 조정하고 패닝을 적용하여 스테레오 필드의 사운드 위치를 지정하고 다양한 오디오 요소의 전체 믹스를 제어할 수 있습니다. 효율적인 리소스 관리: 유사한 Audio Source를 Audio 그룹으로 그룹화하여 볼륨을 제어하고 효과를 적용하고 전체적으로 조정할 수 있습니다. Audio Source개별적으로 처리하는 성능 오버헤드를 줄입니다.동적 오디오 변경: 스냅샷과 노출된 매개변..
Reset 함수란? MonoBehaviou를 상속받은 함수로, 에디터 모드에서 Reset 버튼을 클릭하거나 해당 컴포넌트를 추가할 때 자동으로 호출됩니다. Reset 함수를 사용하는 이유 Reset 함수의 주요 목적은 컴포넌트를 초기 상태로 재설정하거나 변수를 초기화하는 것입니다. 예를 들어, 게임 캐릭터에 사용될 컴포넌트를 만들었다고 가정해보겠습니다! 초기 상태로 설정해야 할 변수나 속성이 있다면 Reset 함수 내에서 해당 값을 초기화하면 됩니다. 예를 들어, 캐릭터의 Position, 캐릭터의 Hp, Speed 등이 있겠죠! Reset 함수는 에디터 모드에서만 호출되므로 Runtime에서는 영향을 주지 않습니다. private void Reset() { _grabbable = this.GetComp..
[DefaultExecutionOrder]이란? Unity에서 스크립트의 기본 실행 순서를 지정하는 데 사용됩니다. 기본적으로 Unity는 임의의 순서로 스크립트를 실행하므로 스크립트가 서로의 실행 순서에 따라 달라지는 경우 예측할 수 없는 동작이 발생할 수 있습니다. [DefaultExecutionOrder] 속성을 사용하면 스크립트가 실행되어야 하는 순서를 명시적으로 정의할 수 있습니다. 실행 순서 값이 낮은 스크립트는 값이 높은 스크립트보다 먼저 실행됩니다. ScriptA는 실행 순서 값이 -10이므로 다른 모든 스크립트보다 먼저 실행됩니다. ScriptB의 실행 순서 값은 5이며, ScriptA 뒤에 있지만 기본 실행 순서 값인 0보다 앞에 있습니다. ScriptC 및 ScriptD 모두 실행 순..
저의 천사 발렘 유튜버님의 영상을 후루룩 해왔습니다!!! 필요한 재료 첫 번째로 Animation Rigging이 필요합니다! 더보기 IK Foot Solver using UnityEngine; public class IKFootSolver : MonoBehaviour { public bool isMovingForward; [SerializeField] LayerMask terrainLayer = default; [SerializeField] Transform body = default; [SerializeField] IKFootSolver otherFoot = default; [SerializeField] float speed = 4; [SerializeField] float stepDistance =..
영상 코드 using UnityEngine; public class PullRope : MonoBehaviour { private bool isRightHoldedState; private bool canRightHoldRope; private bool isLeftHoldedState; private bool canLeftHoldRope; private Vector3 firstRightHoldTransform; private Transform holdingRightTransform; private Vector3 firstLeftHoldTransform; private Transform holdingLeftTransform; public Transform holdRightGrabTransform; publ..
Setting https://wit.ai/ Wit.ai wit.ai 홈페이지에 들어가셔서 페이스북 로그인을 해줍니다! 로그인을 다하고나면 New App을 눌러준 후 상황에 알맞게 Name, Language를 선택해줍니다! Voice 트레이닝 Utterance : 학습 시킬 내용 Intent : 주제 Entity : 내용에 관련된 것을 Entitiy화 시키기 Voice 학습시키는 것에 대해서는 다음 시간에 적어보겠습니다! 다 했으면 Train and validate를 클릭해줍니다! Management - Settings탭에 들어가서 Server Access Token키를 복사해줍니다! 유니티 Voice SDK Setting 상단 [Oculus] - [Voice SDK] - [Settings]을 눌러줍니다!..
주석을 사용하는 경우 주석을 사용하는 경우는 다음과 같습니다! API 설명서: 클래스, 메서드, 속성 및 이벤트와 같은 공용 API를 문서화하는 데 사용됩니다. 매개 변수, 반환 값 및 예외에 대한 명확한 설명, 사용 지침 및 세부 정보를 제공하는 데 도움이 됩니다. 잘 문서화된 API를 사용하면 다른 개발자가 코드를 더 쉽게 이해하고 사용할 수 있습니다. 코드 유지 관리: 시간이 지남에 따라 코드를 유지 관리하기 위한 귀중한 자체 문서 역할을 합니다. 코드에 주석을 추가하여 특정 섹션의 목적을 설명하거나, 복잡한 알고리즘 또는 계산에 대한 통찰력을 제공하거나, 특정 디자인 결정의 근거를 설명할 수 있습니다. 이는 미래의 개발자(자신 포함)가 코드베이스를 더 잘 이해하고 수정하는 데 도움이 됩니다. 협업..
Remap이란? 값을 한 범위에서 다른 범위로 쉽게 매핑할 수 있게 해주는 함수입니다. 선형 보간법을 사용하여 입력 범위 내에서 입력 값의 위치를 기준으로 출력 범위에서 해당 값을 계산합니다. public static float Remap(float value, float inputMin, float inputMax, float outputMin, float outputMax) { return outputMin + (value - inputMin) * (outputMax - outputMin) / (inputMax - inputMin); } 주의 inputMax값이 Value보다 낮을 경우 의도한 값이 나오지 않습니다!(즉, value값이 inputMin과 inputMax 사이에 존재해야한다는 뜻입니..
관람자 카메라를 만들어야 하는 이유 VR영상을 시청하곤 할 때 많은 시청자들이 멀미를 느끼게 됩니다. 물론, 가상현실 게임을 하고 있는 유저 또한 카메라 흔들림 문제로 인해 멀미를 느끼곤 하지만 간접적으로 영상을 시청하는 사람보다는 카메라 흔들림 문제에 대해 덜 부정적 경험을 받습니다. 그 이유로는 사용자가 VR에서 자신의 움직임과 행동을 능동적으로 제어할 때 카메라에 대한 통제력을 갖게 되므로 자신의 행동과 카메라의 움직임이 일치되어 멀미가 덜 나게 됩니다(운전하는 사람이 멀미가 덜 나는 이유). 또한, 플레이어는 가상환경 안에 존재하므로 가상환경에 더욱 집중할 수 있어서 멀미가 덜 나게 됩니다. VR 관중이 직면한 문제 위 영상을 시청해보면 VR 플레이어가 어디를 볼지 어떻게 행동할지 예측할 수 없고..
인생 처음으로 만들어본 VR 멀티 게임입니다! (1인 개발했습니다 후후..) 장르는 캐쥬얼이며, 숨바꼭질 타이틀을 가지고 있습니다! 가장 큰 매력은 "변신"시스템입니다! 게임의 영감을 받은 곳은 AI인척하는 게임들이였습니다! 영상을 보시면 의문이 들 수 있습니다. 왜 3인칭 시점으로 플레이해야하냐? 저의 고집때문이였습니다. VR게임은 멀미가 나서는 안되며 답답함을 느껴선 안된다는 저의 철학이 들어 있기 때문입니다. 멀미가 나지 않기 위해 카메라를 고정하였고, 답답함을 느껴선 안되므로 3인칭 시점으로 진행하도록 하였습니다. 저의 이론은 맞았습니다! 3인칭으로 플레이 및 카메라 고정 덕분에 멀미가 전혀 느껴지지 않았습니다. VR 멀티 게임을 만들면서 가장 힘들었던 부분은 "최적화" 였습니다! 최적화에 70프..
런타임에 사용되는 Graphics API를 확인하는 방법 void Start() { GraphicsDeviceType activeAPI = SystemInfo.graphicsDeviceType; Debug.Log("Active Graphics API: " + activeAPI); } 코드를 작성하고 빈오브젝트를 생성 후 거기에 부착해준 다음 플레이해보면 됩니다! 결과 현재 Graphics API는 Direc3D11을 사용하고 있음을 확인할 수 있습니다!