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..
1) 개발 환경 - 언리얼 엔진4 ( C++, Blueprint ), GIT 2) 소개 - 언리얼 엔진4를 이용한 RPG게임의 개발 과정과 기술 습득을 위하여 시작하게 된 프로젝트 입니다. 스킬은 엔진의 Gameplay Ability System 프레임 워크를 이용하여 개발을 하였습니다. 3) 개발 기간 - 2018. 11. 24 ~ 2018. 12. 14 4) 현재 구현 사항 - 저장, 불러오기 - 스킬, 버프 시스템 - 정해진 타입의 방으로 랜덤맵 생성 - 무기 변경, 강화, 효과 - 캐릭터 속성(공격력,방어력,체력,마나,이동속도) - 사운드 제어 - 캐릭터 선택, 캐릭터 정보 위젯
프로그램이 실행이 되면 메모리(RAM)에 로드가 됩니다. 이 상태가 "프로세스" 즉 실행중인 프로그램 입니다. 컴퓨터 운영체제에서는 프로그램의 실행을 위한 다양한 메모리 공간을 제공하는데 대표적인 메모리 공간으로코드 영역, 데이터 영역, 스택 영역, 힙 영역이 있습니다. 코드 영역은 실행할 프로그램의 코드가 저장되는 곳으로 CPU에서 코드 영역에 저장된 명령어를 읽어서 처리하게 됩니다. 데이터 영역은 프로그램의 코드에서 전역 변수와 정적 변수가 저장되는 영역으로 프로그램이 시작되면 메모리가 할당 되고 종료되면 메모리에서 해제 되게 됩니다. 스택 영역은 함수와 지역변수 그리고 매개변수가 저장되는 영역입니다. 함수가 호출되면 메모리가 할당되고 함수의 호출이 끝나면 메모리에서 해제가 됩니다.스택 메모리 영역은..
컴퓨터에는 CPU에 레지스터, 캐시 와 메인메모리 (RAM) 그리고 하드디스크 등 다양한 메모리가 있습니다. 위 그림에서 볼 수 있듯이 메모리 계층 구조에서 위로 올라갈수록 속도는 빠르지만, 용량은 적어지고 아래로 내려올수록 속도는 느려지지만, 용량은 커지는 것을 알 수 있습니다. CPU의 ALU가 요구하는 데이터가 만약 하드디스크에 있다면 데이터를 가져오기 위해서는 L1 캐시부터 하드디스크까지 모든 계층을 거쳐야 하고 다시 하드디스크에서 L1 캐시까지 거쳐서 데이터를 가져오게 됩니다. 그럼 CPU에서 바로 하드디스크에 접근해서 데이터를 가져오면 더 빠를 텐데 왜 위와 같이 계층 구조를 모두 통해서 가져오는지에 대해 의문이 들 것 입니다. 만약에 프로그램 실행이 산발적이라면 메모리 계층구조를 통하는 것이..
에픽 게임즈의 엔지니어인 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 * ..