정리/UNITY 10

유니티 게임 내 Scripts 최적화 (Unity Article)

Move code out of loops when possible 중복된 루프사용은 자제하라. void Update() { for(int i = 0; i < myArray.Length; i++) { if(exampleBool) { ExampleFunction(myArray[i]); } } } With a simple change, the code iterates through the loop only if the condition is met. void Update() { if(exampleBool) { for(int i = 0; i < myArray.Length; i++) { ExampleFunction(myArray[i]); } } } Only run code when things change 실행 ..

정리/UNITY 2022.04.28

Unity 성능 향상을 위한 권장사항 (Microsoft)

CPU 성능 추천 사항 캐시 참조 GetComponent() 및 Camera.main과 같은 반복적인 함수 호출이 포인터를 저장하는 메모리 비용에 비해 더 비싸기 때문에 초기화 시 모든 관련 구성 요소 및 GameObjects에 대한 참조를 캐싱하는 것이 좋습니다. . Camera.main은 아래의 FindGameObjectsWithTag() 만 사용합니다. 이는 "MainCamera" 태그를 사용하여 장면 그래프에서 카메라 개체를 검색하지만 많은 비용이 들어갑니다. using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { private Camera cam; private CustomComponent c..

정리/UNITY 2022.04.28

Menu_UI 기능 구현

위의 기능을 구현해보자. 메뉴 인터페이스 만들기 기능 구현 EducationPage에서 메뉴 버튼을 연동시킨다. 각 챕터 버튼 클릭 시, 생략 및 확장 기능 기능 구성도 메뉴를 관리해주는 Script 생략 및 확장 기능을 구현할 Script 생략 및 확장 기능 Script 요약 : 각 챕터 하위단의 버튼들은 상위 챕터의 위치를 저장하며, 챕터는 메뉴를 저장받아 서로 간 연결을 통해 메뉴 버튼을 생성한다. 챕터_ 스크립트 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Chapter_Btn: MonoBehaviour { int pre; // 자신의 상위..

정리/UNITY 2022.04.25

IL2CPP

유니티는 C#으로 개발하기 때문에 느리다? -> C#은 개발의 효율성을 위해 유저 코드가 C#으로 이루어 지지만, Unity 엔진은 C++로 구성되어 있어 실제로는 빠르게 개발할 수 있다. 이러한 구조를 알기 위해선 C#과 C++의 차이점을 알아야 한다. - 동적할당 C++은 new를 선언하게 되면 항상 delete를 통해 동적할당을 끝맺어야 한다. 그렇지 않으면 메모리는 계속적으로 new에 대한 값을 갖게 되며 결과적으로 메모리에 대한 과부하가 일어나게 되기 때문이다. 하지만 C#은 GC (Garbage Collection)이라는 기능이 알아서 처리해주기 때문에 좀 더 편하게 작업을 진행 할 수 있다. --> 이러한 점으로 미루어 보아, C#은 동적할당 해제 필요성이 없기 때문에 코드 작성에 있어 C+..

정리/UNITY 2022.03.19

효율적 UI_Component 바인딩

UI 필요성 흔히 우리는 Inspector에 오브젝트를 끌어와 사용한다. 하지만 프로젝트가 점점 커지고, UI 요소가 많아지면 Inspector 복잡해지며, 알아보기 힘든 경우가 많다. 또한, Inspector의 정보값이 달라진다면, 값이 누락되어 예기치 않은 터짐이 발생한다. 이러한 문제점을 해결하고, 접근성을 높이기 위해 UI의 Utility를 높일 필요성을 느꼈다. UI_Base UI_Base는 UI 컨트롤에 베이스역할을 해준다. Dictionary를 통해 Enum 타입에 따라 유니티 오브젝트를 저장하고 필요할 때, 연결시켜주는 기능을 수행한다. using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.U..

정리/UNITY 2022.03.08

Unity Shader (셰이더)

셰이더 셰이더란 무엇인가? 화면에 색을 칠한는 프로그램. 랜더링 파이프라인의 일부를 유연하게 변경하는 프로그램. 이처럼 셰이더도 여러 역할을 가진 셰이더가 있으며, 이 역할들을 최적화 및 변경하여 원하는 렌더링 효과를 낼 수 있다. - 버텍스 셰이더 : 그려질 위치를 결정. ex ) 실제로 보는 사과를 캔버스에 옮겨 스케치하는 작업. -> 3차원의 랜더링 대상을 2차원 모니터에 옮겨지는 작업. - 프래그먼트 셰이더 : 칠할 색을 결정. ex) 실제 보는 사과에 색을 칠하는 작업 -> 3차원의 랜더링 대상을 모두 색칠 작업을 진행한 후, 2차원에 깊이에 따라 색을 결정하는 작업 -컴퓨트 셰이더 : 범용적인 문제에 GPU를 사용한다. 색은 싱글 쓰레드로 처리하는 작업이 아닌, CPU에서 연산을 마친뒤 Tas..

정리/UNITY 2022.03.08

Line Rederer (라인 렌더러)

라인 렌더러 라인 렌더러란? 라인 렌더러란 두 Transform을 연결하여 라인을 생성하는 유니티에서 제공하는 기능이다. using UnityEngine; public class Line_Rederer : MonoBehaviour { LineRenderer lr; private void Awake() { lr = GetComponent(); } public void SetUpLine(Transform[] points, Edge_Color color) { lr.positionCount = points.Length; //시작점 0번 //다음 도착점 1번의 포인트 위치값을 받아 선을 그어준다. for (int i = 0; i < points.Length; i++) { lr.material = Game.Inst..

정리/UNITY 2022.02.09

효과적인 에셋 관리를 위한 [Addressable Assets System]

Addressable Assets System 1. 필요성 UNITY는 흔히 Resources 폴더를 사용하거나, 이를 보완하기 위해 에셋 번들을 많이 사용하였다. 하지만 2개다 한계점을 갖고 있었고 유니티에서는 이 2개의 장점을 합쳐 Addressable Assets System을 만들고 소개하였다. Resources의 단점 Asset Bundle의 단점 리소스 폴더의 접근에 직관적이다는 장점과 에셋번들의 장점을 합쳐 Addressable Assets System을 만들었다. 2. Addressable Assets System 란 무엇인가? - Address 에 할당된 Asset이다. Asset에 주소를 부여하여 필요시에 주소를 통해 접근하여 Asset의 필요한 부분만 갖고 올 수 있다. Address..

정리/UNITY 2022.01.21