transform.GetSiblingIndex()란?transform.GetSiblingIndex()는 GameObject가 현재 계층 구조에서 몇 번째 위치(자식 순서)에 있는 반환해줍니다. 예를 들어, 게임 오브젝트들이 같은 부모 오브젝트 아래에 있는 경우, GetSiblingIndex()를 사용하여 해당 GameObject의 위치 순서(번호?)를 얻을 수 있습니다. GetSiblingIndex함수는 GameObject의 자식들을 정렬하는 경우에 유용합니다. 실제로 transform.GetSiblingIndex()를 사용해서 슬롯을 정렬하는 함수를 만들어봤습니다.int childIndex = transform.GetSiblingIndex();int row = childIndex / maxHorizo..
System.Obsolete란?System.Obsolete는 C#에서 제공하는 속성으로, 특정 메서드나 클래스가 더 이상 권장되지 않음을 나타내는 데 사용됩니다. System.Obsolete속성을 사용하면 해당 메서드나 클래스를 사용하는 코드가 컴파일될 때 경고 또는 오류를 생성합니다.System.Obsolete 속성은 다음과 같이 세 가지 형태로 사용할 수 있습니다.[Obsolete]: 매개변수를 사용하지 않으면 해당 메서드나 클래스를 사용하는 코드가 컴파일될 때 경고를 생성합니다.[Obsolete(string message)]: 더 이상 권장되지 않는 이유를 설명하는 메시지를 포함합니다.[Obsolete(string message, bool error)]: 불리언 값이 true로 설정되면, 해당 메서..
Scene Controller을 만들기 위해서는 Singleton과 UniTask를 사용해야 합니다. 아래 포스팅에서 '싱글톤'과 'UniTask' 사용방법을 참고해주세요. 두고두고 써먹는 싱글톤(SingleTon) 코드싱글톤 패턴이란? Unity 싱글톤 패턴은 특정 클래스가 게임 수명 기간 동안 하나의 인스턴스만 갖도록 하기 위해 Unity 게임 개발에서 일반적으로 사용되는 디자인 패턴입니다. 이 패턴은 게임 내wlsdn629.tistory.com 유니티 코루틴 대신 unitask유니티에서 unitask를 사용하기 앞서, 유니티에서 사용하는 코루틴이 무엇인지 알아야 진정한 unitask의 장점을 알 수 있습니다. 지피지기 백전불태 그렇기에 유니티에 기본적으로 내장되어 있는wlsdn629.tistor..
유니티 하프라이프 알릭스 Distance Grab, XR Interaction Toolkitusing UnityEngine; using UnityEngine.XR.Interaction.Toolkit; public class HalfLifeDistanceGrab : XRGrabInteractable { public float VelocityThreshold = 2f; public float JumpAngleInDegree = 60f; private XRRayInteractor m_XrRayInteractor; private Vector3 prevwlsdn629.tistory.com예전에 하프라이프 그랩 기능을 만들어 본적이 있습니다.Hurricane VR에는 해당 기능이 구현되어 있어서 쉽게 해당 기능을 ..
핵심 2가지HurricaneVR 에셋을 사용하기 위해서는 Scene에 반드시 2가지가 존재해야 합니다.XR Rigs : HurricaneVR에셋에는 이미 제작된 두 개의 XR Rig가 포함되어 있습니다. (XR Rig 위치: /HurricaneVR/TechDemo/Prefabs/)TechDemoXRRig: Oculus / SteamVR 플러그인과 함께 사용할 때 사용하는 Rig입니다.TechDemoXRRigOpenXR: OpenXR 플러그인과 함께 사용할 때 사용하는 Rig입니다.HVRGlobal : 프레임워크가 기능을 수행하는 데 필요한 여러 컴포넌트가 포함되어 있습니다. 예를 들어, Input Manager, Time Manager 등의 역할을 수행합니다. XR Rigs과 HVRGlobal이 포함된..
유니티 원하는 씬으로 실행되게 하기이 포스팅에서 사용된 코드는 아래 블로거분의 코드를 참고하였습니다! https://mentum.tistory.com/657 unity 언제나 특정 씬에서 시작하게 만들기 #. 특정 씬에서 시작하는 게임 환경 어느 씬 에서나 테wlsdn629.tistory.com 예전에 원하는 씬으로 자동 플레이 되는 에디터 스크립트 코드를 작성해본적 있습니다.문제는 지금 보고 있는 씬이 실행되길 원하는데 자동으로 지정한 씬으로 플레이 되기 때문에 불편함이 있다는 것입니다. 그래서 버튼으로 현재 씬을 플레이할 지, 아니면 지정한 씬을 플레이할 지 선택할 수 있게 만들어 봤습니다. using UnityEditor;using UnityEditor.SceneManagement;using Un..
URP에도 샘플이 존재합니다. 샘플 수가 적은 편이 아니고 꽤 되는 편입니다.Rendering Pipeline공부하시는 사람이라면 반드시 샘플 먼저 공부하시면 도움이 될 것 같습니다. 예전에 지나가면 길이 움푹 파이는 효과를 구현해보고 싶었는데 URP 샘플에 있어서 공부할 수 있었습니다.
Normal From Height Node는 들어오는 Height 값을 사용하여 대략적인 Normal을 생성합니다.좌측 Gradient Noise Node를 보면 0과 1의 값으로 이루어져 있으며, 이 값으로 Height 값을 결정하는 것 같습니다. 0이면 높이가 낮고, 1이면 높이가 큰? Normal From Height Node를 처리하는 과정은 단지 Height Input만을 사용하기 때문에 Normal From Texture 노드와 같이 3개 이상의 텍스처 샘플을 사용하는 것보다 더 저렴한 방법으로 Bump Mapping 작업을 수행합니다. 그러나, 필터링이 없기 때문에 결과는 매우 저품질이며 픽셀화된 외관을 가질 수 있다는 단점이 있습니다. The Basic에 대한 설명입니다.The Basic에..
using UnityEngine;using System.Collections;[RequireComponent(typeof(Collider))]public class Door : MonoBehaviour { public enum rotOrient { Y_Axis_Up, Z_Axis_Up, X_Axis_Up } public enum rotFixAxis { Y, Z } public rotOrient rotationOrientation; public bool applyRotationFix = false; public rotFixAxis rotationAxisFix; public float doorOpenAngle = -90.0f; [Range(1,5)] public float speed = 3.0f;..
using UnityEngine;using UnityEditor;public class ResetPlayerPrefs : MonoBehaviour{ [MenuItem("Window/PlayerPrefs 초기화")] private static void ResetPrefs() { PlayerPrefs.DeleteAll(); Debug.Log("PlayerPrefs has been reset."); }} 유니티 에디터 상단에서 버튼을 통해 PlayerPrefs 데이터를 초기화하는 코드입니다. 코드는 에디터 폴더에 만드셔야 합니다.코드를 만들고 나면 위 사진처럼 윈도우 탭에서 PlayerPrefs 데이터를 초기화할 수 있게 됩니다.
디자인 패턴을 무턱대고 사용하지 맙시다! 본인이 사용하고 있는 코드(디자인) 패턴이 무엇인지는 제대로 알고 사용하고, 디자인 패턴의 본연의 의미를 잃어버리지 맙시다!State Pattern이란? State Pattern은 객체의 상태를 캡슐화하여 해당 상태에 따라 객체의 행동을 내부에서 자동으로 변경하는 디자인 패턴입니다. 유니티 설치과정을 예시로 말해보겠습니다. 우리가 유니티를 설치할 때 내부에서 어떻게 설치되는지 알아야 하는 이유가 있을까요? 저희는 그저 Next 버튼을 클릭하기만 하면 됩니다. Next 버튼을 누르면 내부에서 알아서 설치가 되고, 설치가 마무리되면 프로그램은 저희에게 또다시 Next 버튼을 누르라고 합니다. 그 과정이 끝나면 프로그램은 Finish 버튼을 누르라고 저희에게 알립..
VR 개발하시는 분들이라면 Grab Interactable Object를 만들 때 Rigidbody 만들고, Collider 만들고, Grabbable 컴포넌트 추가하는 등의 매우 귀찮은 작업을 항상 하셔왔을 것입니다. 이제는 그럴 필요가 없어졌습니다. 버튼 딸깍 딸깍 한 번으로 Interaction 기능을 만들 수 있게 되었습니다.사용 방법 사용하고자 하는 Interactor를 선택해서 생성해줍니다. 이때도 Block Building 방법으로 쉽게 만들 수 있지만 , 저는 아직 버그가 많아보여서 사용하지 않고 프로젝트에서 검색해서 Drag해서 끌어다 놓는 방법을 여전히 이용중에 있습니다. Interactor를 끌어다놨으면 그에 맞는 Interactable 객체를 만들어야겠죠? Cube를 하나 만들어주..
[System.Serializable]이란?C#의 속성(attribute)으로, 클래스, 구조체 또는 필드에 적용할 수 있습니다. System.Serializable 속성을 사용하면 직렬화 시스템에 의해 데이터가 직렬화될 수 있음을 나타냅니다. 직렬화는 데이터 구조나 객체 상태가 에디터에 저장되고 나중에 재구성할 수 있는 포맷으로 자동으로 변환하는 프로세스를 뜻합니다. 직렬화?🔽더보기직렬화는 데이터를 저장하거나 전송하기 위해 일련의 연속적인 바이트로 변환하는 과정을 말합니다. 연속적인 바이트로 변환시키면 복잡한 데이터 구조를 쉽게 저장하고 전송할 수 있습니다. 직렬화된 데이터는 나중에 역직렬화를 통해 원래의 형태로 복원할 수 있습니다.예를 들어, 우리가 게임을 만들고 있고 플레이어의 정보, 아이템, ..
위와 같이 여러개의 Image를 사용하는 캔버스가 있다고 가정하겠습니다.이런 경우, 우측 사진처럼 각 이미지마다 Draw Call을 발생하게 됩니다. 하나의 Image를 여러개의 이미지처럼 사용하는 Altas기법을 사용해서 최적화를 해보겠습니다.Sprite Altas 사용하기 Sprite Altas를 사용하기 위해서는 사전 세팅이 필요합니다.프로젝트 세팅에 가서 에디터 탭, Sprite Altas 모드를 Sprite Altas V1 - Always Enabled로 설정해줍니다. 만약 보이지 않는다면 2D Sprite 패지키를 다운받아줍니다. 그 후, Sprite Atlas를 생성해줍니다. 생성해준 다음 사용할 Sprite들을 집어넣어줍니다.Preview를 하면 아틀라스가 생성된 것을 확인할 수 있습니다..
해당 글은 아래 유니티 블로그에 나온 글을 정리한 것입니다. Optimize your mobile game performance: Get expert tips on physics, UI, and audio settings | Unity BlogYou might have UI elements that only appear sporadically in the game (e.g., a health bar that appears when a character takes damage). If your invisible UI element is active, it might still be using draw calls. Explicitly disable any invisible UI componentsblog.u..