본문 바로가기

유니티14

[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] 유니티 GPU 버그 - D3D11 swapchain~ 개발 중 갑자기 아래와 같은 문구가 뜨면서 유니티가 튕겼다. 그래서 이리저리 서치해서 해결방안을 찾아냈다! 💡해결방안 디스플레이 설정 > 그래픽 > 유니티 아이콘 클릭 > 옵션 클릭 > Windows가 결정하도록 허용 -> 고성능으로 변경 cf) 이 방법으로도 안 될 경우 아래 사이트를 참조하길 바란다. Bug - Failed to present D3D11 swapchain due to device reset/removed. List of Solutions For reference, the bug report is IN-41214. So this unrecoverable error can happen for many but essentially your graphic card resets because .. 2023. 12. 26.
[C#/Unity][디자인패턴] 컴포지트 패턴(Composite Pattern) 1. 컴포지트 패턴이란? - 사용자가 단일 객체와 복합 객체 모두 동일하게 처리할 수 있음. - 객체들의 관계를 트리구조로 구성하여 부분-전체 계층을 표현하고 각 구조들을 개별 객체들처럼 다룰 수 있는 구조패턴. - 여러 객체의 합성(composite)을 제어할 수 있도록 하는 객체를 정의 - 동일한 타입의 자식 객체들을 관리하는 동일한 타입의 컴포지트 객체를 생성하여 관리하는 객체를 통해 자식 객체들에게 접근하는 패턴 - 복합 객체(Composite)와 단일 객체(Leaf)를 동일한 컴포넌트로 취급하여, 클라이언트에게 이 둘을 구분하지 않고 동일한 인터페이스를 사용하도록 하는 패턴. 2. 컴포지트 패턴을 사용하는 경우 - 전체-부분의 관계를 갖는 객체들 사이의 관계를 정의할 경우 - 여러 개체를 동일한.. 2023. 11. 28.
[Unity] 유니티 Terrain에 지형 데이터 .tif 넣는 방법 - 유니티에서는 최대 4K까지 지원하는 듯 1. 지형 elevation파일(.tif)과 텍스쳐 이미지 파일(.tif)을 받는다. 2. 유니티 새로운 씬 생성 3. Hierarchy에서 Terrain 생성 4. 스크립트 작성(높이값을 반전) using UnityEngine; public class SetTerrainHeight : MonoBehaviour { public Texture2D HeightMap; [ContextMenu("SetHeight")] public void SetHeight() { TerrainData terrainData = GetComponent().terrainData; int terrainWidth = terrainData.heightmapResolution; int terrai.. 2023. 11. 27.
[C#/Unity][디자인패턴] 어댑터 패턴(Adapter Pattern) 1. 어댑터 패턴이란? - 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴. - 두 객체 사이의 래퍼 역할을 함. - 호환되지 않는 객체들이 협업할 수 있게 함. - 기존 코드를 클라이언트가 사용하는 인터페이스의 구현체로 바꿔주는 패턴. - 하나의 객체에 대한 호출을 캐치하고 두 번째 객체가 인식할 수 있는 형식과 인터페이스로 변환시켜줌. 2. 어댑터 패턴을 사용하는 경우 - 버그가 없이 이미 존재하는 클래스를 재사용하는 경우 - 이미 만들어진 클래스를 새로운 인터페이스에 맞게 개조시키는 경우 - 오픈소스를 사용하거나 프로젝트 중간에 합류해서 작업해야 하는 경우 3. 어댑터 패턴의 장점 1) 호환성 : 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있음.. 2023. 11. 23.
[개발더미][Unity] Post Processing - 흑백, 반전, 초점 조절 - 업그레이드 버전 1. Unity > Window > PackageManage의 Post Processing을 다운받아 사용한다. 2. 사용할 카메라에 Post-process Layer 컴포넌트를 추가한다. 3. Layer에 사용할 Layer를 추가(ex. Post process)하고, Post-process Layer 컴포넌트의 Layer를 해당 레이어로 설정 4. Hierarchy 창에서 마우스 우클릭> 3D Object > Post-process Volume 추가 5. Profile의 New 버튼을 눌러 새로운 Profile 생성 6. Add Effect > Unity > 이하 속성들 클릭 후 생성가능 ※ 버전이 올라가면서 유니티 자체에 내장기능으로 바뀌면서 적용법이 조금 달라졌다. 1. 카메라 자체에 Volume .. 2023. 11. 7.
[개발더미][Unity] 바라보는 방향으로 회전 struct RotData { // 회전 데이터 public float angle; // 회전 각도 public float rotDir; // 회전 방향 } void CalculateAngle(Vector3 forwardDir, Vector3 rightDir, Vector3 lookDir, out RotData data) { // 각도 계산 함수 // 자신의 앞 방향 forwardDir과 바라봐야 할 방향 lookDir 사이의 각도를 구하는 함수 // 1. 각 입력 벡터를 정규화하여 크기를 1로 세팅 // 2. 두 벡터 사이의 각도를 x라고 하면 cos(x)는 자신의 forwardDir의 크기 1과 forwardDir, lookDir의 내적값의 크기 d로 구할 수 있음 // 3. cos(x) = d/1 .. 2023. 7. 29.
[개발더미][Unity] 타점에 콜라이더 생성, Physic.OverlabSphere() protected override void OnAttack() { // 공격 발생시 동작 print("atk"); // 타점 주변의 콜라이더 중 Monster 레이어를 가진 콜라이더만 가져옴 // 문제 발생 : 3번째 공격부터 콜라이더 인식을 못함ㅋㅋ // 해결 -> rigidbody의 isKinematic을 체크하여 해결! Collider[] monsterColiders = Physics.OverlapSphere(attackPoint.position, 1, attackLayer); foreach (Collider col in monsterColiders) { print(col.gameObject.name + " attack"); if (col.GetComponent() == null) continue;.. 2023. 7. 25.
[개발더미][Unity] 모노 싱글톤 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Singleton : MonoBehaviour where T : MonoBehaviour { private static object lockObject = new object(); // 쓰레드 안전화에 사용 private static bool isQuit = false; // 프로그램이 종료되거나 이상이 있는 경우 판단 private static T instance = null; // 객체 public static T Instance { // 쓰레드 안전화(Thread-Safe) get { // lock블럭 : 한번에 한 쓰레드만 실행되도록 .. 2023. 7. 25.