unity-2d rpg 29

2D RPG - (15 - 4) 단검 투척 스킬 구현_04

이번 포스트에서는 이전에 만든 단검 투척 스킬을 조금 더 개선해보겠습니다.단검이 날아갈 때 시각적으로 돋보이게 개선하고단검이 적중한 후 다시 회수할 수 있도록 만들어보겠습니다. 1) PlayerControllerpublic class PlayerController : BaseCharacterController{ . . . // Skill Info . . . public GameObject _sword; . . . public void AssignNewSword(GameObject newSword) { _sword = newSword; } public void ClearTheSword() { Destroy(_sword); } . ..

2D RPG - (15 - 3) 단검 투척 스킬 구현_03

이번 포스트에서는 단검 투척 시에 단검의 궤적을 그리고 궤적대로 날아가도록 구현햐보겠습니다.따라서 기존의 단검 투척 스킬 그 자체를 의미하는 클래스인 SkillThrowingSword의 로직을 수정합니다. 1) SkillThrowingSwordpublic class SkillThrowingSword : SkillTemplate{ [Header("Skill Info")] [SerializeField] private GameObject _swordPrefab; [SerializeField] private Vector2 _launchForce; [SerializeField] private float _swordGravity; private Vector2 _finalD..

2D RPG - (15 - 2) 단검 투척 스킬 구현_02

이번 포스트에서는 단검 투척 스킬에서 단검을 위한 스크립트를 구현해보겠습니다. 1) SkillThrowingSwordControllerpublic class SkillThrowingSwordController : MonoBehaviour{ private Animator _animator; private Rigidbody2D _rigidBody2D; private CircleCollider2D _circleCollider2D; private PlayerController _playerController; private void Awake() { _animator = GetComponentInChildren(); _rigidBody2D = GetCom..

2D RPG - (15 - 1) 단검 투척 스킬 구현_01

이번 포스트에서는 캐릭터의 스킬 중에서 단검을 투척하는 스킬을 구현해보겠습니다.우선, 캐릭터가 단검을 투척하는 동작을 수행할 수 있도록 설정하는 과정과 구성을 알아보겠습니다. 1) 사용하는 요소1) 단검 투척 스킬을 사용하기 위한 액션 2) 단검 조준 / 단검 투척 / 단검 회수의 3개의 애니메이션 3) 단검 투척시 Instantiate 함수로 생성할 단검 프리팹 4) 단검이 박히거나 / 단검이 움직이는 동안 연출될 단검의 애니메이션 2) 애니메이터의 구성1) Player의 애니메이터 2) 단검(=Sword)의 애니메이터 위와 같이 필요한 구성을 준비하였습니다.이제 코드로 넘어가보겠습니다. 3) 코드3 - 1) PlayerStateAimSwordusing System.Collections;using Sy..

2D RPG - (14) 분신술 스킬 구현

이번 포스트에서는 첫번째 스킬 중 분신술을 구현해보겠습니다.분신술을 위한 키를 따로 설정하지 않아 대쉬에 연동하여 발동하는 스킬로서,분신은 적을 발견하면 적을 공격하게 됩니다. 분신술은 다음의절차에 의해 수행됩니다.플레이어가 입력하면 SkillManager에 의해 분신술을 수행수행된 분신술에서 이전에 만들고 설정해놓은 분신 Prefab을 생성분신 Prefab에 설정된 컴포넌트에 의해 로직을 수행위의 절차에 맞춰 코드를 알아보겠습니다. 1) SkillCloningpublic class SkillCloning : SkillTemplate{ [Header("Clone Info")] [SerializeField] private GameObject _clonePrefab; [Serialize..

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..