본문 바로가기

Unity41

[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] NavMeshAgent에서 물리로 바꿀 때 버그 수정 (feat. 밑으로 추락하는 버그) navMesh를 구웠을 때, 실제 길보다 띄워져서 ai경로가 생기는 현상 발생 -> 멈추고 나서 아래로 추락하는 버그 생김 navMesh.updatePosition과 navMesh.updateRotation을 false로 바꿨는데도 움직이다가 멈추니깐 잘 안됐음. 그래서 꼼수로 updatePosition을 멈추는 순간에 false->true->false로 했더니 됨. 근데 왔다갔다 하는건 그대로임. -> ai맵을 구울때 생기는 살짝 뜬 공간(?)만큼 원래 맵을 올려주니 잘 되는듯..? -> updatePosition, updateRotation, isStopped, velocity를 조절하면 됨.(아래 코드 참고) 2024. 1. 5.
[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.
[C#/Unity][디자인패턴] 방문자 패턴(Visitor Pattern) 1. 방문자 패턴이란? - 알고리즘을 객체 구조에서 분리시키는 패턴. - 데이터 구조와 데이터 처리를 분리하여, 데이터 구조 내부에 방문자 클래스를 만들어 각각을 처리한다. - 방문자와 방문 공간을 분리하여, 방문 공간이 방문자를 맞이하고, 이후에 대한 행동은 방문자에게 위임하는 패턴. 2. 방문자 패턴을 사용하는 경우 - 자료구조(데이터)와 자료구조를 처리하는 로직(알고리즘)을 분리해야 할 경우 - 데이터 구조보다 알고리즘이 더 자주 바뀌는 경우 - 복잡한 객제 구조(ex. 객체 트리)의 모든 요소에 대해 작업을 수행해야 하는 경우 3. 방문자 패턴의 장점 - 구조를 수정하지 않고, 새로운 동작을 기존의 객체 구조에 추가할 수 있다. - 작업 대상(방문 공간)과 작업 항목(방문 공간을 가지고 하는 일).. 2023. 12. 31.
[C#/Unity][디자인패턴] 책임 연쇄 패턴(Chain of Responsibility Pattern) 1. 책임 연쇄 패턴이란? - 사용자의 요청을 처리함에 있어, 연쇄(Chain)적으로 연결되어있는 처리 객체(Handler)들을 이용하는 패턴. - 클라이언트로부터의 요청을 처리할 수 있는 처리 객체를 집합(Chain)으로 만들어 부여함으로 결합을 느슨하게 하기 위해 만들어진 디자인 패턴. - 일반적으로 요청을 처리할 수 있는 객체를 찾을 때까지 집합 안에서 요청을 전달한다. - 각각의 인스턴스의 책임들이 체인처럼 연쇄되어 있다는 뜻이다. - 요청을 보내는 쪽과 처리하는 쪽을 분리시키고, 요청을 보내는 쪽에서 해당 요청을 처리하는 핸들러가 어떤 구체적인 타입인지에 상관없이 디커플링된 상태에서 요청을 처리할 수 있게끔 해주는 패턴. - 클라이언트의 요청에 대한 세세한 처리를 하나의 객체가 몽땅 하는 것이 .. 2023. 12. 29.
[C#/Unity][디자인패턴] 템플릿 메서드 패턴(Template Method Pattern) 1. 템플릿 메서드 패턴이란? - 기능의 뼈대(템플릿)와 실제 구현을 분리하는 패턴. - 알고리즘의 구조를 메서드에 정의하고, 하위 클래스에서 알고리즘 구조의 변경헚이 알고리즘을 재정의하는 패턴. - 상속을 통해 슈퍼클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법. - 변하지 않는 기능을 슈퍼클래스에 만들어두고, 자주 변경되면 확장할 기능은 서브클래스에 만든다. 2. 템플릿 메서드 패턴을 사용하는 경우 - 알고리즘이 단계별로 나누어 지거나, 같은 역할을 하는 메서드이지만 여러곳에서 다른 형태로 사용이 필요한 경우 사용. - 알고리즘의 특정 단계들만 확장할 수 있도록 하고 싶지만 알고리즘의 구조는 확장하지 못하도록 하고 싶은 경우 3. 템플릿 메서드 패턴의 장점 - 중복을 줄이고, 코드의 재사용성을.. 2023. 12. 28.
[C#/Unity][디자인패턴] 전략 패턴(Strategy Pattern) 1. 전략 패턴이란? - 정책 패턴(Policy Pattern)이라고도 불리며 특정 알고리즘을 별도로 분리하여 설계하는 방법을 말함. - 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 사용할 수 있게 해줌. - 실행 중에 알고리즘(전략)을 선택하여 객체 동작을 실시간으로 바뀌도록 할 수 있게 하는 행위 디자인 패턴. - 객체의 행위를 변경하고 싶을 때, 직접 수정하지 않고 전략이라 불리는 캡슐화된 알고리즘을 변경. - 특정한 계열의 알고리즘들을 정의하고, 각 알고리즘을 캡슐화하며, 이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하도록 만든다. - 객체들이 할 수 있는 각각의 행위에 대해 전략 클래스를 생성하고, 유사한 행위들을 캡슐화하는 인터페이스를 정의하여 객체의 행위를 동적으로 바꾸.. 2023. 12. 28.