본문 바로가기

반응형

- GameProgramming/- Unity 3D

★ 10. Unity 최적화 기법 Unity 3D :: 게임 최적화 기법 [최적화의 시작은 병목 파악부터] # CPU - 너무 많은 DP CALL - 복잡한 스크립트나 물리 연산 # Vertex Processing - 너무 많은 버텍스들 - 버텍스당 너무 많은 연산 (Vertex Shader) # Fragment Processing - 너무 많은 픽셀, 오버 드로우 (Over Draw) - 프래그먼트당 너무 많은 연산 (Fragment Shader / Pixel Shader) # Band Width - 크고, 압축되지 않은 텍스쳐 - 고해상도 프레임 버퍼 [스크립트 최적화] # 유니티의 핵심 기능은 모두 C++로 제작되어 있다. # 예) Transform.position 에서 Transform은 C# 속성, Position은 C++ 영역.. 더보기
★ 9. Unity Editor 확장 입문 - [3] 데이터의 보존 [3] 데이터의 보존 에디터 확장에서 기능을 넣을 때, 수치를 보존해서 다음에도 사용하고 싶을 때가 있을겁니다. 그 수치는 에디터 확장 설정에 관한 파라미터일 수도 있고 게임에 관련된 파라미터일 수도 있고 다양합니다. 유니티에서는 데이터를 보존하는 수단이 다양합니다. 크게 3개의 패턴으로 나눠볼 수 있는데 그것에 대해서 알아보겠습니다. 3.1 EditorPrefs PC 내에서 공유할 수 있는 데이터 보존 방법입니다. 프로젝트에 관계 없이 유니티 에디터를 통해 수치를 공유합니다. [영향을 미치는 범위] 저장한 수치는 메이저 버전(4.x, 5.x)이 같다면 공유가 가능합니다. [무엇을 저장하는가?] 윈도우의 위치, 사이즈, 유니티 에디터의 환경설정(Preferences에 있는 설정) 수치들을 저장합니다. 독.. 더보기
★ 8. Unity Editor 확장 입문 - [2] 표준에서 사용할 수 있는 에디터 확장 기능 [2] 표준에서 사용할 수 있는 에디터 확장 기능 2.1 인스펙터 창의 외관 변경 (1) Range [ 좌측 : Range 사용 X, 우측 : Range 사용 O ] 1234567891011121314151617using UnityEngine;using System.Collections; public class NewBehaviourScript : MonoBehaviour{ [Range(1, 10)] public int num1; [Range(1, 10)] public float num2; [Range(1, 10)] public long num3; [Range(1, 10)] public double num4;}Colored by Color Scriptercs (2) Multiline / TextArea .. 더보기
★ 7. Unity Editor 확장 입문 - [1] 에디터 확장에 사용하는 폴더 [1] 에디터 확장에 사용하는 폴더 1.1 Editor 폴더 Editor 폴더는 에디터 API를 사용하기 위한 특별한 폴더입니다.보통 에디터 API는 런타임으로 동작하지 않습니다. 아래의 코드를 Assets 폴더 바로 아래에 작성해서 빌드해보면 빌드가 실패되었다고 나오게 됩니다.쉽게 말하자면 아무 폴더에도 들어가 있지 않은 상태에 하단의 스크립트를 생성하고 Unity 엔진 Build Settings 창의 Build 실행시 123456using UnityEngine;using UnityEditor; public class NewBehaviourScript : MonoBehaviour{}Colored by Color Scriptercs 개발 중의 유니티 상에서 생성되는 Assembly-CSharp.dll 에.. 더보기
★ 6. 아틀라스 (Atlas) 아틀라스 (Atlas) 텍스쳐(Texture)들을 모아 놓은 커다란 텍스쳐.게임에서는 수많은 텍스쳐를 사용하는데, 이 많은 텍스쳐들을 개별적으로 사용하는 것은성능적으로나 관리적으로나 효율적이지 못합니다.따라서 텍스쳐들을 모아서 하나의 아틀라스로 만들어 사용하기도 합니다.이렇게 아틀라스를 사용하면 아틀라스에 대한 하나의 머터리얼만을 사용할 수 있어드로우 콜(Draw call)을 줄이고, 이는 성능 향상에 큰 도움이 됩니다. 더보기
★ 5. 드로우 콜 (Draw Call) 드로우 콜 (Draw Call) 드로우 콜 (Draw Call)은 Unity 5.x 이후부터 game - state - Batches로 확인이 가능합니다. - 드로우 콜이란? CPU에서 그래픽 API 호출을 통해 GPU에 렌더링을 명령하는 것 유니티가 기본적으로 3D 게임 엔진이기 때문에 씬에 있는 버텍스들을 그리기 위해GPU에 보내는 요청이다. 이런 버텍스들은 데이터를 가지고 있는데 위치, 노멀, UV데이터, 재질 등을 가지고변형과 이동에 대한 계산을 위해 버텍스 버퍼에 추가된다.버텍스 버퍼가 추가되면 그 안에 데이터가 담겨 있게 되고 화면에 그려야 될 때 그 데이터들을 처리하기 위해복사 과정을 거치는데 만약 이런 데이터의 종류가 많아질 수록 드로우 콜이 많아진다고 생각하면 된다. - 드로우 콜을 줄이.. 더보기
★ 4. 유니티 기초 정리 유니티 기초 정리 Time.deltaTime 한 프레임간의 경과 시간을 초 단위로 알려줌. this.transform 해당 컴포넌트가 붙은 게임 오브젝트의 Transform 컴포넌트를 참조 this.transform.position Transform의 월드 위치를 Vector3 형으로 접근하는 프로퍼티 (Get Set 가능) this.transform.localPosition Transform 계층 구조에 의한 다른 Transform의 자식으로 존재할 때 부모의 상대적인 LocalPosition값을 Vector3로 접근하는 프로퍼티 (부모가 없으면 Position) this.transform.forward 자신의 Transform 월드 정면 벡터를 참조함 (대입할 경우 대입되는 벡터로 프론트 방향이 바뀜.. 더보기
★ 3. Rigidbody 속성 [Mass] 오브젝트와의 충돌을 처리하는 방식에 영향을 줍니다.Mass가 높은 오브젝트는 Mass가 낮은 오브젝트보다충돌 했을 때 덜 반응합니다. [Drag] 다른 상호 작업 없이 얼마나 빨리 느려지는가에 영향을 줍니다.공기 저항과 비슷하다고 보시면 됩니다.그리고 직선 속도의 손실률을 결정하는 데 사용됩니다. [Angular Drag] 오브젝트의 각 속도를 느리게 하는 데 영향을 줍니다.얼마나 빨리 회전하는 지를 예로 들수 있겠습니다. [Use Gravity] 오브젝트가 중력의 영향을 받는지 여부를 결정합니다. [Is Kinematic] rigidbody가 물리력에 반응할 지 여부를 결정합니다. [Interpolate] 떨림 현상 해결을 하기 위해 사용합니다.rigidbody를 통해 오브젝트가 이동 할 .. 더보기
★ 2. 키 입력을 활용한 머터리얼 변환 void Update() { if (Input.GetKeyDown(KeyCode.R)) { GetComponent ().material.color = Color.red; } if (Input.GetKeyDown(KeyCode.G)) { GetComponent().material.color = Color.green; } if (Input.GetKeyDown(KeyCode.B)) { GetComponent().material.color = Color.blue; } } 이 업데이트 함수에서는Input.GetKeyDown을 활용하여키 입력을 받아 해당하는 키에 맞는 머터리얼을스크립트를 사용하고 있는 곳에 적용시키는 소스입니다. 즉,'R' 키를 누르면 빨간 색 머터리얼로 변환되고,'G' 키를 누르면 연두 색 머터.. 더보기

반응형