๋ฆฌํฉํ ๋ง(Refactoring) ๊ฒฐ์
์ค๋๋ง์ ๋ค์ Unity ํ๋ก์ ํธ ๊ธ์ ์ฌ๋ฆฌ๊ฒ ๋์๋ค์. 4ํ๋ 1ํ๊ธฐ๊ฐ ๋๋ ๋ฐฉํ์ด ์๊ณ , ์ ์ ํด์ ๊ธฐ๊ฐ์ ๊ฐ์ก์์ต๋๋ค. ์ ๊น ์ฌ๊ณ ๋ ๋ค์๋ C++ ๋ฌธ๋ฒ ๊ณต๋ถ, Python์ผ๋ก ๋ฐฑ์ค ํ๊ธฐ, Unreal Engine5 ๋ฐฐ์ฐ๋ ๋ฑ์ผ๋ก ์๊ฐ์ ๋ณด๋์ต๋๋ค. ๊ทธ๋ฌ๋ค๊ฐ ๋ฏธ๋ฃจ๊ณ ๋ฏธ๋ฃจ๋ ๊ธฐ์กด ์นด๋ก (Charon) Unity ํ๋ก์ ํธ๋ฅผ ์ฌ์ฌ ์ ๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค๋๋ผ๊ตฌ์.
๊ธฐ์กด์ ์์ฑํ๋ ์์ค์ฝ๋ ๊ตฌ์กฐ๋ ๋๋ฌด ๋ง์ ์ ๋ค์๊ณ , ์ด๋๋ก ๊ฐ๋ค๊ฐ๋ ์คํ๊ฒํฐ ์ฝ๋๊ฐ ๋๋ ๊ฑด ์๊ฐ ๋ฌธ์ ๋ผ๋ ๊ฒ ๋ณด์์ต๋๋ค. ๊ทธ๋์ ์ด๋ป๊ฒ ํ์ง ํ๋ค๊ฐ ๊ฒฐ๊ตญ ๋ฆฌํฉํ ๋ง์ ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ด์.
์ ์ผ ๋จผ์ ์์ ์ ์์ํ๊ธฐ๋ก ํ ๊ฑด ์ ๋ ฅ ์์คํ ์ด์์ต๋๋ค. ์ด์ ์ ์ปดํฌ๋ํธ๋ณ๋ก ํด๋์ค๋ฅผ ๋๋ ๊ฒ๊น์ง๋ ์ข์์ผ๋, ๊ฐ์๋ก ์ ๋๋์๋์ง ๋ชจ๋ฅด๊ฒ ์๋ ๊ตฌ์กฐ๋ผ์ ์ ์ผ ๋จผ์ ๋ฐ๊พธ๊ธฐ๋ก ๊ฒฐ์ฌํ์ต๋๋ค.
์ด๋ฒ์๋ Unity Engine์ ์๋ก ๋์ ๋์๋ New Input System์ ์จ๋ณด๊ธฐ ์ํด, ์ดํ ์ ๋ ๊ณต๋ถ๋ฅผ ํ์ต๋๋ค.
์์งํ ๋งํด ๋ด์ฉ์ด ์ข ์ด๋ ต๋๊ตฐ์. ์์ง๊น์ง ์์ด๋ก ๋ ๋ ํผ๋ฐ์ค๋ฅผ ์ฝ๋ ๊ฒ์ ์ต์ํ์ง ์๊ธฐ์ ํ๊ธ ๋ฒ์ญ๋ ๊ฐ์ด ๋ณด๋ฉฐ ๊ณต๋ถํ๊ธด ํ์ง๋ง, ํ๊ธ ๋ฒ์ญ์ ๊ทธ ํ๊ณ ๋๋ฌธ์ ๋งค๋๋ฌ์ด ํด์์ด ํ๋ค์์ต๋๋ค.
(๊ฐ๋ฐ์์๊ฒ ์์ด๊ฐ ์ค์ํ ์ด์ ์ธ ๊ฒ ๊ฐ๋ค์.)
์ง์ ์จ๋ณด๋ฉฐ ์ค์ ๋ก ์ ์ฉํด๋ณด๋ ๊ฒ ๋ ๋นจ๋ฆฌ ์ค๋ ฅ์ด ๋๊ฒ ๋ค ์ถ์ด์, ๊ทธ๋ฅ ๋ฐ๋ก ์งํํ์ต๋๋ค.ใ ใ ใ ...
1. New Input System ๋์ ํ๊ธฐ
Unity์์ ๊ธฐ์กด์ ๋ ธํํ๋ ์ ๋ ฅ ์์คํ ์ ๊ฐ์ ํ๊ธฐ ์ํด, Unity 2019.1 ๋ฒ์ ๋ถํฐ ์ถ์ํ ๊ธฐ๋ฅ์ ๋๋ค. ๊ธฐ์กด Old Input System์ ํ๋ซํผ์ ๋ณ๊ฒฝํ์ฌ ๊ฒ์์ ์ถ์ํ๋ ค๋ฉด, ์ ๋ ฅ๊ณผ ๊ด๋ จํ์ฌ ์์ฑํ๋ ์์ค์ฝ๋๋ค์ ๋ค์ ๊ณ ์ณ์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์์์ง์. ๋ํ ์ ๋ ฅ ํค๋ค์ด ๋์ด๋ ์๋ก Update() ํจ์ ํฌ๊ธฐ๊ฐ ๋ฐฉ๋ํด์ ธ ์์ค์ฝ๋๊ฐ ์ง์ ๋ถํด์ง๋ ๋ฌธ์ ์ ๋ ์กด์ฌํ์ต๋๋ค.
์ด๋ฐ ๋ฌธ์ ์ ๋ค์ ๋ํด ํ๋ซํผ ๊ฐ ํค ๋ฐ์ธ๋ฉ์ด ์์ ๋กญ๊ณ , ์ค์๊ฐ ์ ๋ ฅ ์ฒดํฌ๊ฐ ์๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ ๋ ฅ ์ฒดํฌ ๋ฐฉ์์ผ๋ก ๊ฐ์ ํ ๊ฒ์ด ๋ฐ๋ก New Input System์ ๋๋ค. ๋ํ, ํธํ์ฑ์ ์ํด ๊ธฐ์กด ๋ ๊ฑฐ์ ์ ๋ ฅ ๋ฐฉ์๊ณผ New Input System ๋ฐฉ์์ ๋ ๋ค ์ฌ์ฉ์ด ๊ฐ๋ฅํ ๊ฒ๋ ์ฅ์ ์ ๋๋ค. ๐New Input System์ ๋ํด ๋ค๋ฃจ๋ ๊ธ์ ๋์ค์ ๋ฐ๋ก ์ฌ๋ฆฌ๋๋ก ํ ๊ฒ์.
์ ๋ ฅ ์์คํ ๊ธฐ๋ฐ ๋ง๋ค๊ธฐ
Input Actions๋ ํ๋ก์ ํธ์ ์ค์ ์์ ์ผ๋ก, ์ ๋ ฅ๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ค์ ํ๋๋ก ๋ด์ ๊ด๋ฆฌํ๋ ํ์ผ์ ๋๋ค. ์ ๋ "PlayerInputActions"๋ผ๋ ์ด๋ฆ์ผ๋ก ํ๋ ์์ฑํด์ฃผ์์ต๋๋ค.
ํ๋ ์ด์ด๊ฐ ์ฌ์ฉํ ์ ๋ ฅ ํค๋ค์ ์ ์ํด์ผ ํ๋ฏ๋ก Actions Maps์ "Player"๋ผ๋ ์ด๋ฆ์ผ๋ก ํ๋ ์์ฑํด ์ฃผ์์ต๋๋ค.
์ฐ๋ฆฌ ๊ฒ์์ WASDํค๋ก ์บ๋ฆญํฐ๋ฅผ ์์ง์ด๋ฏ๋ก, "Move"๋ผ๋ Action์ ์์ฑํ์ฌ Action Type์ Value๋ก ์ง์ ํด์ฃผ์์ต๋๋ค. ์บ๋ฆญํฐ๊ฐ ์๋ก ์์ง์ด๋ ๊ธฐ๋ฅ์ ์๊ธฐ์ 2์ฐจ์ ๋ฐฉํฅ ์ ๋ณด๋ง ์๋ฉด ํ๋ฉด ์์์ ์บ๋ฆญํฐ๋ฅผ ์์ง์ผ ์ ์์ต๋๋ค.
Control Type์ Vector2๋ก ์ค์ ํด์ค๋๋ค.
๋ฐ์ธ๋ฉ(Binding)์ ๋ํด์๋ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํด์ฃผ์์ต๋๋ค. ์บ๋ฆญํฐ๊ฐ 8๋ฐฉํฅ์ผ๋ก๋ง ์์ง์ด๋ฉด ๋๊ณ , ๋๊ฐ์ ์ผ๋ก ์ด๋ํ ๋ ๋ ๋น ๋ฅด๊ฒ ์ด๋ํ๋ฉด ์ ๋๋ฏ๋ก Mode๋ฅผ Digital Normalized๋ก ์ค์ ํด์ฃผ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ ํค๋ค์ ์ฐ๊ฒฐํด์ฃผ๋ฉด ๋๊ฒ ์ง์.
์ฐ์ ์ด๋๊ณผ ๊ด๋ จํด์๋ ์ด ์ ๋ ์ธํ ๋ง ์์ผ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ํค ์ธํ ๋ค์ ๋ฐ์คํฌํ PC ํ๋ซํผ์์ ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก ๋ฐ๋ก ์คํค๋ง๋ฅผ ์ ์ฅํด์ฃผ์์ต๋๋ค.
.
๋์ค์ ํ๋ซํผ์ด ์ ์ฐจ ๋์ด๋๋ฉด ์ด๋ฐ ์์ผ๋ก ํ๋์ฉ ์คํค๋ง๋ฅผ ๋๋ ค์ฃผ๊ณ , ๋น๋ํ ๋ ์ํ๋ ํ๋ซํผ ์คํค๋ง๋ฅผ ๊ณจ๋ผ ๋น๋๋ง ํด์ฃผ๋ฉด ์์ค์ฝ๋๋ฅผ ๋ฐ๋ก ๊ฑด๋๋ฆด ํ์๊ฐ ์์ต๋๋ค. New Input System์ ๋ํ ๋ด์ฉ ์ค๋ช ์ ์๋ตํด์ ์ดํด๊ฐ ์ ์ ๊ฐ์ค ์๋ ์๊ฒ ๋ค์. ๋์ค์ ๊ธ์ ๋ฐ๋ก ๋ค๋ฃจ๋๋ก ํ๊ฒ ์ต๋๋ค. ๊ถ๊ธํ์ ๋ถ๋ค์ ๐์ฌ๊ธฐ์ ๋ ํผ๋ฐ์ค๋ฅผ ๋จ๊ฒจ ๋๋๋ก ํ ๊ฒ์.
Auto-Save๋ฅผ ์ฒดํฌํ ๋ค, ์ฐฝ์ ๋ซ์์ค๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ๋ ์ด์ด ์บ๋ฆญํฐ ์ค๋ธ์ ํธ์๋ค๊ฐ Player Input ์ปดํฌ๋ํธ๋ฅผ ๋ถ์ฐฉํด์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ Actions์๋ ์์์ ๋ง๋ PlayerInputActions๋ฅผ ๋ฃ์ด์ฃผ๊ณ , ๋๋จธ์ง๋ ๋ค์๊ณผ ๊ฐ์ด ์ธํ ํด์คฌ์ต๋๋ค.
์ด์ ์์ค์ฝ๋๋ฅผ ์์ฑํ ์ฐจ๋ก๋ค์!
2. ์บ๋ฆญํฐ ์ด๋ ๊ตฌํํ๊ธฐ
๋ฐ์ดํฐ์ ๊ด๋ จ๋ ๋ด์ฉ๋ค์ Player ์คํฌ๋ฆฝํธ์, ์ ๋ ฅ ๋ฐ ์ปจํธ๋กค์ ๊ดํ ๋ด์ฉ๋ค์ PlayerController ์คํฌ๋ฆฝํธ์ ๊ฐ๊ฐ ๋ถ๋ฆฌํ์ฌ ์์ฑํ์์ต๋๋ค.
Player ์คํฌ๋ฆฝํธ
ํ๋ ์ด์ด๋ ์ต๋ ์ฒด๋ ฅ, ํ์ฌ ์ฒด๋ ฅ, ๋ฐฉ์ด๋ ฅ, ์ด๋ ์๋, ์ฐ์ ๋์ ๊ฐ๋ฅ ํ์ ๋ฐ์ดํฐ๋ค์ ๊ฐ์ง๋๋ค.
ํจ๋ถ๋ก ๋ณ๊ฒฝ๋๋ฉด ์ ๋๋ ๋ฐ์ดํฐ๋ค์ด๊ธฐ์ ์ธ๋ถ์์๋ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ๋๋ก ์ฝ๊ธฐ ์ ์ฉ ํ๋กํผํฐ๋ก ๊ตฌ์ฑํ์ต๋๋ค.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
public float MaxHP { get { return maxHP; } }
public float CurrentHP { get { return currentHP; } }
public float Armor { get { return armor; } }
public float MoveSpeed { get { return moveSpeed; } }
public float DashCount { get { return dashCount; } }
[SerializeField] protected float maxHP;
[SerializeField] protected float currentHP;
[SerializeField] protected float armor;
[SerializeField] protected float moveSpeed;
[SerializeField] protected float dashCount;
public void OnUpdateStat(float maxHP, float currentHP, float armor, float moveSpeed, float dashCount)
{
this.maxHP = maxHP;
this.currentHP = currentHP;
this.armor = armor;
this.moveSpeed = moveSpeed;
this.dashCount = dashCount;
}
}
์๋๋ผ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉ์ ํ๋ ์ด์ด ์บ๋ฆญํฐ ์ ๋ณด๋ฅผ ์ฝ์ด ์์ ๋ก๋๋ฅผ ํด์ฃผ์ด์ผ ํ์ง๋ง, ์ง๊ธ์ ๊ทธ ๊ธฐ๋ฅ์ด ์์ผ๋ฏ๋ก Inspector ์ฐฝ์์ ํธํ๊ฒ ํ ์คํธ๋ฅผ ํ๊ธฐ ์ํด [SerializeField]๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ค์ ํด๋น ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ ๋ ์์ ํด์ฃผ๋ฉด ๋๊ฒ ์ง์.
PlayerController ์คํฌ๋ฆฝํธ์ ์ด๋ฒคํธ ํจ์ ๋ฑ๋ก
PlayerController ์คํฌ๋ฆฝํธ์์ ์ด์ ์บ๋ฆญํฐ ์ด๋ ๊ธฐ๋ฅ์ ๊ตฌํํด๋ณผ ๊ฒ๋๋ค. ๊ทธ๋ด๋ ค๋ฉด ์ฐ์ ์บ๋ฆญํฐ์ ์ด๋ ์๋ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ฐ, ์ด๊ฒ์ Player ์คํฌ๋ฆฝํธ์ ์กด์ฌํฉ๋๋ค. ๊ทธ๋์ PlayerController ์คํฌ๋ฆฝํธ๋ฅผ ์ปดํฌ๋ํธ๋ก ๋ถ์ฐฉํ๋ฉด, ์๋์ผ๋ก Player ์คํฌ๋ฆฝํธ ๋ํ ์ปดํฌ๋ํธ๋ก ๋ถ์ฐฉ๋๋๋ก [RequireComonponent()]๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem; // New Input System์ ์ฌ์ฉํ๊ธฐ ์ํด ํ์
[RequireComponent(typeof(Player))]
public class PlayerController : MonoBehaviour
{
protected Player player;
void Start()
{
player = GetComponent<Player>();
}
...
}
์ด์ ์บ๋ฆญํฐ ์ด๋ ์ ๋ ฅ๊ณผ ๊ด๋ จํ์ฌ, ์ ๋ ฅ ์์คํ ์ ๋ฑ๋กํ ํจ์๋ฅผ ํ๋ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
[RequireComponent(typeof(Player))]
public class PlayerController : MonoBehaviour
{
public Vector3 direction { get; private set; }
...
public void OnMoveInput(InputAction.CallbackContext context)
{
Vector2 input = context.ReadValue<Vector2>();
direction = new Vector3(input.x, 0f, input.y);
}
}
์ด์ ์ด OnMoveInput() ํจ์๋ฅผ Player Input ์ปดํฌ๋ํธ์ ์ด๋ฒคํธ ํจ์๋ก ๋ฑ๋กํด์ผ ํฉ๋๋ค. Events ํ ๊ธ์ ์ด์ด๋ณด๋ฉด, ์ฐ๋ฆฌ๊ฐ ์์ฑํ๋ Action Maps์ธ "Player"๊ฐ ์กด์ฌํฉ๋๋ค. Player ํ ๊ธ์ ์ด์ด๋ณด๋ฉด, ์ฐ๋ฆฌ๊ฐ ์์ฑํ๋ "Move" Action ์ด๋ฒคํธ๊ฐ ์กด์ฌํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ์์์ ๋ง๋ค์๋ ํจ์๋ฅผ ๋ฑ๋กํด์ค๋๋ค.
(Unity Event ๋ฐฉ์์ ๋ฑ๋กํ ํจ์์ ์ ๊ทผํ์ ์๊ฐ public์ด์ด์ผ Inspector ์ฐฝ์์ ๋ฑ๋ก ๊ฐ๋ฅ)
์ด์ Move Action์ ๋ฐ์ธ๋ฉํ๋ ์ ๋ ฅ ํค๋ค(WASD)๋ฅผ ๋๋ฅด๋ฉด, ์ฌ๊ธฐ์ ์ด๋ฒคํธ๋ก ๋ฑ๋กํ๋ OnMoveInput() ํจ์๊ฐ ํธ์ถ๋ฉ๋๋ค. ํ๋ ์์ ์ผ ํ ๊ฒ์ ๋๋ ์ ๋ ํ ๋ฒ, ๋์ ๋ ํ ๋ฒ ์ด๋ ๊ฒ ๋ ๋ฒ ํธ์ถ๋๋ค๋ ์ ์ ๋๋ค.
/*
์๋ฅผ ๋ค์ด ์ผ์ชฝ์ผ๋ก ๊ฐ๋ ค๊ณ Aํค๋ฅผ ๋๋ ๋ค ๋ผ๋ฉด, (-1, 0), (0, 0) ์ด๋ ๊ฒ ๋ ๋ฒ ํธ์ถ๋๋ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ ๋ฐ์ธ๋ฉ ๊ด๋ จ ์ด๋ฒคํธ(Started, Performed, Canceled ๋ฑ)๊ณผ ๊ด๋ จ ์๋๋ฐ, ์ด๊ฒ๋ ๋์ค์ ๋ค๋ฃจ๋๋ก ํ๊ฒ ์ต๋๋ค.
*/
์ด์ ์ ๋ ฅ ๊ฐ๋ค์ ๋ฐ์ ์ ์๊ฒ ๋์์ผ๋, ์ด ๊ฐ์ ํ ๋๋ก ์บ๋ฆญํฐ๋ฅผ ์์ง์ฌ ๋ณด์์ต๋๋ค. ๋ฌผ๋ฆฌ ๊ธฐ๋ฐ์ผ๋ก ์์ง์ผ ๊ฒ์ด๋ฏ๋ก RigidBody ์ปดํฌ๋ํธ๋ ์ถ๊ฐํด ์ฃผ์์ต๋๋ค.
protected const float CONVERT_UNIT_VALUE = 0.01f;
protected void Move()
{
float currentMoveSpeed = player.MoveSpeed * CONVERT_UNIT_VALUE;
LookAt();
rigidBody.velocity = direction * currentMoveSpeed + Vector3.up * rigidBody.velocity.y;
}
protected void LookAt() // ์บ๋ฆญํฐ๊ฐ ์ด๋ํ๋ ๋ฐฉํฅ์ ๋ฐ๋ผ๋ด
{
if(direction != Vector3.zero)
{
Quaternion targetAngle = Quaternion.LookRotation(direction);
rigidBody.rotation = targetAngle;
}
}
๋ค๋ง ์ด๋ ๊ฒ ์์ฑํ๊ณ ์คํํ์ฌ ํ ์คํธ ํด๋ณด๋ฉด, ํค๋ฅผ ์ฐํํ์ฌ ๋๋ฌ์ผ ์บ๋ฆญํฐ๊ฐ ์กฐ๊ธ์ฉ ์์ง์ผ ๊ฒ๋๋ค. ํ ๋ฒ ํค๋ฅผ ๋๋ฅด๊ณ ์๋๋ค๊ณ ๊ณ์ ํธ์ถ๋๋ ๊ฒ ์๋๊ธฐ ๋๋ฌธ์ด์ง์. ๊ทธ๋์ FixedUpdate()์ Move() ํจ์๋ฅผ ๋ฃ์ด ํด๊ฒฐํด ์ฃผ์์ต๋๋ค.
void FixedUpdate()
{
Move();
}
๊ทธ๋ฆฌ๊ณ ์ด๋ ์๋์ ๊ด๋ จ๋ ์ฝ๋๋ค์ด ์กฐ๊ธ ์ดํด๊ฐ ์ ๋์ค ์๋ ์๋๋ฐ, ์ค์ ๊ธฐํ์ ์์ ์ด๋ ์๋ ํ๊ฐ ๋ค์๊ณผ ๊ฐ์ด ์์ฑ๋์ด ์์ต๋๋ค.
์ด ์์น๊ฐ ์ด๋ ์ ๋์ ์๋์ธ์ง๋ฅผ ๊ฐ๋ ํ ์๊ฐ ์์ด, ๊ธฐํ์์ ์๊ธฐํ๋ฉฐ ์ค์๊ฐ์ผ๋ก ๊ฐ์ ์กฐ์ ํ๋ฉฐ ๋ง์ถ๋ค ๋ณด๋
๊ธฐํ์ ์ด๋ ์๋ 300 → Unity Rigidbody ์๋ 3 ์ ๋๋ก ๋๋ค๋ ๊ฑธ ์์์ต๋๋ค. ๋ค๋ง, ์ค์ UI ํ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ ์ด๋ ์๋๋ ๊ธฐํ์ ์ด๋ ์๋ ๊ท์น์ ๋ฐ๋ผ์ผ ํท๊ฐ๋ฆฌ์ง ์์ ๊ฒ์ด๋, ๊ทธ๋ฅ ์ฝ๋ ๋ด๋ถ์์ ๋ณํ ์์ ์ ํด์ค ๊ฒ์ผ ๋ฟ์ ๋๋ค.
// ๊ธฐํ์ ์ด๋์๋ 300 -> ๊ฒ์ ์๋ ๋ด ์ด๋์๋ 3
protected const float CONVERT_UNIT_VALUE = 0.01f;
protected void Move()
{
float currentMoveSpeed = player.MoveSpeed * CONVERT_UNIT_VALUE;
...
}
๊ทธ๋ฆฌ๊ณ ๊ณต์ค์ ๋ฌ ์ํ์์ ํ๋ ์ด์ด ์บ๋ฆญํฐ๊ฐ ์ฒ์ฒํ ๋ด๋ ค์ค๋ ๋ฒ๊ทธ๊ฐ ์์๋๋ฐ, RigidBody ์๋์ y์ถ ๋ฐฉํฅ์๋ ํ์ ๊ฐํด์ฃผ์ด์ผ ์ฌ๋ฐ๋ฅด๊ฒ ์ค๋ ฅ์ ๋ฐ์์ต๋๋ค.
rigidBody.velocity = direction * currentMoveSpeed + Vector3.up * rigidBody.velocity.y;
/* 2022-08-18 ์์ )
์ด ์ฝ๋๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉด ๊ฒฝ์ฌ๋ก ์งํ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค์.
์ถํ ๊ฒ์๊ธ์์ ํด๊ฒฐํ ์ฝ๋๋ฅผ ์์ฑํ์์ต๋๋ค.
*/
์ด์ ์คํ ํด๋ณด๋ฉด ์ ์์ง์ด๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฌธ์ ๋ฅผ ํ๋ ํด๊ฒฐํด์ค์ผ ํ๋๋ฐ, ๋ฒฝ์ ๋ถ์ด ์ด๋ํ๋ฉด ๋ฒฝ๋ฉด์ ๋ฌ๋ผ๋ถ์ด ์์ง์ด์ง ์์ต๋๋ค.
์ด๊ฒ์ ๋ฒฝ์ ์ฝ๋ผ์ด๋์ ์บ๋ฆญํฐ์ ์ฝ๋ผ์ด๋ ๊ฐ ๋ง์ฐฐ๋ ฅ์ด ๋๋ฌด ์ธ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋๋ค.
PhysicsMaterial์ ํ๋ ๋ง๋ค๊ณ , ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ ํ ์บ๋ฆญํฐ ์ฝ๋ผ์ด๋์ ๋ฃ์ด์ฃผ์์ต๋๋ค.
๊ทธ๋ฌ๋ฉด ์ด์ ๋ฒฝ์ ๋ถ์ด์ ์ด๋ํด๋ ๋งค๋๋ฝ๊ฒ ์ ์ด๋ํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๋ง๋ฌด๋ฆฌ
์๊ฐ๋ณด๋ค ๊ธ์ด ๊ต์ฅํ ๊ธธ์ด์ก๋ค์. ์ด๋ ์ ๋๋ฉ์ด์ ๊น์ง ๋ค๋ฃจ๋ ๊ฑธ ์์ฑํ๋ ค๊ณ ํ๋๋ฐ, ๋ค์ ๊ธ์์ ์์ฑํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!