스크립트로 게임 오브젝트 조작하기

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);
    }
}

실행해보면 좌우방향에 따라 캐릭터가 반전한다.

+ Recent posts