본문 바로가기
게임 프로그래밍/유니티 활용

[유니티 활용] 2D 배경 스크롤과 장애물 생성 및 이동

by 레오란다 2022. 12. 18.
반응형

이번 글에서는 아래와 같이 바닥 배경 스크롤과 장애물 생성 및 이동하는 방법에 대해 알아보도록 하겠습니다.

 

 

▶ 준비 사항

  • SunnyLand 에셋이 없으시다면 여기를 클릭하셔서 다운로드 받고 Package Manager 에서 Import 해주세요. 
  • 플랫폼: Android, 해상도: 1920x1080 landscape 로 설정해 주세요.

 

 배경 스크롤 만들기

  ▷ 배경 sprite 설정 변경

  • 준비 사항에 있는 SunnyLand 에셋을 설치하시면 Project 창에서 "SunnyLand Artwork" 이라는 폴더가 생성되어 있을 것입니다. 
  • Project 창에서 폴더 경로 [Assets > SunnyLand Artwork > Environment > props] 로 이동하면 "block-big" 이 있습니다. 이것을 선택하고, Inspector 창에서 Pixel Per Unit 을 32로 변경해줍니다. 32 로 변경해 주는 이유는 block-big 의 크기가 32x32 이기 때문이고 이 크기를 유니티의 Unit 단위 1 크기에 맞춰주기 위해서입니다.
  • 역시 Inspector 창에서 다음과 같이 Wrap Mode 를 [Repeat] 로 변경한 다음 [Apply] 를 클릭해 주세요.

  • 이 설정은 Texture 를 tile 형식으로 반복 패턴이 되도록 해줍니다.

  ▷ Material 생성

  • Project 창에서 Assets 폴더 밑에 Materials 폴더를 생성합니다.
  • Materials 폴더를 더블 클릭하고 폴더 안에서 마우스 우클릭 [Create > Material] 을 선택해 새로운 material 을 생성합니다. 이름을 LandBlock 으로 해주세요.
  • LandBlock 을 선택하고 Inspector 창에서 아래와 같이 Shader 부분을 클릭해 [Unlit > Transparent] 로 변경해 줍니다.

  • 아래쪽 None (Texture) 에 [Assets > SunnyLand Artwork > Environment > props] 에 있는 "block-big" 을 드래그 해줍니다.

  ▷ Quad 생성  

  • Hierarchy 창에서 마우스 우클릭 [3D Object > Quad] 를 선택해 Quad 를 하나 생성하고 이름을 Land 로 변경해 줍니다. Transform 을 다음과 같이 설정해 줍니다.
    • Position (0, -2.5, 0)
    • Scale (30, 5, 1)
  • Land 객체에 위에서 작업한 LandBlock material 을 드래그해 주세요.
  • Land 객체를 선택하고 Inspector 창에서 아래쪽에 있는 Land Block (Material) 을 펼쳐준 다음 Tiling X = 30, Y = 5 로 설정해 줍니다.

여기까지 진행했을 때 아래와 같이 되면 됩니다.

중간 점검 화면

  • Land 객체에 [Add Component > New Script] 로 새 스크립트를 추가하고 이름을 BGScroller 로 해주세요.
  • BGScroller 스크립트를 다음과 같이 작성해 줍니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BGScroller : MonoBehaviour
{
   public float speed;
   float offset_x;

   // Update is called once per frame
   void Update()
   {
      offset_x += (speed * Time.deltaTime);

      Vector2 offset = new Vector2(offset_x, 0);
      GetComponent<Renderer>().material.SetTextureOffset("_MainTex", offset);
   }
}
  • Land 를 클릭하고 Inspector 창에서 BGScroller 의 Speed 를 3 으로 설정해 줍니다.
  • 이제 Play 하면 바닥이 왼쪽으로 스크롤 됩니다.

 

 장애물 만들기

  • Project 창에서 마우스 우클릭 [2D Object > Sprites > Square] 를 선택해 sprite 객체를 생성하고 이름을 Crate 로 변경합니다.
  • Crate 를 선택하고 Inspector 창을 보면 Sprite Renderer 가 있습니다. Sprite Renderer 의 Sprtie 필드에 [Assets > SunnyLand Artwork > Environment > props] 에 있는 "big-crate" 를 연결해 줍니다.
  • Crate 객체의 Inspector 창에서 [Add Component > New Script] 로 새 스크립트 이름을 ObjectMover 로해서 생성해 줍니다.
  • ObjectMover 의 스크립트 코드를 다음과 같이 작성합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ObjectMover : MonoBehaviour
{
   public float speed;

   // Update is called once per frame
   void Update()
   {
      transform.Translate(new Vector3(-speed * Time.deltaTime, 0f, 0f));
   }
}
  • Crate 를 선택하고 Inspector 창에서 ObjectMover 에 있는 Speed 필드를 3 으로 설정합니다.
  • Project 창에서 Assets 폴더 밑에 Resources 폴더를 만들고 Crate 객체를 Resources 폴더로 드래그해 프리팹 (prefab) 을 만들어 줍니다.
  • 프리팹이 생성됐으면 Project 창에 있는 Crate 를 삭제합니다.

 

장애물 생성기 만들기

  • Project 창에서 빈 객체 하나를 생성하고 이름을 GenCrate 로 변경합니다.
  • GenCrate 객체에 CrateGenerator 라는 이름으로 새 스크립트를 추가하고 아래와 같이 코드를 작성합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CrateGenerator : MonoBehaviour
{
   public Transform prefabCrate;

   public int minGenTime;
   public int maxGenTime;

   void Start()
   {      
      StartCoroutine(GenCrate());
   }

   IEnumerator GenCrate()    
   {
      while(Application.isPlaying)
      {
         var crate = Instantiate(prefabCrate).transform;
         crate.position = new Vector3(12, 0.45f);

         yield return new WaitForSeconds(Random.Range(minGenTime, maxGenTime + 1));
      }
   }
}
  • GenCrate의 Inspector 창에서 GenCrate 를 다음과 같이 설정해 줍니다. Prefab Crate 필드에 연결하는 방법은 [Assets > Resources] 에 있는 "Crate" 프리팹을 드래그해서 놓으면 됩니다.

  • Min Gen Time 과 Max Gen Time 은 Crate 가 생성되는 시간 간격 (초 단위) 의 최소 / 최대 값입니다.

이제 Play 해보시면 주기적으로 바닥이 스크롤 되고 그 위에 Crate 가 랜덤한 시간 간격으로 생성되는 것을 확인할 수 있습니다.

 

반응형

댓글