목표 |
스크립트를 이용해서 객체를 이동하는 방법에 대해 살펴 보자
이론 |
위치를 제어하는 컴포넌트는 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 에서 값을 변경 할 수 있습니다.
연습문제 |
객체를 생성하여 원모양 또는 삼각형, 사각형 모양으로 움직이는 프로젝트를 생성하여 보자.
'응용프로그래밍 > 유니티기초' 카테고리의 다른 글
[유니티기초]1-06.스크립트를 이용하여 객체 생성 (0) | 2022.05.30 |
---|---|
[유니티기초]1-05. 프레임에 따라 update 되는 속도가 다른 것을 어느 컴퓨터에서나 동일한 속도를 보장 하는 deltaTime (0) | 2022.05.30 |
[유니티기초] 1-04. 게임오브젝트 충돌 처리 (0) | 2022.05.30 |
[유니티기초]1-02. Rigidbody를 이용하여 오브젝트를 점프 (0) | 2022.03.28 |
[유니티 이론] 1-01.유니티 에디터 화면 구성 살펴 보기 (0) | 2021.02.23 |