2D게임이나 3D 탑뷰에서 시야 범위를 표현 하기 위하여 구현하게 된 컴포넌트 입니다.ProceduralMeshComponent 를 이용하였으며 실시간으로 Mesh를 생성하여 시야를 표현합니다.간단히 범위, 각도, 트레이스될 장애물 값을 설정 하면 됩니다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"#include "Procedura..
언리얼엔진4를 이용한 1인 RPG게임 개발중 대쉬 스킬을 표현하기 위해 구현한 고스트 트레일 입니다. 트레일에 상용될 메터리얼과 그 메터리얼에 값 변경 파라미터 이름, 투명도 커브 데이터를 넣어 주면 초기 설정은 끝이 됩니다. 실제 사용은 애니메이션 노티파이로 이벤트를 받아서 고스트 트레일 액터를 생성하는 방식으로 처리 하였습니다. 투명도 커브의 시간이 끝이되면 자동으로 Destroy 되는데요 Actor의 생성과 파괴가 부담스럽다면 Object pool 을 만들어 관리하면 될 듯 합니다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656..
에픽 게임즈의 엔지니어인 Laurent Delayen의 파라곤 애니메이션 관련 발표 자료를 보고캐릭터들의 자연스러운 움직임에 반해서 비슷하게라도 만들어 보자는 생각에 발표자료들을 분석하며어렵게 파라곤 에셋을 이용하여 개인 개발을 하고 있었다. 그런데 회사 프로젝트를 진행하면서 플러그인을 둘러 보던 중 엔진에 AnimDistanceMatching 이라는 플러그인이 있는 것 을보고 순간 Laurent Delayen 의 발표자료가 생각이 났고 이 플러그인에서 정보를 얻을 수 있을 거라고 생각을 하며 소스를 열어 보았다.하지만 플러그인 정작 구현 부분은 비어 있는 상태였고 알아보니 언제 추가가 될지는 확실할 수 없다는 답변뿐이다.무언가 다른 기능들에 비해 우선순위가 낮던지 범용적이지 못해서 그럴 수도 있겠다는 ..
VR 개발을 진행 하다보면 레벨 전환시에 HMD 에 렌더링되면 게임 화면이 기기의 연결화면으로 전환이 되었다가 다시 게임 화면으로 전환 되는 경우를 볼 수 가 있다. 문제의 원인은 엔진에서 렌더링 처리가 오래 걸리게 되면 VR에서 자동으로 화면을 바꾸어 버리기 때문에 발생을 하게 되는 현상인데이는 장시간 화면이 갱신되지 않는 상황은 사용자 경험을 해칠 수 있기 때문에 VR이 제어를 하게 되는 것이다. 이 문제의 해결한 방법으로는 먼저 프로젝트 세팅에서 비동기 로드를 이용한다. * 프로젝트 세팅 -> 엔진 -> Streaming -> Package Streaming -> Async Loading Thread Enabled 를 True 로 설정 * Event Driven Loader 도 Enable 시키면 ..
4.6 에서 클래스가 변경이 되었는데. 4.5.1 까지 프로젝트에서 새 클래스를 만들 때 마다 실제로 사용하지 않더라도 생성자를 포함했어야 했다. 4.6에서 더이상 그렇지 않아도 되면서 생성자는 이제 선택사항이 되었다. 123456789101112131415// MyActor.h UCLASS()class TESTCONSTRUCTOR_API AMyActor : public AActor{ GENERATED_BODY() }; /*********************************/ // MyActor.cpp #include "MyActor.h"cs GENERATED_BODY 매크로 사용시에 생성자를 정의하지 않고도 빌드 할 수 있다. 생성자가 필요한 경우 해당 매크로를 GENERATED_UCLASS_B..
시작이 예측 되지 않기 때문에 방금 이동하기 시작했다는 것을 감지하여 이전 프레임에서 현재위치를 예측 마찰과 같이 걷는 물리에서 사용하는 것과 같은 동일한 매개 변수를 사용. 먼저 현재 속도에 따라 멈출 시간을 계산 TimeToStop = CapsuleSpeed2D / (BreakingFriction * CapsuleSpeed2D + BrakingDeceleration); 이 값을 가지고 멈출 곳을 쉽게 찾을 수 있다. StoppingLocation = CurrentLocation + Velocity2D * TimeToStop + 0.5 * ((-BreakingFriction) * Velocity2D - BreakingDeceleration * VelocityNormal2D) * TimeToStop * ..
Header 파일 1static bool GetPixelData(UTexture2D* InTexture, FVector2D InUV, FColor& OutPixelData);cs CPP 파일 123456789101112131415161718192021222324252627282930313233343536373839404142434445bool GetPixelData(UTexture2D* InTexture, FVector2D InUV, FColor& OutPixelData) { FTexture2DMipMap* MyMipMap = &InTexture->PlatformData->Mips[0]; if (MyMipMap != nullptr) { FByteBulkData* RawImageData = &MyMipMa..
언리얼엔진4 의 액터에는 위치, 방향, 크기 정보가 없다.( 언리얼 엔진3에는 정보를 가지고 있었다) 액터의 위치, 방향, 크기 정보를 갇기 위해서 필요한 부분을 컴포넌트가 대체 하게 되는데 그래서 나오게 된 것이 RootComponent 이다. ( 위치,바향,크기 정보는 SceneComponent 가 가지고 있기때문에 RootComponent로 지정하기 위해서는 SceneComponent를 상속 받은 클래스나, 상속받은 사용자 클래스여야만 한다 ) 이 RootComponent 는 하위에 다른 컴포넌트들을 가질 수 있는데 배열이 아닌 트리로 관리를 한다. 언리얼 엔진4 - SceneComponent
언리얼 오브젝트는 언리얼 헤더 툴이 파싱하고 분석하여 부가적인 메타 정보를 담은 소스 코드를 프로젝트의 intermediate 폴더에 생성을 해준다. 이 메타 정보는 언리얼 엔진의 UCLASS 라는 특별한 클래스를 통해 보관되어 진다.( 각 UCLASS 는 Class Default Object (이후 CDO) 라 불리는 오브젝트를 하나 유지) UCLASS 에는 언리얼 오브젝트에 대한 클래스 계층 구조, 멤버변수, 함수에 대한 정보를 가지고 있다. 런타임에서 특정 클래스를 검색해 타입을 알아내 인스턴스의 멤버 변수 값을 변경하거나 멤버 함수를 호출하는 것이 가능하다.(리플렉션) 컴파일 단계에서 언리얼 오브젝트마다 UCLASS가 생성되며 실행초기 런타임 과정에서 언리얼 오브젝트 마다 클래스 정보와 함께 언리..
루트모션은 "캐릭터의 역동적인 좌표이동을 에니메이터가 직접 제어 하기 위해 고안되었고. 기본 원리는 캐릭터의 최상위 루트 노드의 위치변화 량을 캐릭터의 월드 좌표에 곧바로 반영한다" 라고 언리얼 (UDK)에서는 설명하고 있다. 그러면 루트모션은 어떤 상황에 사용하면 좋을까, 보통 캐릭터를 움직일때 입력값(방향, 속도) 을 받아서 그 시점에 걷기(혹은 뛰기) 애니메이션을 재생 시켜서 이동 연출을 하게 된다. 하지만 불규칙 적인 애니메이션인 경우 문제가 되는데, 예를 들어 좀비 같은경우 이동시 한쪽발을 끈다던지, 절뚝 거린다든지 여러 패턴으로 이동하면 애니메이션 연출에 맞게 이동 시키기가 애매하기( 애니메이션의 커브값을 넣어서 클라이언트에서 이동시 속도 변화를 줄 수도 있긴하다) 때문에 이런경우 입력받은 속..