Game Dev/WarSimulation 11

Windows 화면 비율이 1:1이 아닐 경우 UE 에디터 이상 현상 수정

4K 모니터와 같이 모니터의 해상도가 높을 경우 글씨, 아이콘 등이 작아보이기 때문에 윈도우에서 크기 비율을 조정하곤 한다. (하단의 이미지 참고) 잘 사용하고 있었는데 UE 4.18부터 High DPI 설정이 추가되면서 에디터 동작이 이상해지는 현상이 나타났다.에디터를 로딩할 때 Splash Image가 매우 작게 보임 (큰 문제는 아님)에디터가 실행된 이후 보이기는 정상으로 보임PIE 모드로 게임을 시작하면 마우스 포인터가 Viewport와 맞지 않음 (문제)해결 방법은 다음과 같다.UE Install 폴더로 이동한다.Engine/Binaries/Win64/UE4Editor.exe 파일을 우클릭한다.호환성 탭에서 "높은 DPI 조정 동작을 재정의한다."를 켜고 "시스템"으로 조정한 사람을 변경한다.단..

Unreal Engine v4.17.0 업데이트 이후 고통

1. 컴파일 에러가끔 Visual Studio에서 "error : System.ArgumentNullException: Value cannot be null." 메세지가 나오면서 컴파일이 되지 않는다. 이 경우 해결책은 Rebuild 밖에 없었다. UE Forum을 검색하니 개발자께서 친절하게 HotFix를 배포해주셨으니 다음 링크에서 HotFix를 설치하자.HotFix Click 2. Nox, Bluestacks 등에서 Android 어플리케이션 실행 불가능이 경우는 기계에 직접 설치할 경우 잘 동작한다. 나는 괜히 힘 안 빼고 4.17.1 업데이트를 기다리기로 했다.

UE4 게임이 정지되었을 때 카메라 움직이기

UE4에서는 다음 코드를 통해 게임을 일시 정지할 수 있다. UGameplayStatics::SetGamePaused(GetWorld(), true); 때로는 게임을 일시정지 해놓고 멋진 카메라 앵글로 바꾸고 싶을 때가 있는데 SetGamePaused 함수는 모든 Tick을 정지시키기 때문에 카메라의 Transform을 변경해도 바로 반영되지 않는다. (Pause를 풀었을 때 반영 됨) 해결책으로 게임이 정지되었을 때 APlayerController::UpdateCameraManager() 함수를 호출해주면 카메라가 바로바로 업데이트 된다. 단 매번 UpdateCameraManager 함수를 호출하기는 쉽지 않을 것이기 때문에 간단한 Actor를 만들어서 자동으로 불리게 해보았다. AMyActor::AM..

Hexagon Grid Material 제작

DebugDrawLine의 압박을 이기지 못하고 드디어 Hexagon Grid의 Material을 만들었다. http://aker.tistory.com/570 : DebugDrawLine 실패 사례http://aker.tistory.com/574 : UDecalComponent 실패 사례 우선 Hexagon Grid는 다음 링크를 참고하여 만들었고 내 프로젝트에서 사용하는 Hexagon 모양은 Pointy Topped 이다.http://www.redblobgames.com/grids/hexagons/ Hexagon의 선분을 그리기 위해 Radius(=r), LineThickness(=thickness)를 외부에서 전달한다. 우선 UE Material에서 현재 그려지는 Pixel의 WorldPosition..

UE4 ACharacter의 RootComponent 변경

UE4에서 일반적으로 게임 캐릭터를 생성하려면 ACharacter를 그대로 이용하거나 상속하게 된다. 다 좋은데 가장 당황스러웠던 것 중 하나가 캐릭터의 Pivot이 발끝이 아닌 전체 Mesh의 중심이었다는 점이다. (엄밀하게 말하자면 CapsuleComponent의 중심) 즉 아래 그림처럼 보이는 것인데 이 때문에 ACharacter::SetActorLocation을 하면 캐릭터가 지면에 파뭍힌다. 이후 CapsuleComponent 물리에 의해서 Solving 되기는 하지만 경우에 따라서는 Spawn 자체가 안 될 때도 있다. 우선 이런 상황에서도 Spawn을 하기 위해서는 FActorSpawnParameters::SpawnCollisionHandlingOverride를 AlwaysSpawn으로 전달..

Landscape에 맞닿는 Line 만들기 (N/N)

Polygon과 만나는 점에 대해서도 vertex를 추가하였다. 회색 : Landscape의 Polygon / 붉은색 : Grid Line 파란색 : Line이 지나는 Landscape Patch 하늘색 : Patch의 Min~Max까지의 직선 알고리즘은 다음과 같다. Landscape의 Polygon을 2개 모은 사각형을 Patch라고 한다. (위 그림의 파란색)Patch를 지나는 Grid Line의 교점 p1, p2를 구한다.Patch의 Min, Max Point인 q1, q2를 구한다.p1-p2 선분과 q1-q2 선분의 교점을 구한다.http://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect..

Landscape에 맞닿는 Line 만들기 (1/N)

Landscape에만 그려지는 Decal에 대해 포럼에 질문을 올렸는데 한달 정도 답이 없다. 앞에서 얘기했듯이 Mesh마다 Receive Decal을 끄는 것은 원하는 바가 아니다. 그렇다면 대안은... Landscape를 따라다니는 Line Segment를 만든다.Landscape의 Material에 Grid 격자를 포함한다.이 경우 Grid 크기가 변경될 때 Material에 그려진 Grid 크기도 변경되어야 함그렇다면 Material의 Texture를 프로그램으로 만들어주는 것이 가장 편할듯Landscape를 그릴 때 Stencil을 써주고 Landscape Stencil 위에만 그려지는 Decal을 만든다. 우선은 1번을 구현해봤다. 구현 목적을 간단히 그림으로 설명하면 아래 그림에서 시작점~목..

GridLine을 UDecalComponent로 변경

DebugDrawLine으로 그리던 GridLine을 Decal을 사용하여 그리도록 수정하였다. 외관상으로는 깔끔하게 잘 나온다. 고생했던 점은 사용자가 원하는 Material을 UDecalComponent에 설정하려면 해당 Material의 Material Domain이 "Deferred Decal"이어야 한다는 점이다. 아쉬운 점은 UDecalComponent 개수가 너무 많이 생성된다는 것... 그런데 잘 생각해보니 인접 그리드가 있을 때는 라인이 겹치기 때문에 한번만 그려도 될 것 같다. 아주 외곽일 때는 다 그려야겠지만... 어쨌던 이렇게 하면 UDecalComponent 개수는 절반으로 줄어들 수 있을 것 같다. 수정 이전 : 1 Grid Cell = 6 Line = 6 UDecalCompon..

Terrain Elevation 얻어오기

UE에서 Landscape를 생성한 후 Landscape의 Z 값을 읽어오는 작업을 진행했다. Landscape를 만드는 자세한 설명은 생략한다! CryEngine에서는 GetTerrainZ, GetZ 같은 함수가 있었는데 UE에서는 찾지 못했다. 포럼을 검색해보니 그냥 LineTrace를 해보라고 한다. 많이 느릴 것 같은데 우선 함수 Wrapping을 해서 나중에 구현은 바꿀 수 있도록 하고, LineTrace를 해보았다. 오 대충 되는듯? 몇가지 문제가 있는데 Grid의 선분이 Lighting에 영향을 받는다. (나는 단색으로 나오기를 원함) Grid의 선분이 굴곡이 있는 곳에서는 땅 밑으로 들어간다. 두번째 문제의 원인은 Terrain의 Vertex보다 Grid의 Vertex가 더 크기 때문이다...

VisualStudio를 위한 Unreal 설정

Unreal을 제대로 사용하려면 VisualStudio에 추가 설정이 필요하다. 몇개는 Unreal에서 이미 제공하는 것이고 다른 하나는 웹을 검색하다가 발견한 것이다. 사실 VisualAssist가 없다보니 VS 기본 Intellisense의 느린 단점이 너무나 잘 보인다. VisualAssist 개인 구매를 심각하게 고민 중! 참고로 오늘 UE 4.15.0 버전을 설치해보니 VS2013, VS2015은 물론이고 VS2017까지도 Extension이 지원되고 있다. Unreal VisualizerVisualStudio에서 디버깅 할 때 watch 윈도우 등에서 값을 잘 보여준다.설치/Engine/Extras/VisualStudio/Debugging/UE4.natvis 파일을 찾는다.해당 파일을 다음 중..