๋ฐ”๋กœ ๋ฐ‘์˜ ์Šคํฌ๋ฆฐ์ƒท์ด ActorController ์Šคํฌ๋ฆฝํŠธ๊ตฌ์š”


using System;

using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class ActorController : MonoBehaviour

{

ย  ย  public enum InputState

ย  ย  {

ย  ย  ย  ย  PRESSED,

ย  ย  ย  ย  HOLD,

ย  ย  ย  ย  RELEASED

ย  ย  };


ย  ย  public enum InputKey

ย  ย  {

ย  ย  ย  ย  NORMALATK,

ย  ย  ย  ย  DODGE,

ย  ย  };


ย  ย  [SerializeField] Actor _useActor;


ย  ย  [Header("Move Key")]

ย  ย  [SerializeField] KeyCode _left;

ย  ย  [SerializeField] KeyCode _right;

ย  ย  [SerializeField] KeyCode _front;

ย  ย  [SerializeField] KeyCode _back;


ย  ย  [Header("Action Key")]

ย  ย  [SerializeField] KeyCode _keyNormalAtk;

ย  ย  [SerializeField] KeyCode _keyDodge;


ย  ย  void Update()

ย  ย  {

ย  ย  ย  ย  CheckMoveDirection();

ย  ย  ย  ย  CheckActionKey(_keyNormalAtk, _useActor.OnNormalAtk);

ย  ย  ย  ย  CheckActionKey(_keyDodge, _useActor.OnDodge);

ย  ย  }


ย  ย  void CheckMoveDirection()

ย  ย  {

ย  ย  ย  ย  int a = 0, b = 0, c = 0, d = 0;


ย  ย  ย  ย  a = Input.GetKey(_left) ? 1 : 0;

ย  ย  ย  ย  b = Input.GetKey(_right) ? 1 : 0;

ย  ย  ย  ย  c = Input.GetKey(_front) ? 1 : 0;

ย  ย  ย  ย  d = Input.GetKey(_back) ? 1 : 0;


ย  ย  ย  ย  Vector3 result = new Vector3(b - a, 0.0f, c - d);

ย  ย  ย  ย  _useActor.MovingCheck(result);

ย  ย  }


ย  ย  void CheckActionKey(KeyCode key, Action<InputKey, InputState> inputAction)

ย  ย  {

ย  ย  ย  ย  if (Input.GetKeyDown(key))

ย  ย  ย  ย  ย  ย  inputAction(key == _keyNormalAtk ? InputKey.NORMALATK : InputKey.DODGE , InputState.PRESSED);


ย  ย  ย  ย  if (Input.GetKey(key))

ย  ย  ย  ย  ย  ย  inputAction(key == _keyNormalAtk ? InputKey.NORMALATK : InputKey.DODGE, InputState.HOLD);


ย  ย  ย  ย  if (Input.GetKeyUp(key))

ย  ย  ย  ย  ย  ย  inputAction(key == _keyNormalAtk ? InputKey.NORMALATK : InputKey.DODGE, InputState.RELEASED);

ย  ย  }

}



๋ฐ‘์˜ ์Šคํฌ๋ฆฐ์ƒท์ด Actorย ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค


using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class Actor : MonoBehaviour

{

ย  ย  public virtual void MovingCheck(Vector3 moveDir) { }

ย  ย  public virtual void OnNormalAtk(ActorController.InputKey key, ActorController.InputState state) { }

ย  ย  public virtual void OnDodge(ActorController.InputKey key, ActorController.InputState state) { }

}


์—ฌ๊ธฐ์„œ ์ € result์— ๊ฐ’์ด ๊ณ„์† 0์ด๋˜๋ฐ ์™œ ๊ทธ๋Ÿฌ๋Š”์ง€ ์•Œ๋ ค์ฃผ์‹ค ๋ถ„ ๊ณ„์‹ ๊ฐ€์š”?? CheckMoveDirection ํ•จ์ˆ˜๊ฐ€ ์—…๋ฐ์ดํŠธ์—์„œ ๊ณ„์† ์‹คํ–‰๋˜๋ฉด์„œ ๊ฐ๊ฐ์˜ a,b,c,d ํ‚ค๋ฅผ ๊ณ„์† ํ™•์ธํ•˜๊ณ  ์žˆ๋Š”๊ฑฐ ์•„๋‹Œ๊ฐ€์š”??