๋ฐ๋ก ๋ฐ์ ์คํฌ๋ฆฐ์ท์ด 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 ํค๋ฅผ ๊ณ์ ํ์ธํ๊ณ ์๋๊ฑฐ ์๋๊ฐ์??
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
์ ํค์ฝ๋์ ์๋ ๊ฐ๋ค ๋ค ์ธ์คํํฐ ์ฐฝ์์ ๋ฃ์ด์คฌ์ด์!
์ ์ ์์ ์ผ๋ก 1๋๋ 0์ผ๋ก ๋ฐ๋๋ค์. ์ ๊ทธ๋ฌ๋ฉด ๋ค๋ฅธ๋ถ๋ถ์ ๋ฌธ์ ๊ฐ ์๋๊ฑฐ๊ตฐ์ ใ ใ
abcd ๊ฐ์ด ์ ์์ ์ผ๋ก ๋ณํ๋๋์ง ๋ถํฐ ํ์ธ - dc App
์ธ์คํํฐ ์ฝํ ์คํธ ๋ฉ๋ด์ debug๋ชจ๋ ์์ผ๋๊น ๊ทธ๊ฑธ๋ก ํ์ธํด๋ด - dc App
์ด๋ค ํค๋ฅผ ๋๋ฌ๋ ๊ณ์ ๊ฐ์ด 0์ด์ด์์ ใ ใ ์ ๊ฐ ์๊ฐํ๊ฒ ์ ํ๋ ธ๋์ง ๊ถ๊ธํด์์. CheckMoveDirection ํจ์๊ฐ ๋๋ฉด์ a,b,c,d ๊ฐ๊ฐ์ ๊ฐ๋ค์ ๋ํด์ Input.GetKey๋ฅผ ํ๋์ง ๊ณ์ ํ์ธํ๋๊ฑฐ ์๋๊ฐ์??
์ง์ญ ๋ณ์์๋ค ์ผ๋จ print๋ก abcd๋ result๋ฅผ ์ถ๋ ฅํด๋ด ๊ทธ๊ฒ ์ง๊ธ ์๋ฌด๋ฐ ๋ณ๋์ด ์๋ค๋๊ฑฐ์ง? - dc App
์ ์์ ์ผ๋ก ๋ฐ๋๋ค์. ๋ค๋ฅธ๋ถ๋ถ์ ๋ฌธ์ ๊ฐ ์์๋ค์
๊ทธ๋ฆฌ๊ณ ๊ตฌ์กฐ๋ฅผ ์ต๋ํ ๋ฒ์ฉ์ ์ด๊ฒ ํ๋ ค๊ณ ์ข ๋ ธ๋ ฅํ ๊ฒ ๊ฐ์๋ฐ key == _keyNormalAtk ? InputKey.NORMALATK : InputKey.DODGE ์ํ๋ค๊ฐ ์ฌ๊ธฐ์ ๋์ ๋ฐ์๋ฒ๋ฆฐ ๊ฒ ๊ฐ๋ค. - dc App
์ด๋ถ๋ถ์ ๋ฐ๋ก Inputkey GetInputKey(KeyCode keyCode) ๊ฐ์ ํจ์๋ก ๋นผ๊ณ ๋ด๋ถ๋ฅผ switch๋ก ๋ง๋ค์ด - dc App - dc App
ํน์ ์ค๋ก๊ฐ ์๋์๋ฉด ์ ์ฝ๋์ข 1๋1๋ก ๋ด์ฃผ์ค์ ์๋์? ๊ทธ๋ ๊ฒ ๊ธด ์ฝ๋๋ ์๋๋ฐ ํ๋ค๊ฐ ๋งํ๋๊ฒ๋ค์ด ์๋๋ฐ ๊ณ์ ๊ณ ๋ฏผํด๋ ๋ฐฉ๋ฒ์ด ์๊ฐ์๋๊ธฐ๋ ํ๊ณ ์ ์๋์ด ์๋๋์ง ๋ชจ๋ฅด๊ฒ ๋ ๋ถ๋ถ๋ค๋ ์์ด์์ ใ ใ
์ง๋ฌธ๊ธ์๋ ๋ต๋ณํด์คํ ๋๊ฐ ๊ฒ์๋ฌผ ์๋ก ํ์ ์์ ์ง๋ฌธ ํ๋๋ง๋ค ๊ฒ์๊ธ ์ฐ์ - dc App
๋ต ์๊ฒ ์ต๋๋ค. ๊ทผ๋ฐ ๋๋ฌด๋ง์ดํ๋ฉด ๊ฒ์๊ธ ๋๋ฐฐํ๋๊ฒ ๊ฐ์์ ์ค๋์ ์กฐ๊ธ๋ง ํ ๊ฒ์ ใ ใ
๊ทธ๋ฆฌ๊ณ CheckActionKey๋ if~elseif~elseif๋ก ๊ตฌ์ฑํ๋์ง ๊ฐ if๋ฌธ์์์ ๋ฆฌํด์ ํ๋์งํด์ ๋ถํ์ํ ๋น๊ต์ฐ์ฐ์ ์ ์ธํ๊ณ ๋น๊ต ์์๋ ๊ฐ์ฅ ์ฆ๊ฒ ์ผ์ด๋๋ GetKey๊ฐ ์์ ์ค๋๋ก ํ๋ ด - dc App