본문 바로가기

Unity

Unity 캐릭터 이동 대시 구현

728x90

나를 위해 기록하는 유니티 기초

 

아래는 어제 기록한 키보드로 캐릭터 움직임 구현입니다.

https://chadireoroonu.tistory.com/109

 

Unity 키보드로 캐릭터 움직임 구현

나를 위해 기록하는 유니티 기초 1. 유니티 프로젝트 생성 후 땅이 될 3D 오브젝트 Plane 생성 2. 땅 위에서 움직여 줄 오브젝트로 3D 큐브 생성 후 땅 위쪽으로 배치 3. 큐브에 연결할 C# 스크립트 생

chadireoroonu.tistory.com

 

키보드의 방향키를 누르면 해당 방향으로 캐릭터가 움직이도록 해놓은 상태에서,

왼쪽 쉬프트 키를 누르고 방향키를 누를 때 빠른 이동을 구현해보겠습니다.

 

어제 작성했던 이동 코드에 대시(빠른 이동) 기능을 덧붙여 보겠습니다.

 

아래 코드는 어제 작성한 움직임 코드입니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class move : MonoBehaviour
{
    float speed = 10.0f;

    void Update()
    {
        // 키보드 입력
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");

        // 이동거리 보정
        h = h * speed * Time.deltaTime;
        v = v * speed * Time.deltaTime;

        // 실제 이동
        transform.Translate(Vector3.right * h);
        transform.Translate(Vector3.forward * v);
    }
}

 

이 중, 달라져야 하는 부분은 이동거리 보정 부분의 코드입니다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEditor.Experimental.GraphView;
using UnityEngine;

public class move : MonoBehaviour
{
    float speed = 10.0f;

    void Update()
    {
        // 키보드 입력
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");

        // 쉬프트 키 대시
        if (Input.GetKey(KeyCode.LeftShift)) {
            // 이동거리 보정
            h = h * speed * Time.deltaTime * 2;
            v = v * speed * Time.deltaTime * 2;
        }
        // 일반 이동
        else {
            // 이동거리 보정
            h = h * speed * Time.deltaTime;
            v = v * speed * Time.deltaTime;
        };

        // 실제 이동
        transform.Translate(Vector3.right * h);
        transform.Translate(Vector3.forward * v);
    }
}

왼쪽 쉬프트 키가 눌려있는지 여부에 따라 이동거리를 다르게 보정해주었습니다. 

쉬프트 키를 누르고 있는 동안은 계속 대시가 가능하도록 설정해보았습니다.

 

기본 이동 속도
대시 이동 속도


2309063 코드 리팩토링

뭐하러 길게 썼나 싶어서 일부 수정

using System.Collections;
using System.Collections.Generic;
using UnityEditor.Experimental.GraphView;
using UnityEngine;

public class move : MonoBehaviour
{
    float speed = 10.0f;

    void Update()
    {
        // 키보드 입력
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");

        // 이동거리 보정
        h = h * speed * Time.deltaTime * 2;
        v = v * speed * Time.deltaTime * 2;

        // 쉬프트 키 대시
        if (Input.GetKey(KeyCode.LeftShift)) {
            h *= 2;
            v *= 2;
        }

        // 실제 이동
        transform.Translate(Vector3.right * h);
        transform.Translate(Vector3.forward * v);
    }
}

h, v를 구하고, 만약 쉬프트 키가 눌린 상태라면 h, v에 2곱해주는 방식으로 일부 수정했습니다.

 

결과물은 동일하게 나옵니다