게임엔진

    [Unity] Serializable Dictionary - 인스펙터에 노출시킬 수 있는 딕셔너리

    using System.Collections; using System.Collections.Generic; using UnityEngine; namespace AT.SerializableDictionary { [System.Serializable] public class SerializableDictionary : Dictionary, ISerializationCallbackReceiver { [SerializeField] private List keys = new List(); [SerializeField] private List values = new List(); // save the dictionary to lists public void OnBeforeSerialize() { keys.Clear..

    [Unity] onClick.AddListener에서 함수의 파라미터 전달 문제

    1) 예에서 아래와 같이 캔버스에 버튼을 구성하였다. 2) 아래 스크립트의 for구문에서 순차적으로 버튼을 클릭했을때 호출되는 함수를 추가하고 함수에 전달하는 인수로 iteration 변수를 설정하였다. 3) 게임을 시작하고 순차적으로 버튼을 클릭하면 의도한 iteration 변수를 출력하지않는것을 확인할수있다. 4) for 구문 내에서 임시적으로 정수형 변수를 선언하고 이 변수를 인수로 전달한다. 5) 게임을 시작하고 순차적으로 버튼을 클릭하면 정상적으로 출력한다. 출처 : 유니티 onClick.AddListener에서 함수의 파라미터 전달 문제 (tistory.com)

    [Unity] 안드로이드 플러그인 사용해보기

    우선 안드로이드 프로젝트를 만든다 empty Activity 또는 No Activity로 설정한다 다음 화면이다. 여기서 주의해야 할 것은 Minimum SDK 이다. 그 이유는 유니티에서도 Minimum SDK를 설정하는데 안드로이드 Minimum과 유니티 Minimum이 일치하지 않으면 오류가 생기게 된다. 유니티 프로젝트가 성공적으로 생성되고 gradle 파일들도 성공적으로 빌드되었다면 File -> New -> New Module로 들어가 모듈을 생성 해준다. 타입은 Android Library로 선택 모듈이 생성되면 androidTest, test 파일들이 같이 있으면 중복으로 오류가 생길 수도 있으므로 지워주자. 생성된 모듈에 클래스를 생성해주자. 일단 test_String으로 생성. 아래의 ..

    [Unreal] Construction Script

    블루프린트 내의 각각의 인스턴스에 다양성을 줄 수 있는 스크립트. 게임 내 레벨을 구축하거나, 블루프린트 내의 프로퍼티를 업데이트 할 때 등등을 구현한다. 블루프린트 인스턴스 생성시 컴포넌트 리스트 다음에 실행되는 부분이다. 따라서 블루프린트 인스턴스에서 필요한 초기화 작업을 할 수 있다. 블루프린트와 관련된 가장 최신의 정보를 제공 같은 블루프린트로 만든 인스턴스라도 이 Construction Script 을 통해 인스턴스마다 개별적인 특성을 부여할 수 있다. 이 Construction Script 안에서 각각의 인스턴스마다 다르게 부여할 프로퍼티들을 public 변수로 에디터에서도 열고 에디터에서 각각의 인스턴스마다 이 변수 값들을 설정하게 한 후 이를 Setting 하는 작업을 한다. 2 개의 변수..

    [Unity] 강체(RigidBody) AddForce에 대한

    정의 Rigidbody에서 엄청 많이 쓰이는 AddForce를 알아보자 2가지 형태가 있다. public void AddForce(Vector3 force, ForceMode mode = ForceMode.Force); public void AddForce(float x, float y, float z, ForceMode mode = ForceMode.Force); 쉽게 말하면 AddForce(방향*힘 값, 힘의 종류) 라고 보면 된다. AddForce는 Rigidbody에게 힘을 전달해준다. (하지만 모든 Rigidbody가 아닌 Active 상태일 때만 전달된다.) **이러한 Force calculation은 FixedUpdate() 때 이루어진다. using UnityEngine; // 이것을 쓰지..

    [Unity] 트랜스폼을 이용해서 AI 만들기

    Look At을 이용하면 게임 오브젝트의 앞 방향이 Look At에서 지칭하는 오브젝트를 바라본다. Transform 형식의 변수를 이용하고 transform.LookAt(Transform 변수)를 이용해 변수 오브젝트의 위치를 바라보라고 명령을 내리게 된다. 다른 메쉬에 적용했을 시 출처 : https://young-94.tistory.com/13

    [Unity] 키보드와 마우스 입력받기

    1. GetAxis, GetAxisRaw InputManager에 입력된 키를 누를 때, 값을 반환한다. 이때, 반환되는 값은 -1 ~ 1사이가 반환된다. nagative button을 누르면 음수가, positive button을 누르면 양수가 반환된다. 아무것도 누르지 않는다면 0이 반환된다. 물체를 이동시키고 싶을 때 사용한다. GetAxis() -1 ~ 1까지의 실수를 반환 GetAxisRaw() 버튼을 눌렀을 때 1, -1을 반환. 그렇지 않다면 0을 반환 2. GetButton InputManager에 입력된 키를 누를 때, 참, 거짓을 반환한다. 키를 눌렀을 때는 true를 반환, 그렇지 않다면 false를 반환한다. GetButton() 키를 누르는 시간만큼 true를 반환 GetButto..

    [Unreal] 클래스 블프 및 메쉬, 텍스처 등 로딩 Finder

    ConstructorHelpers 클래스 내에 존재하는 함수 모든건 생성자 내부에서 이루어져야됨. BeginPlay 절대 x 파라미터는 TEXT형이며 쌍따옴표 안에 해당 경로가 들어가야 한다. 항상 /Game 으로 시작 클래스 로딩 FClassFinder // 클래스는 끝에 _C 접두어를 붙어줘야됨. 아래는 예시 auto BP_Actor = ConstructorHelpers::FClassFinder(TEXT("/Game/Actors/TestActor.TestActor_C")); 또는 아래와 같이 가능 ConstructorHelpers::FClassFinder BP_ACTOR(TEXT("")); 클래스는 TSubclassOf 타입임 즉 UClass, 항상 Succeed 함수로 널이 아닌지 체크 TSubcl..

    [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..