2025년, 코딩은 선택이 아닌 필수!

2025년 모든 학교에서 코딩이 시작 됩니다. 먼저 준비하는 사람만이 기술을 선도해 갑니다~

응용프로그래밍/유니티기초

[유니티 기초]1-03.오브젝트를 키보드로 이동 시켜 보자.

파아란기쁨1 2022. 3. 28. 12:41
반응형
목표

스크립트를 이용해서 객체를 이동하는 방법에 대해 살펴 보자

 

이론

위치를 제어하는 컴포넌트는 Transform 으로 Transform 을 스크립트에서 제어하여 움직일 수 있다.

물리 컴포넌트를 이용하여 힘을 가해서 움직일 수 있다.

 

실습

2022.03.28 - [응용프로그래밍/유니티기초] - [유니티기초]1-02. Rigidbody를 이용하여 오브젝트를 점프

을 활용하여 키보드의 화살표를 이용하여 큐브를 이동하고 스페이스를 클릭 했을때 점프하는 프로그램을 만들어 보겠습니다.

 

입력 값을 감지하기 위해서는 Input 을 활용합니다.

위 화살표 : KeyCode.UpArrow

아래 화살표 : KeyCode.DownArrow

왼쪽 화살표 : KeyCode.LeftArrow

오른쪽 화살표 : KeyCode.RightArrow

스페이스 : KeyCode.Space

그 외 : KeyCode.A ~ KeyCode.Z 와 같이 원하는 키를 넣어 주면 된다.

 

위와 같이 키 값을 이동해서 다음과 같이  Jump 스크립트를 수정하여 큐브를 화살표를 이용해서 이동해 봅니다.

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

public class Jump : MonoBehaviour
{
    Rigidbody rb; //Rigidbody 를 연결할 변수 선언
    public float speed = 10f; // 이동 속도
    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody>();  //자신의 Rigidbody 를 가져와서 rb에 연결
        //rb.AddForce(0,500,0); // y 축으로 500 만큼 점프하자.
        
    }

    // Update is called once per frame
    void Update()
    {
        if(Input.GetKey(KeyCode.UpArrow)){
            rb.AddForce(0f,0f,speed);
        }
        if(Input.GetKey(KeyCode.DownArrow)){
            rb.AddForce(0f,0f,-speed);
        }
        if(Input.GetKey(KeyCode.LeftArrow)){
            rb.AddForce(-speed,0f,0f);
        }
        if(Input.GetKey(KeyCode.RightArrow)){
            rb.AddForce(speed,0f,0f);
        }
        if(Input.GetKey(KeyCode.Space)){
            rb.AddForce(0f,speed,0f);
        }
        
    }
}

실행해서 키보드를 이용해서 큐브를 동작시켜 봅니다.

 

위의 코드의 Update() 부분을 다음과 같이 나타 낼 수도 있다.

 

    void Update()
    {

         // 수평과 수직 축 입력 값을 감지하여 저장
        float xInput = Input.GetAxis("Horizontal");
        float zInput = Input.GetAxis("Vertical");
        float yInput = Input.GetAxis("Jump");

        // 실제 이동 속도를 입력 값과 이동 속력을 통해 결정
        float xSpeed = xInput * speed;
        float zSpeed = zInput * speed;
        float ySpeed = yInput * speed;

        // Vector3 속도를 (xSpeed, ySpeed, zSpeed)으로 생성
        Vector3 newVelocity = new Vector3(xSpeed, 0f, zSpeed);
        // 리지드바디의 속도에 newVelocity를 할당
        rb.velocity = newVelocity;
        
        /* Position 을 이용해 움직이는 방법
        transform.position += new Vector3(xSpeed,ySpeed,zSpeed) * Time.deltaTime;
        */
        
    }

- GetAxis(string axisName) 메서드는 어떤 축에 대한 입력 값을 숫자로 반환하는 메서드이다.

axisName 

Horizontal : 수평축에 대응되는 키로 왼쪽방향(A) 음의값(-1.0), 오른쪽방향(D) 양의값(1.0) 

Vertical : 수평축에 대응되는 키로 아래쪽방향(S) 음의값(-1.0), 위쪽방향(W) 양의값(1.0)

 

velocity - 새로운 값을 할당하여 현재 속도를 변경 할 수 있다.

 

그렇다면 GetAxis는 어떤 경우 사용하면 좋을까?

1. 입력키 커스터마이제이션을 구현할 때 편리합니다.

2. 조이스틱 같은 다양한 입력장치에 대응 할 수 있습니다.

 

GetAxis의 입력매니저는 Edit -> Project Settings... 클릭하여 Input Manger탭->Axies 에서 값을 변경 할 수 있습니다.

 

 

연습문제

객체를 생성하여 원모양 또는 삼각형, 사각형 모양으로 움직이는 프로젝트를 생성하여 보자.

 

반응형