직접 간단한 포션을 GameEffect를 사용하여 만들어보자.대충의 계획을 세워보면 아래와 같다.EffectActor를 만들어 범용적으로 사용할 기본 클래스를 만들어 준다.EffectActor를 블루프린트로 파생하여 포션 클래스를 만든다.포션 클래스에 맞는 UGamep
게임플레이 어트리뷰트 및 게임플레이 이펙트UGameplayEffect라는 타입의 오브젝트가 있다.이 오브젝트는 Attrubutes와 GameplayTags를 바꾸는데 사용된다.UGameplayEffect의 서브클래스를 만들지 않는다.블루프린트로도, 코드 베이스로도 만들
웹 개발 경험이 있기 때문에 MVC 패턴에 대해서는 잘 알고 있다.쉽게 말하자면 유저가 컨트롤러를 통해 모델을 조작하고 모델이 뷰에게 값을 주면 뷰가 그것을 보여주는 형식이다.조금은 다를지 몰라도 이 개념을 게임 UI에서 다룰 수 있다.또한 실제 Fortnite같은 A
접근 방식에 문제가 있어서 결국 문제를 풀지 못하고 다른 사람의 풀이를 참고했던 문제이다..일단은 다이나믹 프로그래밍 방식을 떠올렸다. 문제는 그 방식이 살짝 잘못됐었다.Di를 자연수 i를 만드는 최소 N의 갯수로 둬버렸던 것이다.그렇게 해서 만들었던 점화식이Di =
쉽게 말하자면 게임 내 요소와 관련된 수치들이라고 할 수 있다.이들은 FGameplayAttributeData라는 구조체로 존재한다.그리고 Attribute Set에 저장되어 관리된다.우리는 이 Attributes의 변경을 감지할 수 있고 그에 따른 Function을
프로그래머스 피로도 문제갖고있는 피로도를 가지고\[입장 피로도, 소모 피로도]를 갖고 있는 던전을최대 몇개나 돌 수 있는지 구하는 문제이다.던전의 갯수가 몇 개 되지 않기 때문에 그냥 완전 탐색을 하면 쉽게 풀 수 있을 듯 하여 그렇게 방향을 잡았다.재귀함수를 사용하여
문제를 해결해나가다가 이게 답이 될 수 없다고 판단하면 되돌아가는 방식이다.그 방향으로 나아가지 않고 되돌아가는 것을 가지치기라고 한다.이 가지치기를 하게 될 조건을 잘 생각해야하는 것이 포인트이다.보통 모든 경우의 수를 탐색해야할 경우에 유용하게 쓰인다.상태를 트리로
Ability System Component 컴포넌트 생성 이전 포스트에서 환경을 설정 했으니 컴포넌트 생성을 해보았다. 현재 Enemy와 플레이어 캐릭터가 같은 Base를 상속받는 설계이다. Base에다가 만들어주자. 전에 알아봤던대로 플레이어의 ASC는 플레이
전형적인 DP 문제였다.보자마자 DP 배열을 만들어서 최대값을 찾아나가면 될 것이라고 생각이 들었다.어떻게 풀어야할지 바로 떠올라서 슥슥 했는데 계속 segmentation fault가 떠서 난감했다.D를 편하게 쓰려고 맨 처음에 미리 할당을 해줬는데 여기서 실수가 있
문제를 여러 개의 간단한 문제로 분리하여 부분의 문제들을 해결함으로써 최종적으로 복잡한 문제의 답을 구하는 방법이다.큰 문제를 작은 문제로 나눌 수 있어야 한다.작은 문제들이 반복돼 나타나고 사용되며 이 작은 문제들의 결괏값은 항상 같아야한다.모든 작은 문제들은 한 번
언리얼 Interface를 사용할 때 저 둘 중 하나가 붙어있지 않으면?언리얼에서 인터페이스 함수를 못 가져와서 UFUNCTION으로 블루프린트에서 사용할 수 있게 해놓더라도여기저기서 에러가 나는 참사가 벌어진다.근데 저 두개의 차이가 무엇일까? 그냥 말 그대로 받아들
GAS를 적용하기 위해서 우선 Ability System Component와 Ability Set을 추가해 볼 것이다.근데 생각해보아야 할점.언리얼을 하면서 얼마나 많이 생각하던 것인가바로바로어디에 추가해야하는가?Pawn에 GAS를 적용하고 싶다면, Pawn 클래스 자
게임을 하면서 플레이어는 정말 다양한 어트리뷰트와 어빌리티가 있다.어트리뷰트의 예체력경험치공격력방어력어빌리티의 예공격방어애니메이션 재생데미지 받기죽음등등..대충 생각나는 것만 해도 정말 다양한 것들이 있다.심지어는 어빌리티에 따라서 사운드, 이펙트 등이 필요할 수 있기
패키지 언리얼에서 패키징은 다양한 의미를 갖는다. 언리얼 오브젝트를 감싼 포장 오브젝트 개발된 최종 콘텐츠를 정리해 프로그램으로 만드는 작업 DLC 혹은 향후 확장 콘텐츠에 사용되는 별도의 데이터 등의 의미를 갖는다. 이번에 알아본 것은 1번, 언리얼 오브젝트를 감
오브젝트나 연결된 오브젝트의 묶음을 바이트 스트림으로 변환하는 과정이다.현재 프로그램 상태를 저장하고 필요할 때 복원 가능 (게임 저장)현재 객체의 정보를 클립보드에 복사해서 다른 프로그램에 전송 가능네트워크를 통해 현재 프로그램의 상태를 다른 컴퓨터에 복원 가능 (멀
C++은 프로그래머가 직접 new, delete로 할당과 해지를 해주어야했다. 이걸 잘못 관리하면 아래와 같은 문제점이 나타나게 된다. Memory Leak : 메모리가 해지되지 않아서 힙에 메모리가 그대로 남음 Dangling Pointer : 이미 해제된 메모리의
언리얼의 대표 컨테이너 라이브러리에는 TArray, TMap, TSet이 있다.줄여서 UCL이라고 불리기도 하는 이들은 언리얼 오브젝트들을 안정적으로 지원을 해준다.그냥 C++ STL의 컨테이너들과 무엇이 다를까?STL은 범용성이 높게 설계되어있기 때문에 한번 컴파일
멀티플레이 구현의 목표는 다른 유저들이 IP 주소를 갖고있지 않아도 로그인하여 참가할 수 있는 게임을 만드는 것이다.리슨 서버를 열었다고 해도 서버의 IP를 플레이어들은 알 방법이 없기 때문에 중간에 특정 서비스를 거쳐 이를 알아낼 수 있어야한다.이런 서비스 중 대표적
게임에서 멀티플레이를 구현하는 데에는 크게 두가지 방법으로 나뉜다.P2P클라이언트-서버 모델간단하게 설명하자면 P2P는 Peer to Peer의 약어로 모든 플레이어가 이어져있는 것을 뜻한다.클라이언트 서버 모델은 하나의 시스템을 서버로 정의하고 다른 모든 시스템은 클