게임엔진

    [Unreal] UENUM 명칭 주기 (애님 블루프린트)

    다음은 애니메이션에서 사용하는 열거형이다 UMETA(DisplayName = "명칭") 을 옆에다 추가해준다 (바이너리 형태로 동작하는 메커니즘) #pragma once #include "CoreMinimal.h" UENUM(BlueprintType) enum class ECharacterState : uint8 { IDLE UMETA(DisplayName = "제자리"), WALK UMETA(DisplayName = "걷기"), RUN UMETA(DisplayName = "뛰기"), JUMP UMETA(DisplayName = "점프"), MAX }; 아래와 같이 한글이 깨져있다면 h 파일을 UTF-8로 저장하자 결과

    [Unity] 강체 관련 Rigidbody / AddForce / AddTorque

    Rigidbody Rigidbody(강체)는 gameObject가 유니티 물리 엔진에 제어 받게 한다. 한마디로 힘과 질량을 갖고 움직일 수 있도록 하는 것이다. Mass : 오브젝트의 질량 Drag : 오브젝트가 받는 공기 저항 값 Angular Drag : 오브젝트가 토크로 회전 시 받는 공기 저항 값 Use Gravity : 중력의 영향 유무 Is Kinematic : 활성화 시 물리엔진의 제어없이 Transform으로만 조작됨 Interpolate : 오브젝트의 움직임 부드러움 옵션 처리 Collision Dectection : 오브젝트 충돌 감지 / 감지 옵션 처리 Constraints : 오브젝트의 움직임 고정 위는 대표적인 rigidbody의 프로퍼티이다. Unity Documentation..

    [Unity] 트랜스폼(Transform) 이동(Move)

    유니티 좌표계 프로그램마다 사용하는 좌표계가 다르다. 따라서 좌표계에 대해서 이해하는 것은 매우 중요하다. 유니티에서는 위치를 표현할 때 왼손 좌표계를 이용한다. X축은 빨간색, Y축은 초록색, Z축은 파란색(RGB순서)으로 표현. Transform.position Transform.position은 게임오브젝트의 절대좌표를 나타낸다. Transform.position에 Vector3를 대입하면 해당 위치로 이동. transform.position = new Vector3(x, y, z); Transform.localPosition Transform.localPosition은 게임오브젝트의 상대좌표를 나타낸다. 게임오브젝트의 부모가 있을 경우 부모로부터 떨어진 좌표를 나타낸다. 부모가 없을 경우에는 Tr..

    [Unreal] Idle 애니메이션 무작위로 실행

    애님인스턴스 h // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "Animation/AnimInstance.h" #include "AnimEnum.h" #include "CharacterAnimInst.generated.h" /** * */ UCLASS() class SLASHOPENWORLD_API UCharacterAnimInst : public UAnimInstance { GENERATED_BODY() private: const int MaxIdleCnt = (int)ECharacterState::IDLE_MAX; const..

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

    [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);

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