유니티 48

유니티 입력 처리 심화 - (12) UI 입력

이번 포스트에서는 새로운 Input System을 사용한 UI 입력을 처리해보도록 하겠습니다.우선, 두개의 버튼을 생성해보도록 하겠습니다.생성하면 다음과 같이 Event System 오브젝트가 자동으로 생성되는 것을 볼 수 있습니다. 1) Event System이란?UI 요소를 생성한 후에 자동으로 생성되는 EventSystem은 입력과 UI 요소를 연결해주는 오브젝트입니다.생성된 EventSystem에서 기본적으로 총 3개의 컴포넌트가 있는데,각각 Transform, Event System, 그리고 Input System UI Input Module입니다. 이중에서 Input System UI Input Module에서새로운 Input System을 사용하게끔 설정하면 기본적인 Action Asset을..

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

유니티 입력 처리 심화 - (11) Player Input 컴포넌트 - Invoke C# Events

이번 포스트에서는 Unity의 PlayerInput 컴포넌트를 사용하여Input System을 사용하는 4가지 방법 중에서 4번째인 Invoke C# Events를 알아보겠습니다. 이전의 포스트와 동일하게 옵션을 Invoke C# Events로 변경하도록 하겠습니다.변경하면 설정 창이 다음과 같이 변경되는 것을 볼 수 있습니다. Invoke C# Event와 Invoke Unity Event 방식의 가장 큰 차이점은 입력을 통해 호출하는 콜백 함수를 C# 스크립트에서 연결하느냐 유니티 에디터에서 연결하느냐입니다. 이제 Invoke C# Event의 사용 방법을 예제를 통해 알아보겠습니다.1) Invoke C# Events 사용예제public class InvokeCSharpEvents : MonoBeha..

유니티 입력 처리 심화 - (10) Player Input 컴포넌트 - Invoke Unity Events

이번 포스트에서는 Unity의 PlayerInput 컴포넌트를 사용하여Input System을 사용하는 4가지 방법 중에서 3번째인 Invoke Unity Events를 알아보겠습니다. 기존의 프로젝트에서 사용하던 옵션을 Invoke Unity Events로 변경하도록 하겠습니다.변경하면 기본적으로 다음과 같이 나타나는 것을 볼 수 있습니다. 이런 상황에서 현재 사용중인 Action Asset에서 기본적으로 사용하는 Action Map이InGround이므로, InGround 패널을 열어보겠습니다. 이 경우에 Action Map에 정의된 Input Action들도 나타나는 것을 볼 수 있습니다.정리하자면 다음과 같이 정리할 수 있습니다.- Invoke Unity Events에 관련한 간단한 정리Invoke..

유니티 입력 처리 심화 - (9) Player Input 컴포넌트 - Broadcast Messages

이번 포스트에서는 Player Input 컴포넌트를 통해 Input System을 사용하는 4가지 방법 중에서두번째인 Broadcast Messages를 알아보겠습니다. Broadcast Messages의 경우, 동작하는 방식이 Send Message와는 크게 차이가 없지만수행하는 콜백 함수가 Player Input 컴포넌트를 가진 오브젝트가 아닌Player Input 컴포넌트를 가진 오브젝트의 자식 오브젝트의 것이라는 차이가 있습니다. 즉, 정리하자면 Broadcast Messages 방식은자식 오브젝트의 함수를 호출하는 것에서 Send Messages와 큰 차이가 존재합니다. 이제 예제를 통해 사용하는 방법을 알아 보도록 하겠습니다. 1) PlayerInput 컴포넌트 - Broadcast Messa..

유니티 입력 처리 심화 - (8) Player Input 컴포넌트 - Send Messages

이번 포스트에서는 Player Input 컴포넌트를 통해 Input System을 사용하는 4가지 방법 중에서첫번째로 Send Messages를 알아보겠습니다. Player Input 컴포넌트를 추가한 후에,Behavior 항목에서 Send Messages로 설정하였습니다.  위와 같이 설정한 Input Action Asset - Action Map 아래의 기본적인 Input Action들 외에도추가적으로 만든 Input Action들이 보이는 것을 확인할 수 있습니다. Send Messages 방식은 다음과 같이 동작합니다.입력 이벤트에 따라 호출할 함수의 이름 규약은 On + Input Action명으로 지어집니다.이때, 내부적으로 GameObject.SendMessages 메서드를 통해PlayerI..

유니티 입력 처리 심화 - (7) Player Input 컴포넌트를 통한 입력 처리

이번 포스트에서는 유니티에서의 입력을 처리하는 4가지 단계 중에서 마지막 단계인Player Input 컴포넌트를 사용하여 입력을 설정하는 방법을 알아보겠습니다.Player Input 컴포넌트는 다음과 같이 동작합니다.  Player Input 컴포넌트를 이용한 입력 처리 방법은 기존에 사용하던 키 대신, 다른 키와 입력 함수를 연결하는 리바인딩(Rebinding)이 가능하므로상업적인 게임에서 사용하기 매우 적합합니다. 우선, Player Input 컴포넌트를 오브젝트에 추가해보겠습니다.여기서 추가되는 하나의 Player Input 컴포넌트는 플레이어 한 명을 의미합니다.추가한 Player Input 컴포넌트는 다음과 같이 구성되어 있습니다.  1) Player Input 컴포넌트의 구성우선적으로 사용할 ..

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