스파르타 게임개발종합반(Unity)/사전캠프 공부 기록

[Unity/2D] 캐릭터 이동하기, 초당 프레임 설정 - Application.targetFrameRate

테크러너 2024. 3. 28.

이전편

2024.03.28 - [Unity/2D] - [Unity/2D] 간단한 애니메이션 만들기 - Animator, Animation

 

transform.position.x += 1; // 에러
 
위와 같이 코드를 작성하면 transform.position.x 라는 값은 변수가 아니라고 에러가 납니다.
transform.position.x 에 값을 넣을 수는 없고, 불러오기만 가능합니다.

 

 

그렇다면 x방향(오른쪽)으로 캐릭터를 움직이기 위해서는 어떻게 해야 할까요?

transform.position += new Vector3(1f, 0, 0);

 

위와 같이 작성해주면 됩니다.

transform.position은 값을 대입할 수 있습니다.

transform.position에 마우스를 갖다대면 'Vector3'라는 타입인 것을 알 수 있습니다.

그래서 우리도 그 형식에 맞춰서 값을 대입해줘야합니다.

new Vector3(1f, 0, 0); 에서 1f, 0, 0 값은 순서대로 x, y, z 값입니다.

 

이와 같은 의미인 코드는 아래와 같습니다.

transform.position += Vector3.right; // Vector3.right == new Vector3(1f, 0, 0);
 

Vector3.right == new Vector3(1f, 0, 0);

x == right, 값은 1f 입니다.

 

다만, 문제가 있습니다.

위 코드대로 실행시켜보면 캐릭터 갑자기 확 이동하는 것을 볼 수 있습니다.

컴퓨터 사양에 따라서 어떤 사람은 더 빠르게 확 이동 할 수도 있습니다.

그래서 어떤 기기든 같은 속도로 이동할 수 있도록 설정해주어야 합니다.

    void Start()
    {
        Application.targetFrameRate = 60; // 어떤 기기든지 1초에 60번만 계산될 수 있게끔 설정
    }
 

Application.targetFrameRate 를 사용하면 어떤 기기든지 1초에 설정된 프레임 값만큼 계산될 수 있도록 설정할 수 있습니다.

 

또한 캐릭터가 x방향으로 프레임당 1f씩이나 이동하니까 너무 빠릅니다.

그래서 값을 조정해주어야 합니다.

    void Update()
    {
        transform.position += Vector3.right * 0.05f; // Vector3.right == new Vector3(1f, 0, 0);
        // 1 * 0.05, 0 * 0.05, 0 * 0.05 == 0.05, 0, 0
    }
 

Vector3.right * 0.05f 를 해주면

(1f, 0, 0)에서 0.05f를 각각 곱해주어 값은 결국 1 * 0.05, 0 * 0.05, 0 * 0.05 == 0.05, 0, 0가 됩니다.

플레이 버튼을 눌러보면 20배 정도 느려진 것을 느끼실 수 있습니다.

 

 

Tip

더보기

/ 연산을 하는 것 보다

* 연산을 하는게 빠릅니다.

가능하면 *를 이용해 주세요.

예를 들면 아래 계산의 답은 둘 다 5지만 아래있는 계산이 더 빠르게 처리됩니다.

x = 10 / 2

x = 10 * 0.5f

 

 

다음편

2024.03.28 - [Unity/2D] - [Unity/2D] 캐릭터 방향 전환하기 - 플립(Flip)

 

모바일 화면 크기 설정이 궁금하다면?

2024.03.28 - [Unity/기타] - [Unity] 모바일 크기 설정 / 디스플레이 설정

반응형

댓글