반응형

 

 

 

 

※ 로그 출력, 디버깅 포스팅은 아래 링크 확인하기

 

[언리얼] 로그 출력, 디버깅 하기

로그 출력 - 다음과 같이 작성하면 된다. (예시에서 Value는 지역변수) //카테고리, 로깅수준, 형식(인자) UE_LOG(LogTemp, Warning, TEXT("UpDown %f"), Value); 결과 디버깅 하기 - 기존에 켜둔 언리얼 에디터를

srdeveloper.tistory.com

 

 

 

 

로그를 호출한 함수 및 라인넘버 출력하는 매크로

//프로젝트 헤더에 작성하면 된다.
#define CALLINFO (FString(__FUNCTION__) + TEXT("(") + FString::FromInt(__LINE__) + TEXT(")"))
  • __FUNCTION__ : 함수명
  • __LINE__ : 라인 넘버

 

//로그를 출력할 라인에 다음과 같이 입력.
UE_LOG(LogTemp, Warning, TEXT("%s"), *CALLINFO);
  • CALLINFO를 적용하려면 해당 매크로를 가진 헤더를 포함시켜줘야한다.

 

 

결과

- 로그를 입력한 함수와 라인넘버가 Output Log창에 표시된다.

 

 

 

 

UE_LOG를 매크로로 정의하기

//헤더 파일에 입력
#define CALLINFO (FString(__FUNCTION__) + TEXT("(") + FString::FromInt(__LINE__) + TEXT(")"))
#define PRINT_CALLINFO() UE_LOG(LogTemp, Warning, TEXT("%s"), *CALLINFO)

//로그를 출력할 라인에 다음과 같이 입력
PRINT_CALLINFO();

 

 

 

 

인수를 여러개 넘겨받는 로그 매크로 정의하기

//헤더 파일에 입력
#define CALLINFO (FString(__FUNCTION__) + TEXT("(") + FString::FromInt(__LINE__) + TEXT(")"))
#define PRINT_LOG(fmt, ...) UE_LOG(LogTemp, Warning, TEXT("%s %s"), *CALLINFO, *FString::Printf(fmt, ##__VA_ARGS__))

//로그를 출력할 라인에 다음과 같이 입력
PRINT_LOG(TEXT("LogTest : %s"), TEXT("Log project"));
  • ... : 가변 인수

 

 

결과

 

 

 

 

 

카테고리 매크로 정의하기

//헤더 파일에 입력
DECLARE_LOG_CATEGORY_EXTERN(TESTLOG, Log, All);

#define CALLINFO (FString(__FUNCTION__) + TEXT("(") + FString::FromInt(__LINE__) + TEXT(")"))
#define PRINT_CALLINFO() UE_LOG(TESTLOG, Warning, TEXT("%s"), *CALLINFO)

//CPP 파일에 입력
DEFINE_LOG_CATEGORY(TESTLOG);

 

 

 

결과

  • 카테고리가 선언한 문자로 출력된다.

 

 

 

 

 

반응형
반응형

 

 

 

 

Mixamo 애니메이션이 필요해서 UE5 모델로 리타게팅을 시도해봤지만, 비정상적으로 리타게팅이 되었다. 본 이름도 맞춰보고 이것저것 시도해본것중 제일 정상적으로 결과물이 나온 정보를 찾봤다.

 

 

 

Mixamo 사이트에서 애니메이션 다운받는 방법

1. 다음 링크에서 모델을 다운받는다 - 다운받기

 

2.27 MB file on MEGA

 

mega.nz

 ※ 혹시라도 해당 링크가 들어가지지 않는다면 포스팅 하단 영상 링크에서 설명란 찾아볼것

 

2. 압축을 풀어주고 Mixamo 사이트에서 'UPLOAD CHARACTER'를 눌러 다운받은 모델을 올려준다.

 

3. 원하는 애니메이션을 선택해 다운받아준다.

 

 

 

 

언리얼 애니메이션 설정

1. 앞에서 다운받은 모델을 먼저 임포트한다. (스켈레톤은 없음으로 설정하고 임포트)

 

2. 모델이 있는 폴더에 Mixamo에서 다운받은 애니메이션 파일을 다음과 같은 설정으로 임포트해준다.

 ※ 스켈레톤을 앞서 임포트한 'Unreal_Skeleton'으로 설정.

 ※ 메시 임포트는 꺼주고 '모두 임포트' 해준다. (혹시 메시를 추가로 임포트할 경우, 애니메이션 임포트를 체크했는지 확인할 것.)

 

3. Characters\Mannequin_UE4\Rigs 폴더에서 IK_UE4_Mannequin을 복사해 가져온다.

 ※ 가져온 후, 헷갈림을 방지하기 위해 파일명 변경할 것. (필자의 경우 IK_Mixamo_Mannequin으로 변경)

 

4. 가져온 Rig 파일을 AssetActions - Bulk Edit via Property Matrix를 눌러 창을 열어준다.

 

5. Imported Skeleton에서 스켈레톤을 언리얼 스켈레톤으로 설정한다.

 

6. 우클릭 - 애니메이션 - IK 리타게터 생성 후, Rig 파일을 'IK_Mixamo_Mannequin'으로 설정.

 

7. 만든 IK 리타게터를 열어서 타겟 IK 릭 에셋을 'IK_UE4_Mannequin'으로 설정한 뒤 저장해준다.

 

8. Mixamo 애니메이션 파일을 우클릭 - 애니메이션 에셋 리타깃 - 애니메이션 에셋 복제 및 리타깃을 클릭해 창을 열어준 뒤, Target IK Rig Asset을 IK_UE4_Mannequinn으로 선택해준 뒤 리타겟 클릭.

 

9. 생성된 UE4_Mannequin 애니메이션을 다시 UE5_Mannequin 애니메이션으로 리타게팅 해주면 된다.

 

 

 

 

※ 참고한 유튜브 영상

 

 

 

 

 

 

반응형
반응형

 

 

 

 

NavMesh를 이용해 기능을 구현하던 중, NavMesh가 씬에는 존재하지만 메쉬 데이터가 생성되지 않아서 네비게이션 기능이 동작하지 않음. 찾아본 결과, 프로젝트 세팅에 문제가 있었던걸로 확인.

 

 

 

해결 방법

Project settingsNavigation meshIs world partition enabled를 체크 해제해주면 된다.

 

 

 

 

 

반응형
반응형

 

 

 

 

 

1. 필레이트(Fillrate)

- 그래픽 카드가 초당 화면에 렌더링할 수 있는 픽셀의 수를 의미한다. (픽셀 처리에 대한 부담)

- 렌더링 해야하는 픽셀의 수가 많거나, 프래그먼트 쉐이더가 무거우면 래스터라이저 스테이지에서 병목이 발생하는데 이것을 필레이트 병목이라고 한다.

- 필레이트 = 픽셀 수 X 프래그먼트 쉐이더 복잡도 X 오버드로우

 

 

 

2. 확인 방법

- 해상도를 변경해서 프레임을 확인해보면 된다. (해상도를 줄이면 렌더링 해야할 픽셀 수가 줄어들기 때문)

 

 

 

3. 해상도를 줄이는 방법

3-1) 코드로 변경하기

- Screen.SetResolution() 메서드를 사용하여 해상도를 변경할 수 있다.

 

3-2) Project setting에서 변경하기(Android, iOS 한정)

- EditProject SettingsPlayer에서 Resolution and PresentationResolution Scaling에서 설정이 가능하다.

- Resolution Scaling Mode가 기본값(Disabled)으로 되어있는데 Fixed DPI로 변경하고 Target DPI 값을 설정해주면 된다.

- Target DPI : 1인치에 몇개의 화소가 들어가는가(수치가 낮을수록 해상도가 낮아짐)

 

 

 

 

※ 하지만 해상도를 줄이면 유저가 알아차리기 쉽기 때문에 업스케일 샘플링을 사용하는데 이 부분은 추후에 작성 예정.

 

 

 

 

 

반응형
반응형

 

 

 

 

보통 카메라 흔드는 기능에 대해 구글링을 해보면 Random.insideUnitCircle이나 Sphere로 카메라를 흔드는 코드를 많이 볼 수 있었다. 그런데 이런식으로 구성을하면 끊기면서 흔들리는(?) 느낌이 강하게 들어서 좀 더 찾아보니 관련된 에셋이 몇개 있었는데 받아서 뜯어보니 Mathf.PerlinNoise라는 노이즈 함수를 이용해서 카메라를 흔드는것을 봤다.

 

에셋에서는 위치 및 회전값까지 변경해서 건드리고있었는데, 회전값까지 변경하는 코드는 카메라 흔들림이 너무 정신없어서 전부 빼고 x, y 좌표만 변경하는 방법으로 코드를 바꿨다.

 

※ Perlin noise (펄린노이즈)

- 단계적 텍스처를 만들기 위해 개발된 노이즈 함수, 지형(마인크래프트 등)을 생성할 때 이용한다고한다.

- 위키 링크 (영어)

- 유니티 링크 (영어)

 

 

 

 

코드

using System.Collections;
using UnityEngine;

public class CamShake : MonoBehaviour
{
    [SerializeField]
    private float m_roughness;      //거칠기 정도
    [SerializeField]
    private float m_magnitude;      //움직임 범위

    private void Update()
    {
        if(Input.GetKeyDown(KeyCode.Space))
        {
            StartCoroutine(Shake(1f));
        }
    }

    IEnumerator Shake(float duration)
    {
        float halfDuration = duration / 2;
        float elapsed = 0f;
        float tick = Random.Range(-10f, 10f);

        while (elapsed < duration)
        {
            elapsed += Time.deltaTime / halfDuration;

            tick += Time.deltaTime * m_roughness;
            transform.position = new Vector3(
                Mathf.PerlinNoise(tick, 0) - .5f,
                Mathf.PerlinNoise(0, tick) - .5f,
                0f) * m_magnitude * Mathf.PingPong(elapsed, halfDuration);

            yield return null;
        }
    }
}

※ roughness : 거칠기 정도, 카메라가 움직이는 동안 카메라의 떨림을 제어하는 수치이다. 값이 높아질수록 카메라가 움직이는 시간동안 많이 떨린다.

※ magnitude : 카메라 움직임 범위, 카메라가 움직이는 범위 수치이다.

※ tick : 펄린노이즈 함수에 들어갈 값이다. 초반에 랜덤으로 값을 설정하는 이유는 노이즈 함수에 들어가는 값을 다르게하기 위해서이다. (항상 같은 움직임으로 흔들게 하고싶으면 틱값을 랜덤이 아닌 고정값으로 초기화하면 된다.)

 

 

 

 

결과

 

 

 

 

 

 

 

반응형

+ Recent posts