게임엔진

    [Unity] 스크립팅 백엔드 (Scripting Backend)

    스크립팅 백엔드란?C# 스크립트나 스크립트 언어로 작성된 코드를 실행 가능한 형태로 변환하는 컴파일러를 말한다.주로 Mono와 IL2CPP가 제공된다.MonoJIT 컴파일 방식을 채택한 유니티의 기본 스크립팅 백엔드이다. 일반적인 닷넷 호환 언어 컴파일 과정과 유사하다. 프로그램이 실행되는 시점에 필요한 코드를 동적으로 네이티브 코드로 번역하기 때문에 초기 실행 속도는 느리지만 반복적으로 실행되는 코드는 최적화되어 성능이 향상된다. 에디터에서 플레이 모드로 실행할 때 기본적으로 사용된다.IL2CPPAOT 컴파일 방식을 채택한 유니티의 스크립팅 백엔드이다. 실행 이전에 네이티브 코드로 컴파일하기 때문에 초기 실행 속도가 빠르고 메모리 사용량이 최적화되며, 또한 코드의 보안이 강화된다. (네이티브 언어이기 ..

    [Outdated] 농장 시뮬레이터 개인작

    요즘 핫하다는 농장게임 보면서 깃허브에 짱박아둔 플젝 하나가 생각났다 UI 및 게임 애니메이션을 구현하기 위해선 DoTween을 많이 사용한다아래는 DoLocalMoveX 함수로 간단하게 구현using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;using DG.Tweening;public class UI_manager : MonoBehaviour{ public static UI_manager instance; public GameObject menu_obj; //public Text money_text; bool m_is_opened = false; int m..

    플레이어 방향에 따른 발사 위치 변경

    빈 오브젝트를 총기의 끝부분에 설정 후 발사 위치를 설정, 예전에 짠 코드라 많이 지저분함 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Weapon_manager : MonoBehaviour { // 싱글톤 public static Weapon_manager instance; // 플레이어 총기 관련 public Transform player_transform; public GameObject player_gun_prefab; public GameObject weapon_creation_pos_obj; GameObject player_gun_object; GameObject player..

    [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 칸이 체크가 되어있어야 한다