게임엔진/Unity

    [Unity] 트랜스폼(Transform) 이동(Move)

    유니티 좌표계 프로그램마다 사용하는 좌표계가 다르다. 따라서 좌표계에 대해서 이해하는 것은 매우 중요하다. 유니티에서는 위치를 표현할 때 왼손 좌표계를 이용한다. X축은 빨간색, Y축은 초록색, Z축은 파란색(RGB순서)으로 표현. Transform.position Transform.position은 게임오브젝트의 절대좌표를 나타낸다. Transform.position에 Vector3를 대입하면 해당 위치로 이동. transform.position = new Vector3(x, y, z); Transform.localPosition Transform.localPosition은 게임오브젝트의 상대좌표를 나타낸다. 게임오브젝트의 부모가 있을 경우 부모로부터 떨어진 좌표를 나타낸다. 부모가 없을 경우에는 Tr..

    [Unity] 오브젝트의 활성화 상태 확인

    첫 번째의 경우 Pcube와 Cube가 모두 활성화 두 번째의 경우 Pcube는 활성화 Cube는 비활성화 세 번째의 경우 Pcube는 비활성화 Cube는 활성화 activeSelf - 스크립트를 적용한 오브젝트의 상태 activeInHierarchy - 스크립트를 적용한 오브젝트의 부모 오브젝트에 영향을 받음 //SetActive - 오브젝트 상태를 변경(bool) 오직 스크립트를 적용한 오브젝트의 상태를 확인할 경우엔 activeSelf 부모 오브젝트의 경우를 대비하여 오브젝트의 상태를 확인할 경우엔 activeInHierarchy 출처 : https://young-94.tistory.com/2

    [Unity] RectTransform 내 피벗 Top과 Bottom 설정

    rectTransform = RectTransform 변수 > GetComponent() 또는 GetComponent as RectTransform 가능 top = 상단 값 bottom = 하단값 rectTransform.offsetMin = new Vector2(rectTransform.offsetMin.x, bottom); rectTransform.offsetMax = new Vector2(rectTransform.offsetMax.x, top);

    [Unity] 셰이더 프로퍼티 값 (예,색상 변경하기)

    매터리얼 프로퍼티 값 변경하기 MeshRenderer.material.Set~ 메소드를 통해 스크립트에서 마테리얼 특정 프로퍼티의 값을 실시간으로 변경할 수 있다. 하지만 이렇게 .material에 접근하여 프로퍼티를 수정하면 이런식으로 마테리얼이 개별 인스턴스로 복제되어, 배칭이 깨지게 된다. (.material에 접근하기만 해도 바로 개별 인스턴스가 생성된다.) 이를 방지할 수 있는 것이 Material Property Block, GPU Instancing이다. Material Property Block을 이용하여 프로퍼티 값을 수정할 경우, 마테리얼의 복사본을 생성하지 않고 값을 수정할 수 있다. 그리고 GPU Instancing을 적용하면 동일 마테리얼에 대해 드로우콜을 통합하여 동적 배칭을 적..

    [Unity] GUI, GUIStyle 및 GUILayout

    일반적으로 Layout이 붙은것과 그렇지 않은 것이 있는데, 차이점은 Layout은 요소의 너비와 높이, 위치를 자동적으로 맞춰준다는 것이다. public override void OnInspectorGUI () { test = target as TestComponent; test.key = EditorGUILayout.TextField ("Key", test.key); test.value = EditorGUILayout.IntField ("Value", test.value); } ayout 에서 사용되는 필드들은 위 사진 처럼 너비와 위치를 자동으로 넣어준다. 기본적으로 너비는 전체 너비에 맞춰지며 수직적으로 정렬된다. 높이는 기본적으로 에디터상에서 사용되는 필드의 기본 단일 높이 (EditorGUIU..

    [Unity] JSON 파일 저장 및 읽기

    Global이라는 static 클래스를 사용했기 때문에 아래 함수들은 public static으로 되어있음. 이는 클래스 멤버 변수로 non-static으로 해도 무방. 저장 public static void CreateJsonFile(string createPath, string fileName, string jsonData) { FileStream fileStream = new FileStream(string.Format("{0}/{1}.json", createPath, fileName), FileMode.Create); byte[] data = Encoding.UTF8.GetBytes(jsonData); fileStream.Write(data, 0, data.Length); fileStream.Cl..

    [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 값으로 지정해야..

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

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

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