본문 바로가기

유니티

[유니티] 반복되는 배경을 사용해서 런닝게임 기초 만들기(무한 스크롤링)


게임을 만들 때 배경은 중요하다.

특히, 캐릭터의 움직임을 표현하는 과정에서 캐릭터가 직접움직이는 경우도 있지만, 배경을 움직이게 해서 캐릭터가 앞으로 나아가는듯 보이게 하는 방법도 있고 실제로 사용되는 경우도 많다.

오늘은 뒷 배경을 계속해서 한 방향으로 움직이는 방법으로 캐릭터의 움직임을 표현해보도록 하겠다.

먼저, 배경으로 쓸 Image를 준비한다.

 

이미지를 project창에 넣고, Insepector를 통해서 위의 사진처럼 Wrap mode를 Repeat으로 설정해준다.

 

유니티 Hierarchy-우클릭-3D Object-quad를 통해서 quad를 생성해주도록 한다.

이 만들어진 quad를 ,카메라 크기만큼 늘려준다.

 

다음으로는 quad에 넣을 material을 만들어 줄 것이다.

유니티 project창에서 우클릭-create-material을 통해서 새로운 material을 만들어준다.

생성된 Material의 shader를 Unlit-transparent로 변경해준다.

그 후, project창에서 준비된 image를

빨간 동그라미 친 곳으로 드래그해서 넣어주도록 한다.

그러면 ,Quad에 넣을 material이 완성된 것이고, 앞서 만들었던 quad의 mesh renderer에 해당 material을 넣어준다.

내가 설정했던 배경이 나타나는 것을 볼 수 있다.

 

이제 해당 배경을 움직여줄 코드를 만들어주도록 하자.

빈 오브젝트를 만들고, 해당 스크립트를 넣어주도록 한다.

 [SerializeField] MeshRenderer background;
    [SerializeField] float speed;

    private void Update()
    {
            background.material.mainTextureOffset += new Vector2(speed * Time.deltaTime,0);
        
    }

아주 간단한 함수이다.

background에 앞서 만들었던 quad를 넣어주고, speed는 배경이 움직일 속도를 적당히 조절해주면 된다.

이제 실행을 해보면,

에디터 상에서 캐릭터는 가만히 있지만, 배경 효과덕분에 움직이는 느낌이 나게 된다!!

 

해당 방법을 조금 더 응용하면,

  [SerializeField] MeshRenderer[] backgrounds;
    [SerializeField] float[] speed;

    private void Update()
    {
        for(int i = 0; i < backgrounds.Length; i++)
        {
            backgrounds[i].material.mainTextureOffset += new Vector2(speed[i] * Time.deltaTime,0);
        }
    }

움직이는 개체를 여러가지로 만들어 줄 수 있다.

개체별 속도를 멀리 보여야 하는 오브젝트는 느리게, 가까이 있어야 하는 오브젝트는 속도를 빠르게 해준다면

 

이렇게 원근감이 느껴지는 배경또한 구현이 가능하게 된다.