플레이어 이동
if (Input.GetKey(KeyCode.W))
{
transform.position += Vector3.up * Time.deltaTime * _speed;
}
else if (Input.GetKey(KeyCode.S))
{
transform.position += Vector3.down * Time.deltaTime * _speed;
}
else if (Input.GetKey(KeyCode.A))
{
transform.position += Vector3.left * Time.deltaTime * _speed;
}
else if (Input.GetKey(KeyCode.D))
{
transform.position += Vector3.right * Time.deltaTime * _speed;
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using static Define;
public class PlayerController : MonoBehaviour
{
public Grid _grid;
public float _speed = 5f;
Vector3Int _cellPos= Vector3Int .zero;
MoveDir _dir = MoveDir.None;
bool _isMoving = false;
void Start()
{
Vector3 pos = _grid.CellToWorld(_cellPos)+new Vector3(0.5f,0.5f);
transform.position = pos;
}
void Update()
{
GetDirInput(); //키보드 입력
UpdatedPosition();//실질적으로 스르륵 이동하는거
UpdateIsMoving(); //이동가능 상태일때 업데이트
}
void UpdatedPosition()
{
if (_isMoving == false)
return;
Vector3 destPos = _grid.CellToWorld(_cellPos) + new Vector3(0.5f, 0.5f);
Vector3 moveDir=destPos-transform.position;
float dist = moveDir.magnitude;
if(dist < _speed*Time.deltaTime)
{
transform.position = destPos;
_isMoving = false;
}
else
{
transform.position+=moveDir*_speed*Time.deltaTime;
_isMoving=true;
}
}
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;
}
}
}
void GetDirInput()
{
if (Input.GetKey(KeyCode.W))
{
// transform.position += Vector3.up * Time.deltaTime * _speed;
_dir = MoveDir.Up;
}
else if (Input.GetKey(KeyCode.S))
{
// transform.position += Vector3.down * Time.deltaTime * _speed;
_dir = MoveDir.Down;
}
else if (Input.GetKey(KeyCode.A))
{
//transform.position += Vector3.left * Time.deltaTime * _speed;
_dir = MoveDir.Left;
}
else if (Input.GetKey(KeyCode.D))
{
//transform.position += Vector3.right * Time.deltaTime * _speed;
_dir = MoveDir.Right;
}
else
{
_dir = MoveDir.None;
}
}
}
반응형
'게임 개발 > Unity' 카테고리의 다른 글
[Unity] 커서 생성 혹은 감추기 (0) | 2024.05.29 |
---|---|
[Unity] Map tool (0) | 2024.05.29 |
[UNITY] 코드로 Collider/isTrigger 설정 방법 (1) | 2023.12.02 |
[Unity] 2D에서 캐릭터 따라다니는 카메라 (0) | 2023.10.16 |
Unity 기초 함수 (0) | 2022.10.19 |