게임엔진

[Unity] 그래픽스 퍼포먼스 최적화
1. 그래픽스 퍼포먼스 최적화 훌륭한 퍼포먼스는 많은 게임의 성공을 결정짓는 중요한 요소이다. 게임의 렌더링 속도를 최대로 끌어올리는 간단한 가이드라인을 아래에 소개한다. 1.1 높은 그래픽스 효과 찾기 게임의 그래픽 부분은 컴퓨터의 GPU와 CPU 시스템에 주로 영향을 준다. 어떤 최적화든 GPU 최적화와 CPU 최적화는 전략이 매우 다르기 때문에 첫 번째로 어디에서 퍼포먼스 문제가 발생하는지 찾아야 한다. 아예 정반대라고도 할 수 있다. 예를 들어, CPU 최적화를 위해 GPU의 작업을 늘리거나 그 반대인 경우가 흔히 발생한다. 일반적인 병목현상과 이를 체크하는 방법: GPU가 종종 필레이트 또는 메모리 대역폭의 제한을 받는다. 디스플레이 해상도를 낮춘 다음 게임을 실행한다. 낮은 디스플레이 해상도가..
[Unity] 모바일 빌드 방법 (IL2CPP, MONO)
IL2CPP 어셈블리 언어인 IL (Intermediate Language - 스택 기반 어셈블리 언어)를 C++ 소스 코드로 변환 C#이나 Unity 컴파일러가 작성한 IL를 C++ 코드로 바꿔서 apk나 exe 파일을 만들기 전에 C++로 어셈블리를 추가 할 수 있게 해주는 방법 (그래서 C코드로 변활할 수 있게 도와주는 NDK가 필요하다) 장단점 장점) 코드 크기를 줄일 수 있다. (사용하지 않는 유니티 모듈을 제거 할 수 있다) IOS 64 bit 빌드를 지원한다. 단점) 버그가 mono에 비해 많이 생긴다. 주로 리플렉션을 사용하는 JSON 라이브러리 빌드 시간이 mono보다 느리다 디버깅이 어렵다 Mono 빌드 SDK, JDK 필요 보통 많이 쓰는 방법 (빌드 속도가 빠름) 방법 유니티 Fil..

Flow Free 3 - UI
UI Manager - 모든 UI들을 관리 / 로직 포함 캔버스에 직접 스크립트 추가하여 나머지 UI들은 자동으로 연동 딱히 다른 클래스 만들어서 이를 상속 받아 팝업 형태 할 정도로 개수가 많지 않아서 단순하게 구현 using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.SceneManagement; public class UI_Manager : SingletonLocal { [SerializeField] GameObject GameUI_Prefab; public GameUI g..

Flow Free 2 - 슬롯(그리드)과 파이프(연결선)
게임 매니저가 맨 후순위로 와야한다 슬롯 생성 맵에 존재하는 모든 그리드들이 Slot.cs 기반이 될거다, 실제로는 임의의 위치에 동그라미 생성을 해야하기 때문에 2개의 이미지를 겹쳐놨다, 추가로 Slot.cs는 선 색상, 이어서 할 수 있는 동그라미 정보 등 Grid 관련 데이터를 들고 있을거다. 아래는 옵션 Slot.cs using UnityEngine; using UnityEngine.UI; public class Slot : MonoBehaviour { RectTransform rect; public Image img; // 선 관련 정보 public Color color; public Vector3 pipePos; public int idx = 0; private void Awake() { im..

Flow Free 1 - 그리드 (맵) 생성
Grid Manager.cs 프리팹 생성 후 우클릭해서 사이즈에 맞게끔 생성 void InitGrid(int size) { gridObj = Instantiate(new GameObject(), transform); var layoutGroup = gridObj.AddComponent(); gridObj.name = $" Grid {size}x{size} "; var rect = gridObj.transform as RectTransform; rect.localPosition = mPos; rect.sizeDelta = mSlotSize; layoutGroup.padding.left = mLeftPadding; layoutGroup.spacing = new Vector2(15f, 15f); layoutG..

유니티 셰이더 기본 1 - Hello World
유니티에서 셰이더는 스크립트를 만들 때와 비슷하게, 프로젝트 뷰에서 우클릭-Create-Shader 하단에서 선택하여 제작할 수 있다. 이 중, 당분간 사용할 셰이더는 Standard Surface Shader, Unlit Shader이다. 직역하면 표준 표면 셰이더와 라이팅을 사용하지 않는 셰이더다 뭘로 만들어도 관계는 없으나, 일단은 Unlit Shader로 생성해보자. 아래는 Unlit Shader의 이름을 HelloWorld로 제작한 결과 Shader "Unlit/HelloWorld" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { CGPROGR..

[Unreal] 애님 블프 Idle 애니메이션 무작위 실행
언리얼에선 Random Sequence Player 함수가 존재하며 배열 범위 안에 무작위 인덱스 값을 뽑아준다. 일단 3개를 추가해줬다 마지막으로 shuffle mode 칸이 체크가 되어있어야 한다

[Unreal] C++ error C2018 : '' 문자를 인식할 수 없습니다 오류 해결
아래와 같이 한글로 작성할 시 여러 오류가 뜨는데 이는 컴파일러가 한글을 인식못해서 발생하는 오류다 고급 저장 옵션에서 UTF-8로 변경해야 오류를 쉽게 해결할 수 있다, 만약에 파일 탭 클릭 후 보이지가 않는다면 아래 방법을 통해 설정하면 된다 UTF-8로 변경 후 빌드가 제대로 되는 모습이다

[Unreal] C++ 변환할 수 없습니다 오류 해결
SetRootComponent(GetCapsuleComponent()); UCapsuleComponent 뿐만 아니라 다른 컴포넌트들을 인식 못하기 때문에 발생하는 오류이다. 해당 컴포넌트 헤더파일을 추가해주면 된다 #include "Components/CapsuleComponent.h"
[Unity] DOTS: Jobs, Burst, ECS 간단 정리
DOTS: 데이터 지향 기술 스택 DOTS는 데이터 지향 구현을 돕는 기술들을 지칭하는 용어 데이터 지향 설계(DOD)를 통해 메모리 사용성 향상 → 성능 극적 향상 Unity의 DOTS: Job System, Burst Compiler, ECS 각각의 기술들이 독립적이기 때문에 셋을 반드시 함께 사용해야 할 필요는 없다. 즉, Jobs, Burst 없이 ECS를 사용할 수 있고, ECS 없이 Jobs, Burst를 사용할 수 있다. 그저 이 세 가지가 DOD 관점에서 궁합이 아주 좋기 때문에 다같이 사용하기를 권장하는 것이다. - Job System : 멀티스레딩 여러 작업을 Job이라는 단위로 나눠 여러 스레드에 할당해주는 시스템. 데이터 지향으로 설계되어 있는 경우에 Job을 스레드에 할당하는 작업..