[๋ณธ ํฌ์คํ ์ Youtube ๊ณจ๋๋ฉํ๋์
'์ ๋ํฐ ๋ฑ์๋ผ์ดํฌ' ๊ฐ์ ์์์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค.]
ํ๋ ์ด์ด ์ด๋ ๋ฐฉ๋ฒ์ 3๊ฐ์ง๊ฐ ์๋ค.
// 1. ํ์ ์ค๋ค
rigid.AddForce(inputVec);
// 2. ์๋ ์ ์ด
rigid.velocity = inputVec;
// 3. ์์น ์ด๋
rigid.MovePosition(rigid.position + inputVec);
์ด๋ฒ์ ๊ฐ๋ฐํ ๋ก๊ทธ๋ผ์ดํฌ RPG ๊ฒ์์ 3๋ฒ์งธ ์ด๋์ธ ์์น ์ด๋์ ๊ธฐ๋ฐ์ผ๋ก ๋ฌผ๋ฆฌ์ ์ธ ์ด๋์ ํ๋ค.
ํ์ง๋ง, ์ ๋ฌํ ์์น ์ด๋ ์ฝ๋๋ง์ ์ฌ์ฉํด์ ์คํํ๋ฉด ์บ๋ฆญํฐ์ ์์ง์์ ๋งค์ฐ ๋น ๋ฅธ ์๋๋ก ์์ง์ด๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ , ๊ฐ ์ฌ์ฉ์์ ํ๋ ์๋ง๋ค ์๋ ๋ํ ๋ฌ๋ผ์ง์๋ ์๋ค.
๊ทธ๋ ๊ธฐ์ ์ด๋ ํ ํ๋ ์ ํ๊ฒฝ์์๋ ๋๊ฐ์ ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ์์ง์ผ์ ์๋๋ก ์์ ์ด ํ์ํ๋ค.
Vector2 nextVec = inputVec.normalized * speed * Time.fixedDeltaTime;
rigid.MovePosition(rigid.position + nextVec);
normalized : ๋ฐฑํฐ๊ฐ์ ํฌ๊ธฐ๊ฐ 1์ด ๋๋๋ก ์ขํ๊ฐ ์์ ๋ ๊ฐ
fixedDeltaTime : ๋ฌผ๋ฆฌ ํ๋ ์ ํ๋๊ฐ ์๋นํ ์๊ฐ
inputVec.normalized๋ฅผ ํตํด์ ๋๊ฐ์ ์ผ๋ก ์ด๋ํ๋ ์๋๋ ๊ฐ์ ๊ฐ์ผ๋ก ๋ง์ถฐ์ค๋ค.
๊ทธ๋ฆฌ๊ณ public์ผ๋ก ์ค์ ํ speed ๊ฐ์ ๊ณฑํด์ฃผ๊ณ , Time.fixedDeltaTime์ ๊ณฑํ๋ฉด ๋๋ค.
(Update ํจ์์์๋ DeltaTime์ ์ฌ์ฉํ๋ฉด ๋๋ค.)
์ด๋ ๊ฒ ์์ ์ํ๊ณ ์ฝ๋๋ฅผ ์คํํด๋ณด๋ฉด ์บ๋ฆญํฐ๊ฐ ์ ๋นํ ์๋๋ก ๋ฌผ๋ฆฌ์ ์ธ ์ด๋์ ํ๋ค.
ํ์ง๋ง, ์บ๋ฆญํฐ๊ฐ ๋ฏธ๋๋ฌ์ง๋ฏ์ด ์์ง์ด๋๊ฑธ ํ์ธํ ์ ์๋ค.
๊ทธ ์ด์ ๋ GetAxisํจ์๋ ๋ณด์ ์ด ๋ค์ด๊ฐ ์ ๋ ฅ ๊ฐ์ด ๋ถ๋๋ฝ๊ฒ ๋ฐ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ ๊ธฐ์ GexAxisRaw๋ฅผ ์ฌ์ฉํ๋ฉด (-1, 0, 1) ์ด๋ ๊ฒ ๊ฐ์ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ํค๋ณด๋์์ ์์ด ๋ผ์ง๋ฉด ๋ฐ๋ก ๋ฉ์ถ๊ฒ ๋๋ค.
์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ๋ ๋ฌผ๋ฆฌ ์ด๋์ด ๊ฐ๋ฅํ์ง๋ง InputManager๋ ์ ๋ํฐ์ ์ค๋๋ ์ธํ ๋ฐฉ์์ด๋ค.
๊ทธ๋ ๊ธฐ์ InputSystem์ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋๊ฒ์ ์์์ผ ํ๋ค.
๋จผ์ InputSystem์ ์ค์น๋ฅผ ์งํํด์ผ ํ๋ค.
Windows > Package Manager > Unity Registry ๋ฅผ ๋ค์ด๊ฐ์ InputSystem์ ๋ค์ด๋ฐ๋๋ค.
๋ค์ด์ด ์๋ฃ๋๋ฉด ์ ๋ํฐ๊ฐ ์ฌ์์ ํ๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ Player์ด๋ผ๋ ์ด๋ฆ์ Inputaction์ ์์ฑํด์ฃผ๋ฉด ์ฐฝ์ด ๋จ๊ฒ ๋๋ค.
Action Type : ๋ฒํผ ํด๋ฆญ์ธ์ง, ๊ฐ์ ๋ด๋ณด๋ด๋ ๊ฒ์ธ์ง ๊ตฌ๋ถ
Control Type : ๊ฐ์ ํ์์ ์ง์
Interactions : ์ธํ์ ํธ์ถ ํ์ด๋ฐ ์ง์
Processors : ์ธํ์ ๊ฐ์ ํ๋ณด
์ด๋ ๊ฒ ์์ ๋ InputSystem์ ํ ๋๋ก ์ฝ๋๋ฅผ ๋ง๋ค๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class Player : MonoBehaviour
{
public Vector2 inputVec;
public float speed;
Rigidbody2D rigid;
void Awake()
{
rigid = GetComponent<Rigidbody2D>();
}
void FixedUpdate()
{
Vector2 nextVec = inputVec * speed * Time.fixedDeltaTime;
rigid.MovePosition(rigid.position + nextVec);
}
void OnMove(InputValue value)
{
inputVec = value.Get<Vector2>();
}
}
๋จผ์ UnityEngine.InputSystem ๋ค์์คํ์ด์ค๋ฅผ ์ถ๊ฐํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ธฐ์กด์ ์๋ Update() ํจ์๋ฅผ ์ ๊ฑฐํ๊ณ ,
OnMove()๋ฅผ ํตํด์ ์ ๋ ฅ๋ฐ์ ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
๊ฐ์ ธ์จ ๊ฐ์ Vector2 ํํ๋ก inputVec ๋ณ์์ ๋ฃ๊ฒํ๋ฉด ๋์ด๋ค.
๋ํ, InputSystem์ ํตํด์ normalized๋ฅผ ์ค์ ํ์๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ ์ฝ๋์ ์๋ normalized๋ฅผ ์ ๊ฑฐํด๋ ๋๋ค.
์ด๋ ๊ฒ ๊ตฌ์ฑ๋ ์ฝ๋๋ก ์บ๋ฆญํฐ ๋ฌผ๋ฆฌ ์ด๋์ด ๊ฐ๋ฅํ๋ค.
'๐ฎ Unity > Project' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Unity] ๋ก๊ทธ๋ผ์ดํฌ ์์กด RPG (5) - ๋ชฌ์คํฐ ์ํ (0) | 2024.04.17 |
---|---|
[Unity] ๋ก๊ทธ๋ผ์ดํฌ ์์กด RPG (4) - ๋ชฌ์คํฐ ๋ง๋ค๊ธฐ (0) | 2024.03.13 |
[Unity] ๋ก๊ทธ๋ผ์ดํฌ ์์กด RPG (3) - ๋ฌดํ ๋งต ์ด๋ (1) | 2024.03.10 |
[Unity] ๋ก๊ทธ๋ผ์ดํฌ ์์กด RPG (2) - 2D ์ ์ ๋๋ฉ์ด์ ์ ์ (0) | 2024.02.28 |
๋ฌผ๋ฆฌ ์ด๋ ๊ตฌํ (1) | 2023.02.12 |