분류 전체보기

    [Unreal] enum 타입을 FString 형태로 변환

    특이사항) ANY_PACKAGE 메크로는 5.1부터 버려짐. FindObject 파라미터로 ANY_PACKAGE 대신에 UObject* 타입의 대한 포인터 또는 레퍼런스를 보내줘야 하는데 UENUM 타입이므로 nullptr이 들어갈텐데 이보단 FindFirstObjectSafe 함수로 바꿔서 해주는게 나음. GetDisplayNameText(static_cast(Enum)).ToString(); 이 함수는 파라미터가 사라진채 재정의 되었으므로 이를 단순하게 GetNameStringByIndex으로 enum 타입을 int로 강제 캐스팅해서 보내주면 된다. #pragma once #include "CoreMinimal.h" class Utility { public: template static FString..

    Visual Studio 한글 사용 시 오류 발생

    1. 오류가 발생하는 코드 Visual Studio 2017의 최신 업데이트를 받고 아래와 같이 소스에서 한글 코드를 사용하면 오류가 발생한다. 이 오류는 소스 파일의 인코딩 옵션 때문에 발생하는 것이라서 인코딩 옵션만 수정해주면 문제를 해결할 수 있다. 2. 한글 관련 오류를 수정하는 방법 소스 파일의 인코딩 옵션을 수정하려면 아래와 같이 '파일' 메뉴의 '다른 이름으로 ... 저장'을 선택하여 '다른 이름으로 파일 저장' 대화 상자를 실행시켜야 된다. '다른 이름으로 파일 저장' 대화 상자가 화면에 나타나면 '저장' 버튼 옆에 있는 화살표를 선택하여 '인코딩하여 저장'을 선택한다. '인코딩하여 저장'을 선택하면 아래와 같이 확인창이 나오는데 '예'를 눌러서 진행하면 된다. 그러면 아래와 같이 '고급 ..

    C# _ Discard (변수 무시)

    필요한 이유 별도의 변수를 선언 할 필요가 없다. 또한 discards를 사용하면 메모리 할당을 줄일 수 있다. 코드의 의도를 투명하게 만들고 가독성과 유지 관리성을 향상시키는데 도움된다. 예제 코드 switch를 사용한 패턴 매칭 class Program { static void ProvideString(string statement) => Console.WriteLine(statement switch { "x" => "hello, x world", null => "hello, null world", _ => "hello, world" }); static void Main(string[] args) { ProvideString("x"); ProvideString(null); ProvideString("..

    [Unity] 오브젝트의 활성화 상태 확인

    첫 번째의 경우 Pcube와 Cube가 모두 활성화 두 번째의 경우 Pcube는 활성화 Cube는 비활성화 세 번째의 경우 Pcube는 비활성화 Cube는 활성화 activeSelf - 스크립트를 적용한 오브젝트의 상태 activeInHierarchy - 스크립트를 적용한 오브젝트의 부모 오브젝트에 영향을 받음 //SetActive - 오브젝트 상태를 변경(bool) 오직 스크립트를 적용한 오브젝트의 상태를 확인할 경우엔 activeSelf 부모 오브젝트의 경우를 대비하여 오브젝트의 상태를 확인할 경우엔 activeInHierarchy 출처 : https://young-94.tistory.com/2

    [Unity] RectTransform 내 피벗 Top과 Bottom 설정

    rectTransform = RectTransform 변수 > GetComponent() 또는 GetComponent as RectTransform 가능 top = 상단 값 bottom = 하단값 rectTransform.offsetMin = new Vector2(rectTransform.offsetMin.x, bottom); rectTransform.offsetMax = new Vector2(rectTransform.offsetMax.x, top);

    드로우 콜과 배칭 개념 간단 정리

    1. CPU와 GPU의 상호작용 CPU에서 GPU에 명령하기 일반적으로 CPU에서 렌더링, 상태 변경 등의 명령을 GPU에 전달한다. 그런데 GPU가 바쁘게 작업하는 도중이라면, CPU는 GPU의 작업이 끝나기를 하염없이 기다리게 될 수 있다. 따라서 커맨드 패턴(Command Pattern)과 메시지 큐(Message Queue)에 의한 비동기 방식을 활용한다. CPU에서 GPU에 전달할 명령(Command)을 임시 공간에 담아 두고, GPU가 여유 될 때 명령을 하나씩 꺼내어 처리한다. Command Buffer(커맨드 버퍼) CPU의 각 스레드에서는 GPU에 전달할 렌더링 관련 명령을 모듈화하여 커맨드 버퍼에 차곡차곡 쌓아 임시로 저장한다. 그리고 GPU의 공유 커맨드 큐에 전송한 뒤, GPU를 기..

    C# 오버플로우(Overflow), 언더플로우(Underflow)

    오버플로우 변수는 데이터를 담는 그릇과 같다. 그릇에 용량을 넘어사는 양의 물을 담으면 넘치는 것처럼, 변수에도 데이터 형식의 크기를 넘어서는 값을 담으면 넘쳐 흐른다. 이런 현상을 "오버플로우(Overflow)"라고 한다. using System; namespace FlowExam { class FlowExample { static int Main(string[] args) { byte variable = byte.MaxValue; Console.WriteLine($"{variable}"); // 오버플로우 발생 variable++; Console.WriteLine($"{variable}"); return 0; } } } /* 결과 255 0 */ byte의 최대값은 255이다. 255는 이진수로 변환..

    [Unity] 셰이더 프로퍼티 값 (예,색상 변경하기)

    매터리얼 프로퍼티 값 변경하기 MeshRenderer.material.Set~ 메소드를 통해 스크립트에서 마테리얼 특정 프로퍼티의 값을 실시간으로 변경할 수 있다. 하지만 이렇게 .material에 접근하여 프로퍼티를 수정하면 이런식으로 마테리얼이 개별 인스턴스로 복제되어, 배칭이 깨지게 된다. (.material에 접근하기만 해도 바로 개별 인스턴스가 생성된다.) 이를 방지할 수 있는 것이 Material Property Block, GPU Instancing이다. Material Property Block을 이용하여 프로퍼티 값을 수정할 경우, 마테리얼의 복사본을 생성하지 않고 값을 수정할 수 있다. 그리고 GPU Instancing을 적용하면 동일 마테리얼에 대해 드로우콜을 통합하여 동적 배칭을 적..

    [Unreal] 캐릭터가 바라보는 방향으로 회전 및 이동하기

    아래와 같이 바인딩해준다 / Edit > Project Settings > Input 아래 옵션은 메쉬가 컨트롤러 회전값에 따라 회전하지 않도록 설정함으로 끄는게 중요하다 bUseControllerRotationYaw = bUseControllerRotationPitch = bUseControllerRotationRoll = false; // 아래는 이동을 담당하는 컴포넌트 조작 방법 auto characterMovement = GetCharacterMovement(); characterMovement->bOrientRotationToMovement = true; // 바라보는 방향으로 회전하고자 하는 속도 characterMovement->RotationRate = FRotator(0.f, 400.f,..

    [Unity] GUI, GUIStyle 및 GUILayout

    일반적으로 Layout이 붙은것과 그렇지 않은 것이 있는데, 차이점은 Layout은 요소의 너비와 높이, 위치를 자동적으로 맞춰준다는 것이다. public override void OnInspectorGUI () { test = target as TestComponent; test.key = EditorGUILayout.TextField ("Key", test.key); test.value = EditorGUILayout.IntField ("Value", test.value); } ayout 에서 사용되는 필드들은 위 사진 처럼 너비와 위치를 자동으로 넣어준다. 기본적으로 너비는 전체 너비에 맞춰지며 수직적으로 정렬된다. 높이는 기본적으로 에디터상에서 사용되는 필드의 기본 단일 높이 (EditorGUIU..