유니티

    [Unity] 입력 바인딩 시스템 만들기

    유니티의 입력 시스템 유니티에는 2가지 Input System이 있다. 첫 번째는 Input.Get~ 꼴의 메소드를 이용해 이번 프레임에 해당 입력이 있었는지 검사하는 레거시 시스템 두 번째는 2019년 소개된 New Input System. New Input System을 사용하려면 패키지 매니저에서 Input System을 설치하고, 프로젝트 세팅에서 Active Input Handling을 지정하고, InputAction 윈도우에서 Action Map, Action, Property를 설정하고, New Input System을 사용할 게임오브젝트에 PlayerInput 컴포넌트를 넣고, 이제 스크립트에서 콜백 메소드를 작성해서 입력을 처리한다. 그리고 여기서 가장 중요한 런타임 바인딩 변경 기능. ..

    [Unity] 프러스텀과 오클루전 컬링 (Frustum & Occlusion Culling)

    프러스텀 컬링 (Frustum Culling) 카메라의 뷰 프러스텀(View Frustum) 영역 밖의 오브젝트들은 렌더링하지 않는 것 따로 설정하지 않아도 유니티 내에서 기본적으로 적용된다. 오클루전 컬링 (Occlusion Culling) 다른 오브젝트에 가려진 오브젝트들은 렌더링하지 않는 것 [Window] - [Rendering] - [Occlusion Culling] Occlusion Culling 윈도우를 통해 설정할 수 있다. 사전 준비 오클루전 컬링의 대상이 될 오브젝트들은 게임 내에서 움직이지 않아야 한다. 대상 게임오브젝트들을 Occluder Static 또는 Occludee Static으로 설정한다. Occluder : 다른 오브젝트를 가리거나 가려질 오브젝트 Occludee : Oc..

    [Unity] 셰이더 Shader

    정의 Unity 자체 쉐이더 언어인 ShaderLab과 CG(C for Graphics)를 함께 사용 하는 방식의 쉐이더이다. 기본적인 라이트, 버텍스 쉐이더의 복잡한 부분은 자동으로 처리된다. 즉 Matrix연산이 필요 없다. 스크립트 방식의 쉐이더지만 비주얼 쉐이더 에디터와 비슷한 개념을 가지고 있어 쉽다. Surface Shader 만들기 Project창에서 Create->Shader->Standard Surface Shader를 선택하여 쉐이더 파일 1개를 생성한다. Unity에서 Shader파일을 만드는 메커니즘은 맨 좌측 사진처럼 최초 Shader파일을 만들때 설정한 이름이 중앙 사진처럼 Shader의 기본 이름으로 설정된다.(스크립트 수정으로 이름 바꾸기 가능) 그리고 우측에 실제 마테리얼에..

    [Unity] DOTS란 무엇인가? Unity ECS 시스템 요약

    Unity DOTS DOTS는 Data-Oriented Technology Stack의 약자. 기존의 Object-Oriented 디자인이었던 유니티의 전통적인 방식이 아닌 데이터에 초점을 맞춘 아키텍처. Unity DOTS 설명 링크 ECS - entity, component, system 으로 구성된 data-oriented 프로그래밍 디자인 C# Job System - 멀티 스레딩을 안전한 환경에서 사용하며, 멀티 코어를 활용할 수 있는 시스템 Burst compiler -새로운 LLVM 기반 백엔드 컴파일러 기술을 통해 C# 잡을 수행하고 고도로 최적화된 머신 코드를 생성 ECS Entity Component System의 약자. 기본 세 가지 요소는 Entity, Component(data)와 ..

    [Unity] Sprite (UI, SpriteRenderer) 색상 관련

    유니티에선 아래와 같이 RGB가 각각 255로 설정되있는 모습인데 코드상으론 전혀 다르다 public readonly Color orange = new Color(255, 165, 0); GetComponent().color = orange; 따라서 이와같이 바꿔줘야 정상적으로 바뀐다. public readonly Color orange = new Color(1f, 0.6f, 0f); GetComponent().color = orange;

    [Unity] 게임 오브젝트 컴포넌트 패턴 (GameObject) C# 구현

    아래는 간단하게 구현해본 컴포넌트 패턴이다, gameObject라는 매개체 즉 자기 자신을 통해 해당 오브젝트가 존재하는지 확인 및 추가 기능. using System; using System.Collections.Generic; namespace ConsoleApplication1 { public class GameObject { // 컴포넌트 리스트 public List lstComp = new List(); public T GetComponent() where T : Component { // 리스트가 해당 오브젝트를 가지고 있을 시 if (lstComp.Contains(typeof(T))) { Type type = lstComp[lstComp.IndexOf(typeof(T))]; T comp = ..

    [Unity] / [SerializeField] [HideInInspector] [Serializable] 어트리뷰트 인스펙터 공개/비공개

    public 사용시 인스펙터에 오픈시켜 값을 수정 할 수 있으며 타 클래스에서도 접근이 가능하다. 유니티는 public만 직렬화 해주는데 private 또는 protected 필드를 명시적으로 직렬화 해줌으로서 인스펙터에 오픈 시켜준다. 단, 유니티의 공식 가이드에서는 이것을 "특별한 경우가 아니면 사용하지 않는다."라며, "public"을 추천하고 있다. 반대로, 변수의 접근 제한자가 "public"으로 지정되어 있지만, 유니티 에디터의 Inspector에서 노출되는 것을 막기 위해서는 "[HideInInspector]" 키워드를 사용한다. (참고로, HideInInspector 키워드는 키워드 아래에 있는 모든 변수를 노출하지 않지만, SerializeField 키워드는 키워드 바로 다음에 있는 변수..

    [Unity] Debug 클래스 (에디터 출력용)

    유니티 스크립트에서는 게임을 제작하는 동안 디버깅을 도와주기 위해 Debug 클래스를 제공한다. - Debug.Log() Debug.Log() 메소드는 괄호 () 안에 로그 메시지를 넣어주면, 유니티 콘솔창에 로그 메시지를 출력해주는 메소드이다. - Debug.LogError() Debug.LogError() 메소드는 괄호 () 안에 로그 메시지를 넣어주면, 유니티 콘솔창에 로그와 함께 에러 메시지를 표시한다. - Debug.LogWarning() Debug.LogWarning() 메소드는 괄호 () 안에 로그 메시지를 넣어주면, 유니티 콘솔창에 로그와 함께 경고 메시지를 표시한다. 출처 : https://m.blog.naver.com/PostView.naver?blogId=nuberus&logNo=50..

    [Unity] 스크립트 파일

    스크립트 파일은 C#으로만 되어있고 C++하고는 다르게 .cs 파일들로만 구성 되어있다. 생성 방법은 총 두 가지가 있다. Assets 메뉴 > Create > C# Script 적당한 곳 우클릭 > Create > C# Script 게임 오브젝트에서 Add Component 클릭 후 스크립트 명칭 적으면 된다 생성하면 아래와 같이 생성 된다. 게임 오브젝트에 적당히 드래그해서 호출하면 된다.

    [Unity] 메인&UI 카메라 2개 동시에 설정

    카메라를 설정하기 위해선 UI 카메라가 메인 카메라보다 앞으로 와야한다. 3D로 카메라 전환 후 비교. 캔버스를 카메라 모드로 전환한 후 UI 카메라를 붙여야한다. 하지만, 문제점이 발생 할 수가 있다 예로 들어서 메인 카메라에서 오브젝트를 렌더링 할 시 UI와 같이 표현하고자 할텐데 UI 카메라가 비추는 깊이와 사물 (오브젝트) 를 제한둬야한다, UI 카메라를 오직 UI만 그리고 깊이 0으로 설정하고 메인 카메라를 -1로 설정한다. (수가 작을 수록 뒤로 감)