유니티 2D 배경 스크롤 - yuniti 2D baegyeong seukeulol

1일차 - 스크롤 되는 배경 만들기

우선 project뷰를 통해 Graphics 폴더에 있는 Backgrounds 폴더에 desert-background 이미지 파일을 선택합니다.

유니티 2D 배경 스크롤 - yuniti 2D baegyeong seukeulol

그 다음에 배경이미지의 Inspector 뷰에서 Texture Type을 Texture로 바꿔주고, Wrap Mode를 Repeat로 바꿔주고, Filter Mode를 Point로 바꿔줍니다.

Texture 속성은 이 이미지를 3D 객체를 위한 Material(재질)을 만들기 위한 재료로 쓰겠다는 의미입니다. 왜 2D 게임에서 3D를 활용하는 지는 후에 설명 하겠습니다.

Wrap Mode는 타일을 붙였을때 어떻게 변형이 일어나는지 선택하는 옵션입니다. 그리고 Repeat속성은 반복되는 배경을 만들기 위해서 이 이미지가 범위를 벗어날때 반복하겠다는 의미입니다.

Filter Mode는 3D변형이 일어날 경우 어떻게 필터링할지 선택하는 옵션입니다. Point는 No Filter로써, 도트의 재질감을 살리기 위하여 화질 보정을 위해서 흐리는 등의 옵션을 사용하지 않겠다는 의미입니다.

그 다음에 Scene 안에다가 3D 오브젝트인 Quad를 생성해줍시다.

Quad는 2개의 폴리곤으로 이루어진 XY평면에 적합한 평면 3D 오브젝트 입니다. 3D 게임에서는 주로 GUI를 만드는데 사용 됩니다.

유니티 2D 배경 스크롤 - yuniti 2D baegyeong seukeulol

그리고 이 Project에 3D 오브젝트를 위한 Material(재질)을 관리하기 위한 폴더인 Materials라는 폴더를 만들어 줍시다.

그리고 Material을 하나 생성해 줍니다.

유니티 2D 배경 스크롤 - yuniti 2D baegyeong seukeulol

그리고 Material을 선택해서 Inspector 뷰에서 Shader를 Particle/Alpha Blended로 변경해 주고, 우측 아래의 select를 클릭해서 아까 만든 Texture를 선택해 줍니다.

Particle/Alpha Blended를 사용함으로써 3D를 위한 Shader 효과를 제거합니다. Alpha Blended는 파티클 시스템에서 사용되는 RGB 혼합방식 셰이더의 일종입니다.

그리고 BackgroundRepeat 스크립트를 생성해서 배경을 움직이기 위한 코드를 만들어 봅시다.

유니티 2D 배경 스크롤 - yuniti 2D baegyeong seukeulol

그리고 다음과 같은 설명에 따라 코드를 작성해 줍시다.

using UnityEngine;
using System.Collections;

public class BackgroundRepeat : MonoBehaviour {
    public const float scrollSpeed = 1.2f; 
    //스크롤할 속도를 상수로 지정해 줍니다.
    private Material thisMaterial;
    //Quad의 Material 데이터를 받아올 객체를 선언합니다.
    void Start () {
    //객체가 생성될때 최초 1회만 호출 되는 함수 입니다.
        thisMaterial = GetComponent<Renderer>().material; 
        //현재 객체의 Component들을 참조해 Renderer라는 컴포넌트의 Material정보를 받아옵니다.
    }

    void Update () {
        Vector2 newOffset = thisMaterial.mainTextureOffset;
        // 새롭게 지정해줄 OffSet 객체를 선언합니다.
        newOffset.Set(0, newOffset.y + (scrollSpeed * Time.deltaTime));
        // Y부분에 현재 y값에 속도에 프레임 보정을 해서 더해줍니다.
        thisMaterial.mainTextureOffset = newOffset;
        //그리고 최종적으로 Offset값을 지정해줍니다.
    }
}

이제 Quad의 Inspector 뷰에서 아까 만든 Material과 Script를 적용해줍니다.

마지막으로 게임을 실행해 보고 결과를 확인합니다.

results matching ""

    No results matching ""

    2D 게임에서 캐릭터가 달리거나 점프를 해서 아이템을 획득하는 등의 플레이를 진행할때 배경이 무한대로 지나가는 모습을 구현할 수 있습니다. 시간차를 주어 각각의 배경레이어를 각기 다른 속도로 조절해서 좀더 입체적인 배경을 만들 수 있습니다.

    #무한반복배경 #무한스크롤링배경#유니티기초강좌

    Mathf.Repeat(value, max);

    Mathf.Repeat()는 일정 범위 내에서 값을 반복(순환)시키고 싶은 경우 사용.

    value 값은 0보다 작을수 없고 max값보다 클수 없다.

    반드시 0 ~ max 범위의 값이 반환. Mathf.Repeat(3, 10)은 0 ~ 10 범위내에 있으므로 3을 반환.

    Mathf.Repeat(12, 10)은 Max범위를 넘은 만큼인 2반환(12 - 10 = 2).

    Mathf.Clamp(value, min, max);

    Mathf.Clamp()는 value값을 최소값(min)에서 최대값(max)범위 내에 강제로 넣기 위해 사용.

    value 값이 min ~ max 범위 안에 있을 때는 그대로 값이 반환.

    value값이 min보다 작을 때는 min이 반환되고 max보다 클 때는 max가 반환된다.

    [RepeatBG.cs]

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class RepeatBG : MonoBehaviour
    {
        [SerializeField] [Range(1f, 20f)] float speed = 3f;
    
        [SerializeField] float posValue;
    
        Vector2 startPos;
        float newPos;
    
        // Start is called before the first frame update
        void Start()
        {
            startPos = transform.position;
        }
    
        // Update is called once per frame
        void Update()
        {
            newPos = Mathf.Repeat(Time.time * speed, posValue);
            transform.position = startPos + Vector2.right * newPos;
        }
    }

    [N-Cube채널] www.youtube.com/channel/UCu48WEd7-leQbXoKiA_QM0w?sub_confirmation=1

    엔큐브 스튜디오 [N Cube Studio]

    www.youtube.com

    유니티 2D 배경 스크롤 - yuniti 2D baegyeong seukeulol