본문 바로가기

Study/Unity8

[Unity] Unity Render Streaming(유니티 스트리밍) 유니티의 화면을 외부에 스트리밍 하는 방법 1. PakageManager에서 좌측 상단의 + 버튼을 누르고 Add package by name을 누른 뒤 아래의 문자를 입력 후 Add 클릭 com.unity.renderstreaming 2. 다운받은 뒤 뜨는 Render Streaming Wizard에서 Fix All 클릭 3. 같은 창 하단의 WebApp에서 첫번째 버튼을 클릭하여 web app 다운 4. 다운받은 실행파일 실행 5. 실행 후 가장 하단의 경로를 인터넷 주소창에 복사하여 진입 http://127.0.0.1:80 6. Receiver Sample 클릭 7. 유니티로 다시 돌아와서 다운받은 Unity Render Streaming 패키지의 샘플을 프로젝트에 임포트 8. 외부로 스트리밍하고 .. 2024. 4. 18.
[Unity] ReadOnly 인스펙터 - 읽기전용으로 인스펙터에 보일 수 있게 만들어주는 Attribute 생성 코드 - 변수 앞에 [ReadOnly]를 붙여 사용가능(단, public 이거나 Serialized Field 를 이용해 인스펙터 상에서 보여야 함.) - [ReadOnly(false)] 또는 [ReadOnly]는 모든 경우에 읽기전용 - [ReadOnly(true)] 는 런타임 중에만 읽기전용으로 변경 #region ReadOnly 인스펙터 생성이 가능하도록 함. #if UNITY_EDITOR namespace UnityEditor { [CustomPropertyDrawer(typeof(ReadOnlyAttribute), true)] public class ReadOnlyAttributeDrawer : PropertyDrawer.. 2024. 3. 4.
[Unity] 유니티 - UI 자동 바인딩 구현(Reflection 이용, enum) 인프런 루키스님의 강좌를 참고했습니다. - 드래그 앤 드롭을 매번 해주는 것을 대체하기 위해서 구현했다. - dictionary에 사용할 오브젝트를 담고, 드래그 앤 드롭 대신 enum을 이용했다. - enum의 원소이름은 사용할 오브젝트의 실제 이름과 동일해야 한다. // UI_Base using System; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; public class UI_Base : MonoBehaviour { // 컴포넌트 타입별 오브젝트들을 담아 관리할 딕셔너리 // Key : enum 이름, Value : 오브젝트 배열 Dictionary dict = new Dictiona.. 2024. 2. 4.
[Unity][C#] 인터페이스(Interface) 인터페이스란? - 외부와 통신하는 공개 통로, 통로의 규격 - 통로의 규격은 강제하지만, 내부에서 어떤 일이 일어날지를 결정하지는 않음. 인터페이스의 특징 - 관례적으로 이름 앞에 I를 붙여 선언 - 인터페이스를 상속하는 클래스는 해당 인터페이스의 메서드를 반드시 구현해야함. - 인터페이스를 상속하는 클래스는 해당 인터페이스의 메서드를 반드시 public으로 선언해야함. - 세부적인 타입과 구체적인 구현을 따지지 않고 동작 - 느슨한 커플링(Loose Coupling) : 어떤 코드가 특정 클래스의 구현에 결합되지 않아 유연하게 변경 가능한 상태 예시 public interface IItem { void Use(GameObject target); } public class HpPotion : MonoBe.. 2024. 2. 1.
[Unity] 싱글톤 - Managers(매니저 관리 담당 매니저) using UnityEngine; public class Managers : MonoBehaviour { #region 싱글톤 static Managers _instance = null; public static Managers Instance { get { Init(); return _instance; } } static void Init() { if (_instance == null) { // @Manager 라는 이름의 게임 오브젝트를 찾음 GameObject mgr = GameObject.Find("@Managers"); // 해당 게임 오브젝트를 찾지 못한 경우 -> 새로 생성 if (mgr == null) { Debug.Log("매니저 새로 생성"); // 게임 오브젝트 생성 mgr = Ins.. 2024. 1. 29.
[Unity] NavMesh 동적 베이킹(feat. Static 체크박스) 게임 실행 중 NavMesh의 Map을 변경해야 될 일이 생겨서 NavMesh 동적 베이크에 대해 알아보았다. 기본적으로 unity 22버전 이후에는 NavMesh 전용 패키지가 생겨 해당 패키지를 다운받아 사용하면 이전 버전에서 깃허브에서 다운받아 사용하던 고급 NavMesh가 기본적으로 내장이 되었다. 아래와 같이 컴포넌트를 설정하고, 스크립트를 작성해 MapManager에 연결하면 끝! 인줄 알았지만 가장 밑의 이미지처럼 오류가 생겼다. 이것저것 해보다가 알아낸 결과, 왜인지는 잘 모르지만 GameObject 옆의 Static 체크박스를 모두 해제하니깐 되었다! using Unity.AI.Navigation; using UnityEngine; public class MapManager : MonoB.. 2024. 1. 9.
[Unity] 헷갈리는 개념, Collider - Layer Overrides(Include Layers, Exclude Layers) 유니티에서 콜라이더의 속성 중 Layer Overrides에 대해 알아보자! 아래 그림과 같은 대부분의 기본 콜라이더에 포함되어있는 Layer Overrides 속성을 이용해 레이어를 이용한 확장기능을 이용할 수 있다. 1. Layer Override Priority : 자신의 콜라이더와 겹치는 충돌이 발생할 때 어떤 것을 우선할지를 정해주는 우선순위이다. : 숫자가 낮을수록 우선순위가 높다. 2. Include Layers : 충돌행렬에서 충돌이 안되게 설정한 것들을 이 물체에만 충돌체크가 되도록 해준다. 3. Exclude Layers : 설정한 레이어로 된 콜라이더와의 접촉은 무시한다. ※ 예시 1. 아래 그림에서 가운데 두 캡슐은 각각 큰 원형의 콜라이더를 가지고 있다.(Rigidbody도 가지고.. 2024. 1. 5.
[Unity] 유니티 최적화(Unity Batching) 1. Draw Call(드로우 콜) - CPU : 디지털 콘텐츠를 구성하고 있는 게임 오브젝트, 데이터 등을 읽어들이는 역할 - GPU : CPU에게 받아온 데이터를 토대로해서 컨텐츠를 그리는 역할 - Draw Call : CPU가 GPU한테 자신이 읽어들인 데이터를 그리리고 내리는 명령 - Command Buffer : 드로우 콜에 따라오는 데이터들, 다양한 정보들의 버퍼들이 포함되어 있음. - SetPass Call : Command Buffer의 그래픽 계열 쪽(메테리얼, 쉐이더 등)을 묶어놓은 그룹 SetPass를 전달하는 것을 의미 - Batch : Draw Call + SetPass Call 을 통해 GPU로 넘기는 과정, 많으면 많을수록 부하가 줄음. - 최적화 : Batch를 줄이는 것. .. 2023. 11. 3.