TIL(2024,06,13)2D 클리커 만들어 보기

김보근·2024년 6월 13일

Unity

목록 보기
15/113

오늘은 개인 과제인 2D 클리커의 게임 배경을 만들어 볼것이다.

2D 움직이는 배경화면을 만들어볼것이다.

배경에 필요한 에셋을 다운받아서

이렇게 레이어가 나누어져있다.

레이어 하나를 클릭한다음

여기에서 Wrap Mode가 있는데 총 4개의 Wrap Mode가 있다. 잠시 설명을 하면

Repeat: 텍스처를 반복합니다. 텍스처 좌표가 0과 1을 넘어가면 텍스처가 반복되어 매핑됩니다. 이를 통해 무한히 타일링된 효과를 얻을 수 있습니다.

Clamp: 텍스처 좌표가 0과 1을 벗어나는 경우, 가장자리에 있는 픽셀 값을 계속 사용합니다. 이 옵션은 텍스처가 가장자리에서 끊어지지 않고 늘어나는 효과를 줍니다.

Mirror: 텍스처를 반복하지만, 각 반복이 이전 반복의 거울 이미지로 나타납니다. 이를 통해 연속적인 반복 대신 반사되는 타일링 효과를 얻을 수 있습니다.

Mirror Once: 텍스처가 한 번 반사되고 나서 더 이상 반복되지 않습니다. 이를 통해 한 번의 반사와 그 후의 클램핑 효과를 얻을 수 있습니다.

우리는 계속 반복되기 위해서 Wrap Mode를 Repeat로 선택하였다.

그리고 Material 폴더를 만들어 레이어 만큼 만들어준후

Shader는 Unlit/Transparent Cutout 로 설정한후 Select안에 레이어이미지를 넣어주면 된다.


이와같이 Materials폴더안에 Material을 다 만들어준후
스크립트를 작성한다.

public class Background_Mt : MonoBehaviour
{
    // Inspector에서 편집할 수 있도록 SerializeField 속성을 추가하고,
    // -1.0과 1.0 사이의 값을 설정할 수 있는 moveSpeed 변수를 선언합니다.
    [SerializeField]
    [Range(-1.0f, 1.0f)]
    private float moveSpeed = 0.1f;

    // Material 타입의 변수를 선언합니다. 
    // 이 변수는 나중에 배경의 소재(Material)를 참조하는 데 사용됩니다.
    private Material material;

    // Awake() 메서드는 Unity의 생명주기에서 게임 오브젝트가 생성될 때 호출됩니다.
    // 여기서는 Renderer 컴포넌트에서 Material을 가져와서 material 변수에 할당합니다.
    private void Awake()
    {
        // 현재 오브젝트의 Renderer 컴포넌트에서 Material을 가져옵니다.
        material = GetComponent<Renderer>().material;
    }

    // Update() 메서드는 매 프레임마다 호출됩니다.
    // 여기서는 텍스처의 오프셋을 설정하여 배경이 이동하는 효과를 만듭니다.
    private void Update()
    {
        // "_MainTex" 텍스처의 오프셋을 설정합니다. 
        // Time.time은 게임이 시작된 후 경과된 시간을 반환하며,
        // moveSpeed에 따라 오프셋의 이동 속도가 결정됩니다.
        material.SetTextureOffset("_MainTex", Vector2.right * moveSpeed * Time.time);
    }
}

material.SetTextureOffset("_MainTex", Vector2.right moveSpeed Time.time);: "_MainTex" 텍스처의 오프셋을 설정합니다. Time.time은 게임 시작 후 경과한 시간을 반환하고, moveSpeed를 곱하여 텍스처의 이동 속도를 결정합니다. Vector2.right는 (1, 0)을 의미하므로 텍스처가 오른쪽으로 이동하게 됩니다.

이렇게 작성한 후에


3D 오브젝트의 Quad를 레이어의 갯수만큼 만든후

방금만든 스크립트를 다 붙여준후에 position의 z값을 조금씩 변환해주면 계속생성되는 배경이 완성된다.

완성화면

profile
게임개발자꿈나무

0개의 댓글