유니티/게임 프로젝트 27

2D RPG - (13) 스킬 시스템 구현을 위한 사전설정

이번 포스트부터는 RPG에서 사용가능한 스킬 시스템을 만들어보겠습니다.스킬 시스템은 크게 2가지로 동작하는데,스킬에 필요한 애니메이션과 각 스킬의 스크립트의 2가지로 구성되어 동작하게 됩니다.이때 스킬 시스템은 캐릭터에 종속적이지 않고싱글톤으로 동작하는 SkillSystemManager에 의해 동작할 예정입니다. 1) 기존의 문제를 수정기존에 사용하던 몬스터가 전투를 수행하기 위한 전투 상태 돌입의 코드에서FindObject 함수를 통해 플레이어를 탐색하고 있었습니다. 유니티의 FindObject는 언리얼 엔진과는 다르게 매우 비효율적이므로Player를 담당하는 PlayerManager를 생성해 이를 해결하도록 하겠습니다. 1 - 1) PlayerManagerpublic class PlayerManage..

2D RPG - (12 - 2) 카운터 어택 구현하기

지난 포스트에 이어 이번에는 플레이어 코드를 구현해보록 하겠습니다. 1) PlayerControllerpublic class PlayerController : BaseCharacterController{ . . . #region States . . . public PlayerStateCounterAttack _counterAttackState { get; private set; } #endregion // Player Input . . . [SerializeField] InputAction _counterAttackAction; . . . // Attack Info [Header("Attack Details")] . . . public float _coun..

2D RPG - (12 - 1) 카운터 어택 구현하기

이번 포스트에서는 적의 공격을 반격하는 카운터 어택 기능을 구현해보도록 하겠습니다. 위와 같이 카운터 어택이 성공하였을 때,평범하게 공격받을 때와 다르게 이펙트가 발생하는 것을 볼 수 있습니다 적에게서 보여지는 빨간색 사각형이 유요한 동안에만 카운터 어택을 수행할 수 있으며,플레이어의 경우 카운터 어택이 성공하면 성공 시의 애니메이션이 연출되는 것을 확인할 수 있습니다. 1) BaseEffectControllerpublic class BaseEffectController : MonoBehaviour{ . . . void RedColorBlink() { if(_spriteRenderer.color != Color.white) _spriteRenderer.colo..

2D RPG - (11) 피격에 따른 효과 구현하기

지난 포스트에서는 스켈레톤의 기본적인 구조를 갖춰놓았습니다.이번에는 공격받았을 경우, 피격 효과를 구현해보도록 하겠습니다. 피격 효과의 구현은 Animation Event를 통해 발동시키도록 하겠습니다. 1) BaseEffectControllerpublic class BaseEffectController : MonoBehaviour{ private SpriteRenderer _spriteRenderer; [Header("Flash FX")] [SerializeField] private float _flashDuration; private Material _defaultMaterial; [SerializeField] private Material _hitMaterial..

2D RPG - (10) 스켈레톤 만들기 (마무리)

1) 경계 상태를 의미하는 SkeletonStateEngagepublic class SkeletonStateEngage : EnemyState{ // 경계 상태를 의미하는 SkeletonStateEngage SkeletonController _skeletonController; Transform _player; float _moveDir = 1; public SkeletonStateEngage(EnemyController enemyBaseController, EnemyStateMachine enemyStateMachine, string animatorBoolParamName, SkeletonController enemyController) : base(enemyB..

2D RPG - (9) 스켈레톤 만들기 (1)

이제 기존의 Enemy 3총사를 사용하여새로운 적인 Skeleton을 만들어보겠습니다. 기존의 코드에서 볼 수 있듯이 새로운 적의 타입별로 Controller가 필요하므로 이를 수행하겠습니다. 1) SkeletonControllerpublic class SkeletonController : EnemyController{ // Skeleton States public SkeletonStateIdle _idleState { get; private set; } public SkeletonStateMove _moveState { get; private set; } public SkeletonStateEngage _engageState { get; private set; } public..

2D RPG - (8) 적을 위한 세팅

이번에는 플레이어를 공격할 적을 만들어보겠습니다.그전에 플레이어와 적은 어느정도 공통적으로 사용하는 부분이 존재합니다.이를 해결하기 위해 플레이어와 적 모두 공통적으로 상속받는 클래스를 하나 만들겠습니다. 1) 플레이어와 적의 공통 부모인 BaseCharacterControllerpublic class BaseCharacterController : MonoBehaviour{ [Header("Collision Info")] [SerializeField] protected Transform _groundCheck; [SerializeField] protected float _groundCheckDistance; [SerializeField] protected Transf..

2D RPG - (7) 무한반복되는 배경 만들기

이번에는 플레이어를 움직일 때마다 같이 무한히 반복되는 맵을 만들어보겠습니다.구성은 다음과 같습니다.  빈 게임 오브젝트인 Background를 만들고그 아래에 배경 역할을 하는 두개의 이미지를 가져옵니다.각각 Layer Order를 알맞게 설정하여 어떻게 보여질지를 결정하겠습니다. 이때 두개의 이미지를 각각 2개씩 복사하여 복사한 이미지들을 원본 이미지의 자식으로 배치합니다.배치하는 정도는 x축으로 40씩 간격을 잡겠습니다.즉, 원본은 (0,0,0) / 복사본1은 (-40, 0, 0) / 복사본2는 (40, 0, 0)으로 잡겠습니다. 그리고 원본에 적용할 스크립트를 작성하겠습니다. 1) 스크립트public class ParallaxBackground : MonoBehaviour{ [Serializ..

2D RPG - (6) Tilemap을 통한 배경 그리기 + Cinemachine

1) Tilemap2D 플랫포머 게임에서 배경을 만들기 위해서우선 Hiearchy 창에서 우클릭 후에 2D - Tilemap - Renctangular를 생성하겠습니다.총 2개를 생성하고 각각 Ground와 Background라고 이름붙이겠습니다. Ground는 플레이어와 상호작용할 지형지물의 역할을 수행하게 됩니다.그리고 Background는 플레이어와 관계없는 배경의 역할을 수행할 예정입니다. 따라서 설정은 각기 다른데, 각각 다음과 같습니다. Ground의 설정은 다음과 같습니다. 물리 설정을 수행해야 하므로 Rigidbody2D 컴포넌트를 추가하고 설정을 Static으로 하여 고정시키겠습니다.그 이후 Tilemap에 적용할Tilemap Collider2D와 물리 시스템과 상호작용할 Composit..