게임엔진/Unity

    [Unity] 이미지 피벗 기준 클릭 위치 구하기 0.0 ~ 1.0

    // Take an image and a screenPosition. Return the ptLocationRelativeToImage01 relative to the image (where x,y between 0.0 and 1.0 are on the image, values below 0.0 or above 1.0 are outside the image).public static bool GetPositionOnImage01 ( UnityEngine.UI.Image uiImageObject, Vector2 screenPosition, out Vector2 ptLocationRelativeToImage01 ){ ptLocationRelativeToImage01 = new Vector2(); RectTr..

    [Unity] PointEventData 클래스

    Unity의 PointEventData 클래스는 터치 또는 마우스 입력 이벤트에 대한 정보를 저장하는 클래스다.이 클래스는 InputModule 클래스에 의해 사용되며, InputModule 클래스를 통해 터치 또는 마우스 입력 이벤트에 대한 정보를 얻을 수 있다.  속성position: 터치 또는 마우스 포인터의 위치clickCount: 클릭 횟수clickTime: 클릭 시간delta: 터치 또는 마우스 포인터의 이동량dragging: 터치 또는 마우스 포인터가 이동 중인지 여부button: 터치 또는 마우스 버튼phase: 터치 또는 마우스 이벤트의 단계pointerId: 터치 또는 마우스 포인터의 ID 클래스의 메서드GetPosition: 터치 또는 마우스 포인터의 위치를 가져오는 메서드GetCli..

    [Unity] 게임 엔진에서 컴포넌트 찾기 FindObjectsByType VS FindObjectsOfType

    차이점요구하는 인자가 딱히 없는 FindObjectsOfType() 을 편하게 사용하는 경우가 상대적으로 더 많다고 하는데, 두 함수 사이에는 큰 성능상의 차이가 있다. 간단히 말하면, FindObjectsOfType() 함수는 내부적으로 찾은 컴포넌트들을 InstanceID 기준으로 정렬을 수행한 뒤 그 결과를 반환하게 된다. InstanceID 기준으로 정렬이 불필요한 경우라면 불필요한 연산이 내부에서 수행되는 꼴이고 보통은 이런 InstanceID 정렬은 불필요하다.즉, FindObjectsByType 함수를 사용하되, 명확하게 FindObjectsSortMode.None 인자를 넘겨서 InstanceID 정렬을 수행하지 않고 얻어오는 것이 더 좋다. 유니티 게임 엔진에서 컴포넌트 찾기 FindOb..

    [Unity] 카메라 스테이킹 (Camera Staking)

    개념카메라 스테이킹이라는 기술은 단일 카메라가 아닌 여러 카메라를 사용해서 렌더링 이미지를 만들고 해당 렌더링 이미지를 순차적으로 겹쳐서 표현하는 방식이다. Unity 카메라 컴포넌트는 렌더링에 필요한 것보다 많이 사용하지 않도록 해야하는데. 예를 들어, 여러 카메라를 사용하여 UI 레이어를 구성하게되면 모든 카메라 컴포넌트는 실제로 유용하게 사용되지 않더라도 오버헤드를 유발한다. 고사양 타겟 플랫폼에서는 무시할 수 있는 수준이지만, 저사양 또는 모바일 플랫폼에서는 각각 최대1ms의 CPU 처리 시간이 소요될 수 있다.렌더링 순서1. 레이어 컬링 (레이어 제외02. 절두체 컬링 (카메라 외부 프로젝트 제외)3. 오클루전 컬링 (완전히 숨겨진 오브젝트 제외)카메라 개수에 따른 성능 확인 (Built in)..

    [Unity] Localization 간단 사용법

    About Localization | Localization | 1.1.1  About Localization | Localization | 1.1.1About Localization Use the Localization package to configure localization settings for your application. Add support for multiple languages and regional variants, including: String localization: Set different strings to display based on locale. Use the Smadocs.unity3d.comPackage 설치하기 [Window > Package Manager]를 선..

    [Unity] UI - Localization (언어 번역) 레거시

    인덱서를 사용해서 테이블에서 해당되는 언어로 string을 가져옴using System;using System.Collections;using System.Collections.Generic;using UnityEngine;public class Csv_loader_manager : Singleton_local{ // ------- Variables ------- List> m_csv_list = new List>(); string m_current_language = "english"; // Accessing to m_csv_list by value public object this[int _hash] { ..

    [Unity] 모바일 해상도 대응

    해상도 (resolution)이미지/영상 등을 표현하는 데 몇 개의 픽셀(pixel)로 이루어졌는지를 폭넓게 나타내는 말해상도와 관련된 내용은 유니티 툴의 Game 창에서 추가하거나 설정할 수 있다.캔버스모든 UI 요소는 Canvas 안에 위치해야 한다. 캔버스는 Canvas 컴포넌트가 있는 게임 오브젝트이며 모든 UI 요소는 반드시 어떤 캔버스의 자식이여야 한다.UI 요소 생성, 예를 들어 GameObject > UI > Image 메뉴를 사용하여 이미지를 생성하면 (씬에 아직 캔버스가 없을 경우)자동으로 캔버스를 생성한다. 이 때 이 UI 요소는 이 캔버스의 자식으로서 생성된다.캔버스 영역은 씬 뷰에서 사각형으로 나타나므로 매번 게임 뷰가 보이게 하지 않고도 UI 요소를 배치하기 용이하다. Canva..

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

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

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