스크립트로 게임 오브젝트 조작하기
Rigidbody2D나 Box Collider등과 같은 컴포넌트들을 게임오브젝트에 추가했던것 처럼 스크립트를 컴포넌트처럼 추가할 수 있습니다.
스크립트 파일 만들기
게임오브젝트에서 Add Component에서 스크립트를 추가할 수도 있고 프로젝트뷰에서 스크립트를 만들어 나중에 추가할 수도 있습니다. 프로젝트뷰에서 Scripts폴더를 만든후 폴더안에서 우클릭후 Create>Script를 클릭후 이름을 PlayerController로 바꿔줍니다.
키 입력으로 게임 오브젝트를 조작하는 스크립트
Rigidbody2D rbody; // Rigidbody2D의 참조입니다.
게임오브젝트 생성시 불리워지는 Start() 함수에서 rbody변수에 Rigidbody2D 참조를 연결합니다.
매 프레임 불리워지는 Update()에서 키보드입력을 받습니다. axisH = Input.GetAxisRaw("Horizontal");
일정한 간격으로 호출되는 FixedUpdate()에서 Rigidbody 2D컴포넌트를 사용중이므로 Rigidbody를 물리를 이용 객체의 위치를 변경시킵니다. rbody.velocity = new Vector2 (axisH * 3.0f, rbody.velocity.y);
Rigidbody를 사용하지 않을경우 Transform컴포넌트를 이용 객체를 이동시키나 Rigidbody를 사용시는 되도록 Rigidbody를 사용해야 합니다. 이는 Rigidbody가 Trnasform컴포넌트 보다 나중에 실행되어지기 때문입니다.
저장후 Pplayer_stop에 적용시켜줍니다. 플레이후 AD키를 누르면 좌우로 움직입니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
// Start is called before the first frame update
Rigidbody2D rbody;
float axisH = 0.0f;
void Start()
{
rbody = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update()
{
axisH = Input.GetAxisRaw("Horizontal");
}
private void FixedUpdate() {
rbody.velocity = new Vector2 (axisH * 3.0f, rbody.velocity.y);
}
}
변수부분에 public float speed = 3.0f; 를 추가하고 상수 3.0f대신 speed를 사용합니다.
캐릭터가 좌우로 움직일 경우 진행 방향을 바라보기 위해 transform.localScale을 이용합니다. 물리상 - Scale은 말이 안되지만 유니티에서는 반전을 뜻합니다. (-1,1)은 x축만 반전 시키겠다는 의미입니다.
if(axisH > 0.0f) { //오른쪽 처리
transform.localScale = new Vector2(1, 1);
} else if (axisH <0.0f) { //왼쪽 처리
transform.localScale = new Vector2(-1, 1);
}
저장하고 실행해보면 캐릭터가 진행방향에 따라 반전하는걸 알수 있습니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour{
// Start is called before the first frame update
Rigidbody2D rbody;
float axisH = 0.0f;
public float speed = 3.0f;
void Start(){
rbody = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update(){
axisH = Input.GetAxisRaw("Horizontal");
if(axisH > 0.0f) {
transform.localScale = new Vector2(1, 1);
} else if (axisH <0.0f) {
transform.localScale = new Vector2(-1, 1);
}
}
private void FixedUpdate() {
rbody.velocity = new Vector2 (speed * axisH, rbody.velocity.y);
}
}
실행해보면 좌우방향에 따라 캐릭터가 반전한다.