유니티 48

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

유니티 입력 처리 심화 - (6) Action에 대한 추가적인 정보

이번 포스트에서는 이전에 알아본 Action의 Interaction과 Processor 외에도,Action에 대한 추가적인 정보를 한번 다뤄보겠습니다.Interaction이나 Processor 만큼 무거운 내용이 아니니 가볍게 알아보겠습니다.  1) Started VS PerformInput System에서 입력을 하는 경우에 함수를 호출하는 것은 2가지 방식으로 분리가 가능합니다.바로 started와 performed로 구분할 수 있습니다. 이 둘을 구분하는 기준이 바로 Interaction입니다.둘은 다음을 기준으로 진행합니다.Started : Action에 연결된 키를 누르는 경우 진행Performed : Action에 연결된 모든 Interaction이 완료되는 경우 진행따라서 Started 이후..

유니티 입력 처리 심화 - (5) Action의 Processor

Action에 사용하는 Interaction 말고 이번 포스트에서는 Processor에 대해 알아보겠습니다.Interaction이 입력키가 동작하는 방식을 설정한다면,Processor는 입력 값을 변경하는 용도로 사용합니다. Interaction과 Processor는 Input에 개별적으로 바인드될 수 있는데,따라서 원하는 Action에만 특정한 Interaction이나 Processor가 동작하도록 설정할 수 있습니다. Processor는 Action의 타입인 Control Type에 의존적입니다.따라서 Any 타입의 경우 어떠한 Processors든 사용할 수 있으므로 특히 주의해야 합니다. 그리고 특히 중요한 것은 Processor는 중복 사용이 가능하다는 것입니다.이때 위에서 아래의 순서대로 적용..

유니티 입력 처리 심화 - (4) Action의 Interaction

이번 포스트에서는 유니티의 새로운 입력 시스템인 Input System의Action에 설정가능한 Interaction에 대해 알아보겠습니다. Interaction은 입력 시에 Input Event(=콜백함수)를 수행하기 전까지의 설정을 의미합니다.Interaction은 Aciton의 다음 옵션에서 설정할 수 있습니다.  Interaction의 경우 총 5개의 설정값이 존재합니다. 이번 포스트에서는 이 5개의 설정값들에 대해 한번 알아보겠습니다. 1) Hold Hold에서는 Hold Time을 설정하면,키를 입력하고 설정한 Hold Time 이후에 Action에 연결된 이벤트 함수를 호출합니다.Hold Time을 2초로 설정한 뒤에 Save Asset을 하여 저장하였습니다. 이후 실행결과를 보겠습니다.  ..

유니티 입력 처리 심화 - (3) Action Asset 방식_02

이전 포스트에서는 Action Asset의 세부사항과 구성에 대해 알아보았습니다.이번 포스트에서는 본격적으로 Action Asset을 C# 스크립트에서 사용하는 방식에 대해 알아보겠습니다.스크립트에서 Action Asset을 사용하는 방식은 총 2가지로 구분할 수 있습니다. 1) Inspector 참조를 통한 사용사용하는 코드는 다음과 같습니다.public class InspectorRef : MonoBehaviour{ // Action Asset public InputActionAsset actionAsset; // Action Asset 아래의 Action Map private InputActionMap inGround; // Action Map 아래의 Action p..

유니티 입력 처리 심화 - (3) Action Asset 방식_01

지난 포스트에서는 임베디드 방식을 통해 입력을 처리하는 방식을 배워보았습니다.임베디드 방식의 경우, 입력 장치에서 받아온 값을 바로 C# 스크립트로 처리할 수 있어구현이 간단하고 편리하지만, 게임의 규모가 커질 수록입력을 다양한 방법으로 처리하지 못한다는 단점이 있습니다. 이번 포스트에서는 기존의 간단한 게임에서의 입력 처리 방식이 아닌규모가 있는 게임에서의 입력 처리 방식 중 하나인 Action Asset을 통한 입력 처리를 알아보겠습니다. 1) Action Asset Action Asset은 위와 같이 동작하게 됩니다.정확히 말하면, Action Asset이라는 입력을 처리하는 명세서를 만들고해당 명세서에서 입력 동작 방식 + 입력 처리 방법 + 입력 반환 값등을 규정할 수 있습니다. 2) Actio..

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