[유니티 기초]1-03.오브젝트를 키보드로 이동 시켜 보자.
| 목표 |
스크립트를 이용해서 객체를 이동하는 방법에 대해 살펴 보자
| 이론 |
위치를 제어하는 컴포넌트는 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 에서 값을 변경 할 수 있습니다.

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