카테고리 없음

1분만에 Unity게임 배경 움직이는 방법 배우기

hermes-jim 2023. 9. 2. 02:33
반응형

유니티 게임에서 캐릭터가 자동으로 이동하는 효과를 만들기 위해 캐릭터는 카메라에 고정하고 배경을 움직인다. 이번에는 배경이 움직이게 하는 방법을 어떻게 만드는지 알아보자.

 

 

1. 배경 준비하기

먼저 배경을 준비한다. Asset에서 원하는 배경을 골라서 다운로드한다.

예를 들어 검색창에서 "pixel skies"를 쓰면 배경으로 쓸 만한 것을 찾을 수 있다.

 

 

 

유니티 에셋에 회원가입 후 로그인 한다. 그런 다음 내 에셋에 추가하기를 누른다. Unity 프로그램 실행한 상태에서 화면에 자동으로 Package Manager가 뜬다.

 

Package Manager에서 Import 버튼을 누르면 Import Unity Package 화면이 뜨고 여기서 파일이 모두 체크된 상태에서 Import(가져오기)를 선택한다.

 

Unity 프로그램 내 Assets 폴더에 잘 들어온 것을 확인할 수 있다. 배경화면이 px이 작아서 크게 바꿔보겠다. 

 

 

배경화면에 보면 오른쪽 방향으로 확장할 수 있는 화살표가 있다.

 

 

이것을 누르고 나면 오른쪽 Inspector 창에 item에 대한 속성값을 결정할 수 있는 화면이 나타난다.

여기에 Pixel per unit (default 값: 100)을 20으로 변경하고 아래 Apply 버튼을 누른다.

 

 

Assets 폴더의 배경화면을 Hierarchy 창에 drag & drop으로 넣는다. 그리고 배경 object의 이름을 바꾼다. 

 

 

한 개 더 복사한다 (Ctrl + D).  그리고 tool bar에서 Move Tool를 클릭하고 좌표를 잡고 오른쪽으로 보낸다.

 

 

2번째 배경화면의 좌표를 좌/우로 이동해서 공간이 없도록 배치한다. 그리고 그 좌표를 확인한다.

 

 

 

움직이는 배경에 대한 명령어 설정

 

 

Assets에 Scripts 폴더를 만들고 Script를 작성한다. 예를 들어 "BackgroundScroll"이름의 C# script를 만든다.

 

 

 

만들어진 Scripts는 배경화면에 명령어로 설정해야 한다. 이 방법은 배경화면 2개를 모두 클릭한 상태에서 아래 script를 inspector창에 drag and drop방법으로 적용한다.  

 

 

작성할 항목은 배경의 스피드와 방향에 대한 특성과 값을 정해줘야 한다. 먼저 속도와 방향에 대한 특성을 선언하자.

Script 외부에서 특성값을 수정가능하도록 하기 위해 [SerializeField]를 코드 앞에 붙여준다.

 

속도에 대한 변수 moveSpeed와 X 방향 이동좌표에 대한 변수 posX를 선언한다.

[SerializeField]
private float moveSpeed;
[SerializeField]
private float posX;

지속적으로 좌표를 이동시켜야 하기 때문에 void Update () 아래 항목에 코드를 작성한다.

좌표이동은 transform.position을 사용하고 이동하는 방향에 대한 속도와 방향을 적어준다.

+=를 해준 것은 설정한 방향으로 움직이라는 뜻이다. Vector3.left는 배경이 이동방향이 오른쪽 --> 왼쪽으로 이동하기 때문에 left로 표기하는 것이다.

 

다음은 2개의 배경을 이용하여 끊김 없이 무한정으로 번갈아가며 위치시키기 위해 조건값을 설정해야 한다.

posX의 경우 

 

transform.position += Vector3.left * moveSpeed * Time.deltaTime;

if (transform.position.x <= -posX)
{
	transform.position = new Vector3(posX, 0, 0);
}

 

그리고 Time.deltaTime의 경우 어떤 frame의 값에도 일정한 시간 값을 출력하게 해주는 것이다.  거리는 속도 x 시간으로 표현되는데 이때 이 명령어를 통해 시간값을 고정하기에 어떤 디바이스(50 frame, 60 fream 등)에서든 속도에 따른 이동한 거리 값(위치)을 유지시켜 준다.

using UnityEngine;

public class BackgroundScroll : MonoBehaviour
{
    // Speed property
    [SerializeField]
    private float moveSpeed;
    // Axis property
    [SerializeField]
    private float posX;
    


    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        // modify axix = vector3 left * speed * deltatime
        transform.position += Vector3.left * moveSpeed * Time.deltaTime;
        if(transform.position.x <= -posX)
        {
            transform.position = new Vector3(posX, 0, 0);
        }
    }
}

 

위에 스크립트를 모두 작성하고 나면 아래 MoveSpeed와 posX에 대한 값을 Scripts외부에서 설정할 수 있다.

 

 

속도는 3으로 세팅하고, PosX는 두 번째 배경화면의 좌표(x, y, z) = (17.5, 0, 0)를 참조하여 설정하자.

 

 

배경 움직임 세팅은 끝이 났다. Unity 게임실행 버튼을 클릭하면 아래와 같이 이동하는 모습이 완성된다.

 

반응형