티스토리 뷰

반응형

Gamelog 03. 키보드를 쓰기 시작했다.

키보드를 쓰기 시작했다. 뭔가 이제 게임을 만드는 것 같고, 벌써부터 알면 안될 것 같은데 버그가 왜 생기는지 알 것 같다.
2D 게임이 목표인데도, 물리엔진이 어떻게 돌아가는지 알아야 하구나를 느끼고 있다.
근데 뭔가 재밌다! 초등학교때인가 하던 고양이 스크립트? 하는 느낌! 아직 기초라서 그렇겠지만,!

 

Gamelog 03. '키 입력과 충돌 판정'을 따라해봤다.

키 조작으로 움직이기

키 입력을 판정하기 위해서는 Input.GetKey("right")Input.GetKey(Keycode.Space)를 사용한다.

  • 키 이름 예시: right, left, up, down, space, tab, delete, a, b, c, 1, 2, 3 ...

Update()FixedUpdate()를 조합하여 사용한다.
→ 입력 실수가 적고, 매끄러운 움직임 가능

    float vx = 0;
    void Update()
    {
        vx = 0;
        if (Input.GetKey("right")){
            vx = 1;
        }
    }

    void FixedUpdate()
    {
        this.transform.Translate(vx/50, 0, 0);
    }
}
    public float speed = 2; // 속도:Inspector에 지정

    float vx = 0;
    float vy = 0;
    bool leftFlag = false;

    void Update()
    {
        vx = 0;        // 0으로 계속 초기화 함으로써, 하기 조건문에서 초기화 불필요
        vy = 0;
        if (Input.GetKey("right"))
        { 
            vx = speed;
            leftFlag = false;
        }
        if (Input.GetKey("left"))
        { 
            vx = -speed;
            leftFlag = true;
        }
        if (Input.GetKey("up"))
        { 
            vy = speed;
        }
        if (Input.GetKey("down"))
        { 
            vy = -speed;
        }
    }
    void FixedUpdate()
    { 
        this.transform.Translate(vx / 50, vy / 50, 0);
        this.GetComponent<SpriteRenderer>().flipX = leftFlag;
    }

Unity Input.GetKey 이동

up/down 때마다 rotate를 먹여보고 싶은데, 생각보다 엄청 안된다.
조금더 체험해보고 투두리스트로 도전해보기로!

  • 자동차 up/down 키 누를 경우 rotate 적용하기

 

충돌기능 적용하기

리지드바디: 물리적인 움직임을 시키는 컴포넌트

  • 벽에 닿으면 나아가지 않거나, 다른 물체와 충돌하면 되돌아오거나, 공중에 떠있을 때 낙하하게 함
  • 3D용 Rigidbody와 2D용 Rigidbody로 나뉨
  • Gravity Scale: 0으로 설정할 경우, 낙하하지 않게 됨(충돌만 사용하고 싶을 경우 0으로 설정)
  • Freeze Position/Rotation: 충돌해도 회전하지 않으려면 체크

Unity Rigidbody

[Rigidbody2D].gravityScale = 0; // 중력 0으로 설정
[Rigidbody2D].constraints = RigidbodyConstraints2D.FreezeRotation; // 충돌시 미회전 설정

콜라이더: 충돌을 행하는 형태 설정

  • 게임 오브젝트의 어디가 충돌할 것인가를 지정하는 것
  • 사각형(Box Collider 2D), 원형(Circle Collider 2D), 캡슐형(Capsule Collider 2D), 그림형(Polygon Collider 2D)가 있음
  • 굴러가지 않는 물체라면 → 박스형 추천
  • 굴러가는 물체라면 → 원형 추천
  • 그림형의 경우, 복잡한 형태로 프로젝트가 무거워질 수 있어 비추천

Unity Collider
Unity 리지드바디 & 콜라이더

  • 중력이 설정될 경우, 콜라이더와 부딪힐 때까지 떨어지게 됨
  • 중력에 따라 콜라이더가 반만 부딪히면 기울어 낙하하게 됨

 

Unity 리지드바디 & 콜라이더

    public float speed = 2; // 속도:Inspector에 지정

    float vx = 0;
    float vy = 0;
    bool leftFlag = false;
    Rigidbody2D rbody;

    void Start() {		// Rigidbody2D 기본 세팅 설정
        rbody = GetComponent<Rigidbody2D>();
        rbody.gravityScale = 0;
        rbody.constraints = RigidbodyConstraints2D.FreezeRotation;
    }

    void Update() {
        // 움직임 설정 코드 생략
    }
    void FixedUpdate() {
        rbody.velocity = new Vector2(vx, vy);	// 물리 엔진 이동시 Rigidbody2D 내에 이동 속도 지정
        this.GetComponent<SpriteRenderer>().flipX = leftFlag;
    }
  • Rigidbody의 설정의 경우, 스크립트에서 작성하면 별도 조작 필요 없이 세팅 가능
  • 물리엔진 이동 시 Rigidbody 내에 설정해야 이동속도 지정 가능
  • 중력 및 회전 미설정시, 충돌하면 단순 멈춤

 

반응형
댓글