[공부] 2D 유니런(유니티+런) 게임 제작 - 배경 (5)

2025. 8. 19. 17:10·✏️ 취미/코딩


<배경이 왼쪽으로 움직이게 하는 방법>

public class ScrollingObject : MonoBehaviour {
    public float speed = 10f; // 이동 속도

    private void Update()
 {
        // 게임 오브젝트를 왼쪽으로 일정 속도로 평행 이동하는 처리
        transform.Translate(Vector3.left*speed*Time.deltaTime);
    }
}

 

 

1. transform이란?

 

  • transform은 클래스 이름이 아니라, MonoBehaviour가 기본으로 제공하는 프로퍼티예요.
  • Unity에서 모든 GameObject는 위치(position), 회전(rotation), 크기(scale)를 가지는데, 이 정보를 담는 게 Transform 컴포넌트입니다.
  • 즉, transform은 해당 스크립트가 붙은 게임 오브젝트의 Transform 컴포넌트에 접근하는 예약어예요.
    • 예: transform.position, transform.rotation, transform.localScale

👉 정리: transform은 "이 오브젝트의 위치·회전·크기"를 제어하는 참조(reference). 클래스 이름이 아님.

 

2. tarnsform.Translate란?

  • transform은 뒤에 Translate(현재 위치에서 벡터만큼 이동), position(오브젝트의 현재 위치) 등이 붙어야 기능을 할 수 있음
  • transform.Translate(...) 는 오브젝트를 현재 위치에서 지정한 방향/거리만큼 이동시키는 함수입니다.
  • 주의점!! vector2가 아닌 vector3에만 사용 가능함. 2D라도 vector3를 이용해야 함

3. transform.Translate와 Rigidbody의 차이?

둘 다 위치가 바뀌는 기능을 하지만 차이가 있음

 

1) transform을 사용하는 경우 

  • "강제로" 위치를 이동시키는 방식 / 물리엔진(충돌, 중력 등)을 무시하고 그냥 좌표를 옮겨버림
  • 주로 배경 스크롤, UI 이동, 단순한 오브젝트 이동 등에 사용합니다

 

2) Rigidbody를 사용하는 경우

 

  • Unity의 물리엔진(Physics) 을 이용하는 방식입니다.
  • Rigidbody는 질량, 속도, 중력, 충돌 등을 계산해주기 때문에, 속도를 직접 설정하거나 힘(Force)을 가해서 움직입니다.
  • 이렇게 하면 중력, 마찰, 충돌 판정이 자연스럽게 적용됩니다.
  • 주로 플레이어 캐릭터, 몬스터, 움직이는 오브젝트처럼 물리 법칙을 따라야 하는 대상에 씁니다.

 

4. Vector3.left란?

Unity에서 제공하는 미리 정의된 단축 벡터 중 하나
실제 값은 Vector3.left = new Vector3(-1f, 0f, 0f);

즉, x축 방향으로 -1만큼 이동하는 벡터라는 뜻(왼쪽으로)

  • Vector3.right → ( 1, 0, 0 )
  • Vector3.left → ( -1, 0, 0 )
  • Vector3.up → ( 0, 1, 0 )
  • Vector3.down → ( 0, -1, 0 )
  • Vector3.forward → ( 0, 0, 1 )
  • Vector3.back → ( 0, 0, -1 )

 

5. Time.deltaTime이란?

 

  • Time.deltaTime은 “이전 프레임에서 이번 프레임까지 걸린 시간(초)”을 의미합니다.
  • 컴퓨터 성능/프레임레이트에 따라 Update()가 호출되는 속도가 다르기 때문에, 이를 보정하기 위해 사용합니다.
  • 그냥 Time이 아닌 Time.deltaTime을 이용해야 컴퓨터 성능별로 배경 이동속도에 차이가 발생하지 않음
  • 모니터 60fps → 한 프레임은 약 0.016초 / 모니터 30fps → 한 프레임은 약 0.033초
  • 만약 deltaTime을 안 쓰면, 30fps 환경에서는 오브젝트가 느리게 움직이고 60fps에서는 빠르게 움직이는 문제가 발생

 

 

< 배경이 무한 반복하게 하는 방법>

이 함수는 아예 통으로 외워두면 좋을 듯

using UnityEngine;

// 왼쪽 끝으로 이동한 배경을 오른쪽 끝으로 재배치하는 스크립트
public class BackgroundLoop : MonoBehaviour {
    private float width; // 배경의 가로 길이

    private void Awake() {
        // 가로 길이를 측정하는 처리
        BoxCollider2D backgroundCollider = GetComponent<BoxCollider2D>();
        width = backgroundCollider.size.x;
    }

    private void Update() {
        // 현재 위치가 원점에서 왼쪽으로 width 이상 이동했을때 위치를 리셋
        if(transform.position.x <= -width)
        {
            Reposition();
        }
    }

    // 위치를 리셋하는 메서드
    private void Reposition() {
        Vector2 offset = new Vector2(width * 2f, 0);
        transform.position = (Vector2) transform.position + offset;
        
    }
}

 

1. private void Awake() { } 함수 이용

>> 씬 실행 시 최초 1번만 확인되면 되기에 Awake 함수 사용

1) Awake()  = 오브젝트가 씬에 생성되자마자 (활성화될 때) 제일 먼저 실행

2) Start() = 모든 Awake가 끝난 뒤, 그리고 첫 번째 Update()가 실행되기 직전에 호출

* 현재 상황에선 Start를 써도 무방함

 

2. BoxCollider2D backgroundCollider = GetComponent<BoxCollider2D>();

>> 해당 오브젝트에 적용될 BoxCollider 2D를 backgroundCollider로 설정하고, GetComponent로 적용함

 

3. width = backgroundCollider.size.x;

오브젝트에 BoxCollider2D가 있으면, 자동으로 해당 오브젝트의 가로,세로 길이를 가져올 수 있습니다.

뒤에 .size.x를 붙이면 가로 길이 .size.y를 붙이면 세로 길이를 의미함

 

4.  if(transform.position.x <= -width)면 Reposition 함수가 실행되게 처리.

즉, 오브젝트(배경)의 중간 값(x)이  오브젝트의 가로길이보다 뒤에 있다면 Reposition 함수 실행

 

5. 위 코딩에는 안 나오지만, 배경 오브젝트를 복사해서 기존 배경 오브젝트 오른쪽에 이어지게 위치 조정해두면 됨.

그러면 게임 화면에서는 끊김 없이 이어지는 것 처럼 보임

 

6. transform.position은 위에도 나왔지만 Vector3D만 가능하지만, 현재는 2D에 적용해야 하기에

(Vector 2) transform.position 로 기재하여 z축을 버리고 2D 좌표로 변환.

 

 

 

저작자표시 비영리 변경금지 (새창열림)

'✏️ 취미 > 코딩' 카테고리의 다른 글

🕹️ 티스토리 헬로우(hello) 스킨 다크모드 없애는 법  (0) 2026.01.14
[C#] Text Rpg 예시  (0) 2025.09.03
[공부] 2D 유니런(유니티+런) 게임 제작 - player 총합 (4)  (3) 2025.08.17
[공부] 2D 유니런(유니티+런) 게임 제작 - (3)  (2) 2025.08.17
[공부] 2D 유니런(유니티+런) 게임 제작 - (2)  (3) 2025.08.17
'✏️ 취미/코딩' 카테고리의 다른 글
  • 🕹️ 티스토리 헬로우(hello) 스킨 다크모드 없애는 법
  • [C#] Text Rpg 예시
  • [공부] 2D 유니런(유니티+런) 게임 제작 - player 총합 (4)
  • [공부] 2D 유니런(유니티+런) 게임 제작 - (3)
9년차 세무사 / 취미 기록
9년차 세무사 / 취미 기록
📌하이엔드 세무회계 조진혁 대표세무사 🏡 서울특별시 강남구 테헤란로70길 13, 7층(선릉) 📞 상담 문의 010-3463-7897 / 02-565-7897
  • 9년차 세무사 / 취미 기록
    스타트업 옆 세무사
    9년차 세무사 / 취미 기록
  • 전체
    오늘
    어제
  • 링크

    • 공식 홈페이지
    • 카카오톡 채널 상담
    • 네이버 지도
  • 공지사항

    • 📌 세무기장 후기 모음
    • 📌 조진혁 세무사 소개
    • 📌 세무사가 필요한 경우 / 수수료
    • 카테고리 (76)
      • 🌳 스타트업 칼럼 (38)
        • IT·앱·게임 개발사 (20)
        • 디자인·영상 제작사 (7)
        • 전문직 (4)
        • 다양한 스타트업 (7)
      • 📋 세무·회계·HR 칼럼 (15)
        • 법인 세무 (9)
        • 예규 판례 (5)
        • 회계 (0)
        • 인사 노무 근로기준법 (1)
      • 📂 자료·노션 템플릿 공유 (4)
      • ✏️ 취미 (19)
        • 코딩 (12)
        • 일본어 (6)
        • 농구 (1)
  • 최근 글

  • 04-02 15:46
  • hELLO· Designed By정상우.v4.10.4
9년차 세무사 / 취미 기록
[공부] 2D 유니런(유니티+런) 게임 제작 - 배경 (5)
상단으로

티스토리툴바