게임엔진

    [Unity] 이동, 회전, 크기변경 정리

    Unity에서 GameObject의 이동, 회전, 크기변경을 하기 위한 방법에 대해 알아보자. 이동 가장 간단한 방법으로 GameObject의 위치를 직접 지정해 줄 수 있다. transform.position = new Vector3(x, y, z); 현재 위치를 기준으로 x축으로 움직이고 싶을 때 쓸 수 있다. transform.Translate(speed, 0, 0); target 오브젝트에게 일정하게 이동하고 싶다면 위와같이 MoveToward를 쓰면 된다. transform.position = Vector3.MoveTowards(transform.position, target.position, speed); 회전 회전또한 간단하게 회전값을 지정해 줄 수 있다. Quaternion 값으로 지정해야..

    [Unreal] Could not find NetFxSDK install dir; 오류 해결

    ERROR: Could not find NetFxSDK install dir; this will prevent SwarmInterface from installing. Install a version of .NET Framework SDK at 4.6.0 or higher. .NET Framework SDK 4.6.0 이상을 설치하라고 해서 마이크로소프트 홈페이지를 가서 설치했는데도 같은 에러가 발생했다. 그래서 Visual Studio Installer 로 들어가서 수정을 누르고 .NET 데스크톱 개발을 설치 해주니 에러가 해결 되었다. 출처 : 언리얼 엔진4 프로젝트 생성 에러 해결 (tistory.com)

    [Unity] 어드레서블 에셋(Addressable Asset)의 모든것

    리소스 폴더 사용장점은 사용하기에 편리하지만, 리소스폴더에 메모리는 최대한 줄이도록 한다. 시작 시 최소한의 에셋만 남겨두어야겠지만 경계해야 한다. 단점)1. apk사이즈가 커진다.2. 앱 시작 시간이 길어진다.3. 앱이나 폴더 변경 시 재 빌드를 해야 한다. (apk빌드에 묶이기 때문에 에셋 변경 시 무조건 재 빌드해야 한다.)4. 에셋 이름 변경이 힘들다. (에셋을 로드할 때 경로를 바꿔줘야 하기 때문)이런 문제점들을 보완할 수 있는 에셋 번들이 있다.에셋 번들장점은 에셋을 묶음 단위로 관리할 수 있다. 빌드 사이즈 절감과, 앱 시작 시간을 단축시킨다.단점으로는1. 번들의 종속성 문제.같은 이미지를 Asset A와 Asset B에 묶여있다면 같은 이미지 1개로 처리될 것 같지만 2개의 이미지로 인식된..

    [Unreal] 오브젝트 테두리 선 메터리얼로 구현

    메터리얼 설정에서 도메인을 Post Process로 설정한다 아래와 같이 구현한다, Param 1개는 ctrl + s 조합키로 생성이 가능하다 그 다음 볼륨을 설정 해야한다 Volumes > PostProcessVolume 볼륨 안에서 Post Process Materials 항목을 찾은 후 배열에서 항목 추가하면 처음엔 Choose로 되어있을텐데 클릭 후 Asset Reference를 클릭한 후 위에 만든 메터리얼을 연결 시켜준다 맨 밑에 Infinite Extent라고 되어있을 텐데 체크 해제되어 있으면 오브젝트가 띄워주는 큐브 영역에서만, 되어있다면 해당 레벨 공간 전부 다 적용된다 오브젝트 렌더링에서 Render CustomDepth Pass가 체크 되어있어야 한다 플레이어가 해당 영역에 들어서야..

    [Unity] Job 시스템 정의

    단일 작업 인터페이스 IJob Job 시스템이 사용하는 자료구조 NativeContainer Job 대기 핸들 (Handle) 동시에 여러개의 작업 IJobParallelFor 원리 멀티 스레딩 방식의 프로그래밍 기법이지만, 스레드를 별도로 생성하지 않는다. 유니티 내부에는 우리가 익숙하게 작업을 진행하는 메인 스레드와, CPU 코어 개수에 맞춰 월드의 변경사항을 적용하여 렌더링 할 준비를 해주는 작업자 스레드, 렌더링 과정을 처리하는 렌더 스레드가 존재한다. 이 중, 작업자 스레드에 작업을 지시할 수 있게끔 해준다. 장점과 단점 장점 빠르다. 메모리 절약된다. 유니티에서 제공하는 각종 스레드 안전장치를 사용할 수 있다. 유니티의 로직에 맞춰 돌아가므로 비교적 안정적인 프레임을 기대할 수 있다. 유니티가..

    [Unity] Job 시스템 이해 4, IJobParallelFor

    ▶ IJob이 단일 작업자 스레드에서 Execute()가 한번 처리되었다면, IJobParallerFor는 사용 가능한 모든 작업자 스레드에서 Execute()가 실행 횟수 만큼 나뉘어서 실행된다. ▶ IJobParallelFor는 Execute()의 로직은 동일하지만 특정 Index의 매개 변수가 다를 때 사용하면 유용하다. 같은 로직을 여러번 수행할 때 묶음으로 처리함으로써 성능 향상의 도움이 된다. [JobProducerType( typeof( IJobParallelForExtensions.ParallelForJobStruct ) )] public interface IJobParallelFor { // // 요약: // Implement this method to perform work agains..

    [Unity] Job 시스템 이해 3, JobHandle

    ▶ JobHandle은 Job의 Schedule을 실행했을 때 반환되는 값으로, Job을 컨트롤 할 수 있는 기능을 가진다. ▶ Job은 독립적으로 실행될 수도 있지만, 특정한 Job의 경우 선행 Job의 실행이 끝난 뒤에 해당 결과를 바탕으로 자신의 Job을 실행 시켜야하는 경우가 있을 수 있다. 이때 JobHandle을 사용하여 Job의 종속성을 설정할 수 있다. using UnityEngine; using Unity.Jobs; using Unity.Collections; public class JobSample : MonoBehaviour { struct JobSigle : IJob { public int a; public int b; public NativeArray result; public v..

    [Unity] SQL 데이터 베이스 연동 SQLite

    1. Sqlite dll 다운로드 (1) 다운로드 사이트 : https://www.sqlite.org/download.html (2) Precompiled Binaries for Windows > sqlite-dll-win64-x64-xxxxxxx.zip 파일 다운로드 (3) Project(프로젝트) Assets 폴더 밑에 Plugins를 만든 뒤, sqlite3.def, sqlite3.dll 파일을 넣는다. 3. Mono.Data.xxx.dll 파일 복사. C:\Program Files\Unity\Hub\Editor\2019.x.xxf1\Editor\Data\Mono\lib\mono\2.0에서 Mono.Data.dll, Mono.Data.Sqlite.dll, Mono.Data.SqliteClient.d..

    [Unity] 에디터에서만 사용할 수 있는 커스텀 코루틴

    모든 코루틴은 이로부터 접근을 해서 호출한다. 예) EditorCoroutines.EditorCoroutines.StartCoroutine(코루틴 명칭, this); EditorCoroutines.EditorCoroutines.StopCoroutine(코루틴 명칭, this); using EditorCoroutine = EditorCoroutines.EditorCoroutines; 맨 위에 추가시 아래와 같이 생략 가능 EditorCoroutine.StartCoroutine(코루틴 명칭, this); EditorCoroutine.StopCoroutine(코루틴 명칭, this); using UnityEngine; using System.Collections; using UnityEditor; using ..

    [Unity] Range 어트리뷰트를 단위로 설정할 수 있는 방법

    아래는 어트리뷰트를 그려줄 클래스 using UnityEngine; using UnityEditor; using System; [CustomPropertyDrawer(typeof(RangeExAttribute))] internal sealed class RangeExDrawer : PropertyDrawer { private int value; /** * Return exact precision of reel decimal * ex : * 0.01 = 2 digits * 0.02001 = 5 digits * 0.02000 = 2 digits */ private int Precision(float value) { int _precision; if (value == .0f) return 0; _precisi..