C# Rookiss Part7 MMORPG : Player ์ด๋
๐โโ๏ธPlayer ์ด๋
player ์ด๋์ if(Input.GetKey.W) //transform.position += Vector3.up * Time.deltaTime * _speed;
๋ก ํ๋ฉด ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ์์ง์ผ ๋ ์ด๋ ค์์ด ์๊ธด๋ค
์ด๋ ๊ฒ ํ์ง๋ง๋ ์ ๋ ฅ๊ณผ ์์ง์์ ํ์ฝ๋์ ๋ฃ์ผ๋ฉด ์๋๋ ๋ฏ ํจ
๐ชPlayer ์ด๋
Define
์ public enum MoveDir
๋ก ์ด๋ ์ํ๋ฅผ ๋ํ๋๊ฒ ๋ง๋ค์ด ์ค
์ฐ๋ฆฌ๊ฐ ๋ง๋๋ ๊ฒ์ ์ ๋จ์๋ก ์ด๋์ด๋ฏ๋ก grid๋ฅผ ๊ฐ์ ธ์์ผ ๋จ
์ ์ขํ์ ๊ทธ๋ฆฌ๋์ ๋ง๊ฒ ์ค์ ํด์ค์ผ ๋จ
ํค๋ณด๋ ์ ๋ ฅ์ ๋ฐ๋ฅธ ์ํ ๋ณํ ํจ์
// ํค๋ณด๋ ์
๋ ฅ
void GetDirInput()
{
if (Input.GetKey(KeyCode.W))
{
_dir = MoveDir.Up;
}
else if (Input.GetKey(KeyCode.S))
{
_dir = MoveDir.Down;
}
else if (Input.GetKey(KeyCode.A))
{
_dir = MoveDir.Left;
}
else if (Input.GetKey(KeyCode.D))
{
_dir = MoveDir.Right;
}
else
{
_dir = MoveDir.None;
}
}
๋ฐฉํฅ๋ฒกํฐ๋ฅผ ๊ตฌํด์ ์ค์ ์ด๋ ์ค์ด๋ฉด ์ค๋ฅด๋ฅต ์ด๋ํ๊ฒํ๋ ํจ์
// ์ค๋ฅด๋ฅต ์ด๋ ์ฒ๋ฆฌ
void UpdatePosition()
{
if (_isMoving == false)
return;
Vector3 desPos = _grid.CellToWorld(_cellPos) + new Vector3(0.5f, 0.5f);
Vector3 moveDir = desPos - transform.position;
// ๋์ฐฉ ์ฌ๋ถ ์ฒดํฌ
float dist = moveDir.magnitude;
if (dist < _speed * Time.deltaTime)
{
transform.position = desPos;
_isMoving = false;
}
else
{
transform.position += moveDir.normalized * Time.deltaTime * _speed;
_isMoving = true;
}
}
์ด ํจ์์์
Vector3 desPos = _grid.CellToWorld(_cellPos) + new Vector3(0.5f, 0.5f);
Vector3 moveDir = desPos - transform.position;
์ด ๋ถ๋ถ์ด ์
์ขํ์ ๊ทธ๋ฆฌ๋๋ฅผ ๋ง์ถฐ์ฃผ๊ณ ์๊ณ ๋ฐฉํฅ๋ฒกํฐ๋ฅผ ๊ตฌํ๋ค
๊ทธ ๋ฐ์ ๋์ฐฉ ์ฌ๋ถ ์ฒดํฌ์์๋ ๋ฐฉํฅ๋ฒกํฐ์ ํฌ๊ธฐ ์ฆ, ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํด์ ์ผ์ ์ด์์ ์๋๊ฐ ๋์ค๋ฉด ์ค์ ๋ก ์ค๋ฅด๋ฅต ์ด๋ํ๊ฒ ๋ง๋ ๋ค
์ค์ ์ด๋
// ์ด๋ ๊ฐ๋ฅํ ์ํ์ผ ๋, ์ค์ ์ขํ๋ฅผ ์ด๋ํ๋ค
void UpdateIsMoving()
{
if (_isMoving == false)
{
switch (_dir)
{
case MoveDir.Up:
_cellPos += Vector3Int.up;
_isMoving = true;
break;
case MoveDir.Down:
_cellPos += Vector3Int.down;
_isMoving = true;
break;
case MoveDir.Left:
_cellPos += Vector3Int.left;
_isMoving = true;
break;
case MoveDir.Right:
_cellPos += Vector3Int.right;
_isMoving = true;
break;
}
}
}