Unity Chapter 4-4. 소코반 게임 만들기 : 회전과 시간 간격

Date:     Updated:

카테고리:

태그:

인프런에 있는 이제민님의 레트로의 유니티 C# 게임 프로그래밍 에센스 강의를 듣고 정리한 필기입니다. 😀
🌜 [레트로의 유니티 C# 게임 프로그래밍 에센스] 강의 들으러 가기!


Chapter 4. 소코반 게임 만들기 : 회전과 시간 간격

오브젝트 계속 회전 시키기

EndPoint 오브젝트를 게임 내내 뺑글뺑글 돌게 하고 싶다. 새로운 c# 스크립트를 만들어 EndPoint에 붙여서 계속해서 회전하게 해보자. 스크립트 이름은 Rotator로 해서 생성해주기.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Rotator : MonoBehaviour
{
    public Transform myTransform; 

    void Start()
    {
        myTransform.Rotate(60, 60, 60);
    }

    void Update()
    {
        
    }
}

  • public Transform myTransform;
    • public이므로 유니티에서 슬롯이 열린다. 이 스크립트를 붙일 오브젝트의 Transform컴포넌트를 슬롯에 넣어주자
    • rotation값을 만질 것이기 때문에 Transform 컴포넌트를 가져왔다.
  • Start()
    • myTransform.Rotate(60, 60, 60); }
      • Rotate 함수는 x, y, z축 방향으로 각각 매개변수로 들어온 값만큼 회전시킨다.
      • Start 안에 구현했으므로 게임이 시작 될 때 오브젝트를 60, 60, 60도로 회전시킨다. (rotation 값을 이렇게 초기화.)
  1. 스크립트를 EndPoint 오브젝트에 붙여준다.
  2. EndPoint 오브젝트의 Inspector창의 유니티 myTransform 슬롯에 현재 EndPoint에 붙어있는 Transform 컴포넌트를 드래그 앤 드롭하여 넣어준다.

transform

Transform myTransform하고 변수 선언을 해준 후 myTransform.Rotate() 이런식으로 쓰는 일반적인 방법도 있긴 하지만 Transform 컴포넌트는 모든 오브젝트들이 디폴트로 갖고 있는 컴포넌트기 때문에 그냥 변수 선언 없이 transform 소문자 transform으로 바로 사용하는게 가능하다. transform.Rotate() 이렇게. transform만 적어주면 나 자신의 Transform 컴포넌트를 바로 찾아준다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Rotator : MonoBehaviour
{
    void Start()
    {
        transform.Rotate(60, 60, 60);
    }

    void Update()
    {
        
    }
}

계속 회전하게 하고 싶으므로 update()안에 구현하자.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Rotator : MonoBehaviour
{
    void Start()
    {
        
    }

    void Update()
    {
        transform.Rotate(60, 60, 60);
    }
}

그러나 이렇게 하면 update함수는 매 프레임마다 실행되기 때문에 매 프레임마다 60도씩 돌게 되고 따라서 엄청! 미친듯이! 빨리 돌게 되는 문제가 발생한다. 1초에 60프레임이라면 1초에 3600도 도는 셈..😱 따라서 시간 간격을 고려해주어야 한다.

시간 간격 고려하기

  • Update 함수는 한 프레임당, 즉 화면이 한번 깜빡일 때마다 실행된다.
  • 1초에 몇번 깜빡일지는 개인 컴퓨터 사양에 따라 다르다. 1초에 30번 깜빡이는 컴퓨터도 있고 사양이 좋아서 1초에 60번 깜빡이는 컴퓨터도 있고…
    • 30 프레임 컴퓨터에서 오브젝트로 하여금 1초 마다 1m를 움직이게 하고 싶다면 1/30을 곱해주면 된다.
    • 60 프레임 컴퓨터에서 오브젝트로 하여금 1초 마다 1m 를 움직이게 하고 싶다면 1/60을 곱해주면 된다.
  • 즉 시간 간격을 고려하여 매 프레임마다 1/프레임을 곱해주면 된다.
    • 1/프레임을 유니티 자체에서 지원해준다.
    • Time.deltaTime
      • UnityEngine에서 지원하는 변수.
      • 우리집 컴퓨터가 60프레임이면 1/60.
      • update같이 매 프레임마다 실행되는 함수 안에서 시간 간격을 고려하여 곱해준다.
        • 1초에 3m 가게 움직이고 싶은데 1초에 60번 깜빡이는 60프레임 컴퓨터라면 update함수 내에서 3m * Time.deltaTime 해주면 된다.
        • 매 프레임마다 3m * Time.deltaTime씩 움직여 최종적으로 1초에 3m 움직이게 되는 것.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Rotator : MonoBehaviour
{
    void Start()
    {
        
    }

    void Update()
    {
        transform.Rotate(60 * Time.deltaTime, 60 * Time.deltaTime, 60 * Time.deltaTime);
    }
}

이제 EndPoint 오브젝트는 1프레임 당 60도가 아닌, 1초에 60도로 돌아가게 될 것이다.



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Unity Lesson 1 카테고리 내 다른 글 보러가기

댓글 남기기