분류 전체보기 280

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (4) GAS 프레임워크의 이해와 PlayerState

기본적인 게임의 구조를 설정하였으므로 이제 본격적으로 GameAbilitySystem을 적용해보겠습니다.그전에 GAS의 구성과 흐름을 한번 짚고 넘어가겠습니다. 1) GAS 프레임워크의 구조GAS 프레임워크는 다음의 구조로 동작합니다. 위와 같이 그림으로서 GAS가 동작하는 구조를 정리하였습니다.이제 세부 사항들에 대해 알아보겠습니다. Ability System Component, 줄여서 ASC라고 불리는 요소입니다.GAS 프레임워크에서 가장 중요한 역할을 수행, Actor에 부착되며 여러 설정을 가능하게 합니다. Attribute Set은 기존에 클래스에서 변수로 모아놓은 데이터들을 새로운 형태로 빼놓은 형태입니다.GAS 시스템에서 사용할 수 있는 데이터인 Attribute를 모아놓은 집합이라고 생각하..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (3) PlayerController의 설정과 GameMode

이번 포스트에서는 플레이어를 조작하기 위한 PlayerController 클래스의 설정과게임을 운영하기 위한 GameMode 클래스 생성 및 부가설정을 진행하겠습니다. 1) GameMode 클래스우선 게임을 운영하기 위한 GameMode 클래스를 생성하고 이를 블루프린트로 만들어프로젝트의 기본 GameMode로 설정하겠습니다.   다음으로 플레이어를 조작하기 위한 PlayerController 클래스를 생성해보겠습니다. 2) PlayerController 클래스 - InputAction과 InputAcionMappingContext언리얼 엔진에서는 입력을 처리하기 위한 2가지 방법을 제안합니다.하나는 기존의 입력 시스템을 사용하는 것이고,다른 하나는 EnhancedInput이라는 신형 시스템을 사용합니다..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (2) 몬스터 블루프린트와 애니메이션 블루 프린트

이번에는 몬스터의 블루 프린트를 만들어보고추가적으로 플레이어와 몬스터를 위한 애니메이션 블루 프린트도 만들어보겠습니다. 1) 몬스터를 위한 기본 클래스 AAuraEnemy#pragma once#include "CoreMinimal.h"#include "Character/AuraCharacterBase.h"#include "Interface/EnemyInterface.h"#include "AuraEnemy.generated.h"/** * */UCLASS()class AURA_API AAuraEnemy : public AAuraCharacterBase{ GENERATED_BODY()public: AAuraEnemy(); }; #include "Enemy/AuraEnemy.h"#include "Aura..

자료형 어노테이션

기본적으로 파이썬은 변수의 자료형 문제에 대해서 자유롭습니다.그렇지만 프로젝트의 규모가 커지고 협업을 하는 상황이 되면파이썬의 자유로운 방식은 소통의 불화를 불러오는 문제를 일으킬 수 있습니다.이런 상황을 위한 어노테이션에 대해 알아보겠습니다. 1) 어노테이션이란?변수를 선언할 때 그 타입을 명시적으로 선언해 줌으로써어떤 타입의 값이 지정될 것인지 직접 알려주는 것이 어노테이션이라고 합니다. 어노테이션을 사용하게 되면 가독성과 협업시의 효율성이 높일 수 있습니다.파이썬의 경우 3.5 버전부터 어노테이션을 사용할 수 있습니다. 2) 파이썬의 어노테이션과 예제파이썬의 어노테이션 방식은 다음과 같습니다.변수의 경우 아래의 방식을 사용하고변수이름 : 자료형 = 변수의값 함수의 경우 다음의 방식을 사용합니다.de..

Python 2024.11.15

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (1) 플레이어 블루프린트 생성

GameplayAbilitySystem 줄여서 GAS로 불리는 프레임워크는언리얼에서 제공하며 게임 제작을 유연하게 만들어주는 도구입니다. 이를 이용하여 하나의 완성된 게임을 제작해보도록 하겠습니다. *기본적인 구조와 리소스는 Stephen Ulibari님의 강의에서 참고되었음을 알려드립니다*https://www.udemy.com/course/unreal-engine-5-gas-top-down-rpg/  플레이어를 세팅하기 이전에 플레이어와 적 모두가 사용할 수 있는 기본적인 클래스즉, 조상 클래스를 만들고자 합니다.구성은 다음과 같이 진행됩니다. 1) Pawn들의 기본 뼈대인 AuraBaseCharacter#pragma once#include "CoreMinimal.h"#include "GameFrame..

iterator와 generator

이번 포스트에서는 iterator와 generator에 대해 알아보겠습니다. 1) iteratoriterator는 집합에서 차례대로 값을 꺼낼 수 있는 객체를 말합니다.iterator는 집합의 크기가 매우 크고 데이터의 양이 아주 많을 때 일일이 그 집합을 사용하지 않고 필요한 값을 뽑아 사용합니다.이 방식은 메모리에도 부담을 덜 주기에 집합이 큰 경우에 아주 효율적입니다. iterator의 경우 반복이 가능한 객체에만 사용할 수 있는데,이러한 객체의 상태를 'iterable하다' 라고 표현할 수 있습니다. iterator는 다음의 2개의 함수로 동작합니다.iter() 함수를 통해 객체를 반복 가능한 객체로 변환합니다.next() 함수로 객체의 값을 뽑아올 수 있습니다.그리고 가장 중요한 것은 한번 ne..

Python 2024.11.14

언리얼 엔진에서의 광원과 설정

이번 포스트에서는 언리얼 엔진에서의 광원들과 특징 그리고 광원의 설정들을 알아보겠습니다.언리얼 엔진에서는 기본적으로 아래와 같은 5개의 광원을 제공합니다.  1) Directional LightDirectional Light는 태양과 같은 영구 광원의 역할을 생성합니다.평행한 그림자를 만들어 낼 수 있으며temparature를 조작하여 낮게 조작하면 밝은색, 높게 조작하면 어두운색을 만들어냅니다.ctrl + L 키를 눌러 해의 위치를 조작할 수 있습니다. Directional Light의 Mobility 설정은 다음과 같습니다.static의 경우, 빛을 조작할 수는 없지만 빠르게 빛을 렌더링할 수 있습니다.stationary의 경우, 빛의 위치를 변경할 수는 없지만 빛의 색과 세기는 변경할 수 있습니다...

싱글톤 패턴

규모가 있는 식당을 떠올려보면 많은 직원들이 식당의 사장님에 의해 고용되어 근무합니다.그리고 그중에서는 지배인처럼 다른 직원들을 관리하는 직원이 존재합니다.일반적인 경우 지배인의 수는 그리 많지 않은 편입니다. 싱글턴은 식당에서의 지배인의 역할을 수행합니다.유일성이 보장되는 인스턴스로서 싱글턴은 주로 다른 데이터를 제어하거나 관리하는 역할을 수행합니다.이번 포스트에서는 싱글톤 패턴을 사용하는 방법을 예제를 통해 알아보겠습니다. - Unity를 통한 싱글톤 패턴의 구현제일 먼저 Player에게 붙어있을 Player 컴포넌트의 코드입니다.public class Player : MonoBehaviour{ private void Start() { Managers managers = Man..

컴퓨터 구조 2024.11.12

Collision과 Trigger

Unity를 다루다 보면 물리 충돌은 매우 빈번하게 일어납니다.물리 충돌은 게임에서 무언가를 판단하는 매우 중요한 기능이므로 물리 충돌 없이는 사실상 게임이 돌아가지 않는다고 봐도 무방할 정도입니다. 그리고 Unity에서는 이러한 충돌을 위해 2가지의 기능을 제공합니다.오늘은 위의 2가지 기능과 그 차이를 중점으로 한번 알아보겠습니다. 1) CollisionCollision은 실제 물리 충돌을 판단합니다.총알이 피격당하거나 휘두른 검에 맞는 등의 실제 물리 충돌을 판단하는 것이 바로 Collision입니다. Collision의 경우 판단하는 함수는 OnColiisionEnter() 입니다.그렇다면 판단하는 조건에 대해서도 알아봐야 하는 것이 당연합니다.Collision의 판단 조건은 다음과 같습니다. 충..

마우스 입력을 통한 캐릭터 이동

이번 포스트에서는 마우스 입력을 통한 캐릭터의 이동을 알아보겠습니다.조금만 응용해도 모바일 환경에서의 터치에 대한 입력으로도 변형이 가능한 유용한 예제입니다. 1) 소스코드public class PlayerController : MonoBehaviour{ bool moveToDest = false; Vector3 destPos; private void Update() { OnMouseDown(); if (moveToDest) { MovePlayer(); } } void OnMouseDown() { if (Input.GetMouseButtonDown(0)) { ..