전체 글 283

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (7) Attribute Set을 만들고 적용하기

이번 포스트에서는 Attribute Set을 만들고 한번 적용해보겠습니다.Attribute Set은 GAS에서 사용할 여러 데이터들을 담아놓은 클래스로 ASC로 접근이 가능합니다.기본적으로 하나 이상의 AS를 만들 수 있지만 불필요한 용량의 문제가 발생합니다.그러므로 일반적으로는 하나의 Attribute Set에 모든 Attribute들을 담아 관리합니다.프로젝트에서도 위와 같은 방법으로 진행하도록 하겠습니다.Attribute에 담겨진 Attribute들은 실수이며 FGameplayAttributeData의 자료형을 가집니다.Attribute를 코드로 인위적으로 설정할 수 있지만대부분의 경우 Gameplay Effect를 통해 설정하는 것이 바람직합니다.GE를 사용하여 값을 변동하는 경우 디버깅이 쉽고 ..

re 라이브러리

이번 포스트에서는 파이썬에서 사용할 수 있는 정규표현식 라이브러리인re 라이브러리에 대해서 알아보겠습니다. 1) 정규표현식이란?정규표현식은 영어로 regualr expressions를 말하는데 복잡한 문자열을 처리할 때 사용합니다.파이썬 외에도 다릉 언어에서도 사용하며 문자열을 처리해야 하는 곳에서 다양하게 활용가능합니다. 2) re 라이브러리 사용예제이제 re 라이브러리의 사용예제를 알아보겠습니다.import retext = "1. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라 만세 무궁화 삼천리 화려 강산 대한 사람 대한으로 길이 보전하세 2. 남산 위에 저 소나무 철갑을 두른 듯 바람 서리 불변함은 우리 기상일세 무궁화 삼천리 화려 강산 대한 사람 대한으로 길이 보전하세3. 가을 하늘..

Python 2024.11.21

txtwrap 라이브러리

이번 포스트에서는 파이썬의 라이브러리 중에서 txtwrap 라이브러리에 대해 알아보겠습니다.txtwrap 라이브러리는 문자열을 보기 좋은 형태로 정렬하거나 줄바꿈하는데 사용할 수 있습니다. 대표적인 함수로 shorten(), wrap(), fill() 등이 있는데각각 원하는 길이에 맞게 길이 줄이기, 문장 자르기, 문장 줄바꿈을 수행합니다. 이제 예제를 한번 확인해보겠습니다.1) 예제import textwraptext = "1. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라 만세 무궁화 삼천리 화려 강산 대한 사람 대한으로 길이 보전하세 2. 남산 위에 저 소나무 철갑을 두른 듯 바람 서리 불변함은 우리 기상일세 무궁화 삼천리 화려 강산 대한 사람 대한으로 길이 보전하세3. 가을 하늘 공활한..

Python 2024.11.20

간단한 2D RPG 프로젝트 - (3) MonsterController

이번에는 몬스터를 위한 MonsterController를 만들어보겠습니다.플레이어의 경우 플레이어가 직접 조작하므로 챙겨야 할 것이 많지만몬스터의 경우 코드를 통해 이를 자동화하여 제어하는 것이 가능합니다.이때 MonsterController 역시 BaseController에서 상속되었으므로 일부 기능은 동일하게 수행합니다. 간단한 프로젝트이므로 몬스터에서 Animation 처리는 생략하고 대신각각의 애니메이션에 대한 처리를 로그로서 남기도록 하겠습니다. 1) MonsterControllerusing System.Collections;using System.Collections.Generic;using UnityEngine;public class MonsterController : BaseControll..

간단한 2D RPG 프로젝트 - (2) PlayerController

이번에는 BaseController에서 파생된 PlayerController를 만들어보겠습니다.코드 자체는 매우 간단하고 개선할 부분이 매우 많으므로프로젝트에 완전히 적용하기에는 무리가 있다는 점을 알아주셨으면 좋겠습니다. 1) Animator플레이어는 많은 애니메이션을 사용합니다.이번 프로젝트에서는 총 6개의 애니메이션을 사용합니다.우선 Animator의 구성을 먼저 확인해보겠습니다.  움직이지 않는 상태의 KnightIdle, 기본 이동 상태의 KnightMove, 대시 이동 상태의 KnightDash점프하고 떨어지는 상태의 JumpFall, 그리고 콤보 공격에 따라 수행되는 KnightAttack1,2,3이 있습니다. 위의 애니메이션들의 전환은 다음과 같이 정리할 수 있습니다.KnightAttack..

간단한 2D RPG 프로젝트 - (1) BaseController

이번 포스트에서는 유니티 엔진을 사용하여 간단한 2D RPG의 구성요소를 만들어보겠습니다.2D는 기본적으로 3D에 비해 구성이나 설계가 단순하기에 부담없이 사용할 수 있는 코드로 구성해보았습니다. 1) BaseControllerRPG게임에는 플레이어가 조종하는 캐릭터와 그렇지 않은 캐릭터가 존재합니다.그러나 2개의 요소 모두 공통적인 기능을 수행해야 하는 경우가 있습니다.이런 상황에서 상속을 통해 공통적인 기능은 부모가, 개별적인 기능을 따로 구현하는 것이 좋습니다.따라서 부모의 역할을 수행하는 BaseController를 만들어보겠습니다. using System.Collections;using System.Collections.Generic;using UnityEngine;public class Bas..

문자열 처리

파이썬에서는 객체를 문자열로 반환하는 2가지 함수가 존재합니다.하나는 str() 이고, 다른 하나는 repr() 입니다.이번 포스트에서는 두 함수의 차이를 알아보고 어떻게 사용되는지도 알아보겠습니다. 1) str() 함수str() 함수는 객체를 시스템이 아닌 사용자를 위한 문자열로 반환합니다.주로 사용자가 보기쉽게 문자열을 반환하기 위해 사용합니다. 2) repr() 함수repr() 함수는 객체를 사용자가 아닌 시스템을 위한 문자열로 반환합니다.주로 객체를 문자열로 다시 생성하기 위해 사용합니다. 이렇게 놓고 보면 선뜻 이해가 가지 않지만예제로 보게 되면 이해가 될 것이라 생각합니다. 바로 예제로 넘어가보겠습니다. 3) str()과 repr() 예제import datetimea = 123print(str..

Python 2024.11.19

외부 라이브러리

이번 포스트에서는 외부 라이브러리를 다루는 방법에 대해 알아보겠습니다.외부 라이브러리를 다루는 경우에는 2가지 방법으로 나뉘게 되는데,파이썬을 어떤 방식으로 사용하는지로 나뉘게 됩니다. 1) 외부 IDE를 사용제가 사용하는 Pycharm으로 외부 라이브러리를 다루는 방법을 알아보겠습니다. 상단의 패널에서 File -> Settings -> Project -> Python Interpreter로 이동하여 프로젝트에 사용할외부 라이브러리를 설치하거나 삭제할 수 있습니다.  2) pip를 이용하여 설치IDE에서 외부 라이브러리를 설치할 때도 기본적으로 pip 라이브러리를 사용하여 설치해야 합니다.이는 IDE를 사용하지 않고 cmd를 통해 외부 라이브러리를 설치할 때도 동일합니다. cmd를 관리자 권한으로 실행..

Python 2024.11.18

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (6) Enemy와 Player에서 ASC와 AS 설정하기

이제 적과 플레이어 클래스에서 ASC와 AS를 설정해보겠습니다. 1) AAuraBaseCharacter에서 상속된 적 클래스 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, public IEnemyInterface{ GENERATED_BODY()public: AAuraEnemy(); virtual void BeginPlay() override; prot..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (5-1) ReplicationMode와 InitActorInfo 함수

Replication Mode는 언리얼 엔진에서 서버가 클라이언트를 업데이트하는 방식을 정의합니다.함수 SetReplicationMode를 통해 이 방식을 결정할 수 있고,인자는 구조체 EGameplayEffectReplicationMode의 멤버를 사용합니다. 1) EGameplayEffectReplicationMode이 구조체의 멤버는 총 3가지로 구분할 수 있습니다.이는 설명드리기보다는 그림으로서 한번에 보는 것이 나을 것이라 생각합니다.  위와 같이 정리할 수 있습니다.프로젝트에 이를 적용해보면AuraPlayerState의 ASC는 플레이어가 조종하므로 Mixed를 적용하면 될 것이고,AuraEnemy의 ASC는 AI가 조종하므로 Minimal을 적용하면 될 것입니다. 2) InitActorInf..