[UE5] FName, FText, FString
·
게임개발/Unreal Engine
언리얼에서 개발을 하다 보면 헷갈리는 문자열 타입 3가지가 있다.FName, FText, FString셋 다 문자열을 처리하는데 어디에, 어떤 식으로 사용되는 것일까? 1. FName콘텐츠 브라우저에서 새 에셋 이름을 지을 때, 다이내믹 머티리얼 인스턴스의 파라미터를 변경할 때, 스켈레탈 메시에서 본에 접근할 때, 모두 FName을 사용합니다. FName 은 문자열 사용에 있어서 초경량 시스템을 제공하는데, 주어진 문자열이 재사용된다 해도 데이터 테이블에 한 번만 저장되는 것입니다. FName 은 대소문자를 구분하지 않습니다. 변경도 불가능하여, 조작할 수 없습니다. 이처럼 FName의 정적인 속성과 저장 시스템 덕에 찾기나 키로 FName에 접근하는 속도가 빠릅니다. FName 서브시스템의 또 다른 특..
[Unity] 변수 이름을 바꿔도 인스펙터 값을 유지하는 법(FormerlySerializedAs)
·
게임개발/Unity
유니티 개발에서는 public / [SerializedField]인 변수들을 인스펙터에 노출시킨 후, 값을 직접 할당하여 사용한다. 이렇게 만들어놓은 변수를 잘 사용하다가, 모종의 이유로 변수명을 바꿔야하는 경우가 있다.변수의 오타를 발견했거나, 리팩토링으로 다른 변수명을 사용하거나, 컨벤션에 맞추기 위해 바꾼다거나.. 이때 단순히 변수명을 바꾸게되면 인스펙터에서 할당한 값이 없어지는 현상을 볼 수가 있다. 프리팹 a가 있고 여기에 스크립트 A.cs가 붙어있다고 해보자.스크립트 A는 다음과 같이 public Gameobject Target 변수를 가지고 있으며, 인스펙터에서 프리팹 b를 할당해주었다.using UnityEngine;public class A : MonoBehaviour{ public..
[UE5] 언리얼의 Multi-threading
·
게임개발/Unreal Engine
게임 개발을 하다보면 성능 최적화는 피할 수 없는 문제다.대부분의 작업이 메인 스레드에서 돌아갈 때, 이를 여러 쓰레드에 병렬로 부담을 분산시키면 많은 최적화를 이뤄낼 수 있다.게임 개발에서 중요한 언리얼 엔진 5의 멀티스레딩 시스템에 대해 정리해보려 한다. 1. Multi-threading이란? 멀티스레딩은 프로세스 내에서 여러 실행 흐름을 만들어 CPU 자원을 최대한 활용하는 기술이다.메인 스레드(Game Thread)의 부하를 분산해서 여러 코어에서 동시에 연산을 수행한다.물리적으로 여러 코어에서 동시에 작업을 처리할 수 있다하지만 스레드 생성과 컨텍스트 스위칭에도 비용이 든다작업 단위가 너무 작으면 오히려 단일 스레드보다 느려질 수 있다 2. 동기화 프리미티브멀티스레드 환경에서 여러 스레드가 같은..
[C++] const 정리 (+constexpr이란?)
·
언어/C,C++
C++ 코딩을 하다보면 안전성을 위해 쓰이는 코드가 있다. 값이 바뀌지 않으며 고정되는 상수로 만드는 키워드, 바로 const다 const는 보통 변수 이름 앞에 쓰여 해당 변수의 값을 바꿀 수 없게 만들어준다.const float FRAME_RATE = 60f; 단순하게 쓰면 저정도이지만, const는 함수와 포인터 등 다양한 곳에 쓰일 수 있다. 오늘은 const와 C++11부터 도입된 constexpr에 대해 자세히 알아보자. 1. 함수의 반환 타입 앞에 붙는 constconst [type] Function()가장 기본적인 형태로, 함수의 반환값(Return Value)을 상수로 만들겠다는 의미다.const int GetSomeValue() { return 10;}// 사실 기본 자료형(int..
[Unity] Debug.Log 커스터마이징
·
게임개발/Unity
유니티에서 가장 자주 쓰이는 함수가 뭘까? 개인적으로는 Debug.Log가 아닐까 생각한다.코드가 잘 돌아가는지, 값이 올바른지 등을 확인하기 위해 보통 Debug.Log로 메세지를 출력한다.Debug 종류는 Log, LogWarning, LogError 3가지로 각 상황에 따라 적절하게 사용한다. 그런데 이 Debug.Log에 내가 원하는 방식으로 수정할 수 있으면 좋지 않을까?예를 들어, Debug.Log를 호출한 클래스의 이름을 자동으로 메세지에 넣어 출력하게 해준다거나 Editor에서만 Debug.Log를 호출하도록 바꾸는 등 말이다. 1. 호출한 클래스 출력하기어떤 함수를 호출했을 때 해당 클래스의 이름을 출력하는 방법에는 여러가지가 있다.가장 간단한 방법은 호출하는 함수에서 this.Get..
[Unity] 안쓰는 함수 멋지게 표현하기 (System.Obsolete)
·
게임개발/Unity
Unity 뿐만 아니라 다른 모든 프로그래밍에서 함수나 클래스를 만들었다가 버리는 경우가 흔하다.보통 주석처리 하거나 아예 지워버리긴 하지만, 다른 사람들과 협업할 때 무작정 없애면 혼란이 생길 수가 있다.또한 이전 버전을 사용하는 사람에게 새로운 함수나 클래스로 변경하라는 메세지가 필요할 때도 있다. 이를 위해 Unity에서는 더 이상 사용하지 않는 함수나 클래스에 Obsolete 키워드를 넣어 해당 함수나 클래스가 더 이상 권장되지 않음을 표시할 수 있다. 0. System.ObsoleteObsolete 키워드는 선언 바로 윗 부분에 [System.Obsolete]를 적어 적용할 수 있다. 형태는 총 3가지가 존재한다.[System.Obsolete]: 기본 형태. 해당 메서드나 클래스가 권장되지 않음..