재테크 IT 게임 전자제품 생활정보 알아보기

초간단 장애물 피하기 횡스크롤 점프 런닝 게임 제작 (강아지) : 소스코드

초간단 장애물 피하기 횡스크롤 점프 런닝 게임 제작
https://www.freepik.com/ 저작권 무료 이미지

강아지가 장애물을 피하면서 점프하고 달리는 간단한 2D 게임을 만들어 볼까 합니다.

Unity를 사용한 예제로, C# 스크립트와 간단한 Unity 씬을 설정하는 방법을 안내드리겠습니다.

Unity 프로젝트 설정

  1. Unity 설치: Unity Hub를 통해 Unity를 설치합니다.
  2. 새 프로젝트 만들기: Unity Hub에서 새로운 2D 프로젝트를 생성합니다.
  3. 필요한 리소스 추가: 강아지 캐릭터와 장애물 이미지를 준비하거나 Unity의 기본 이미지를 사용합니다.

추천 툴 및 리소스

  • 게임 리소스: OpenGameArt, Kenney.nl (무료 아트 리소스)
  • 게임 튜토리얼: YouTube에서 "Unity Game Development tutorial" 또는 "Godot tutorial" 등을 찾아보세요.
  • 음악 및 사운드 효과: freesound.org에서 무료 사운드를 찾을 수 있습니다.

간단한 인디게임은 작은 규모로 시작해도 재미있고 충분히 의미 있는 작품이 될 수 있습니다.

개발 과정에서 배우고 성장하는 것도 큰 재미일 것입니다!

게임의 기본 구조

  • 플레이어(강아지): 달리기와 점프 동작을 합니다.
  • 장애물: 강아지가 피해야 할 장애물입니다.
  • 배경: 스크롤되는 배경으로 게임의 진행을 표현합니다.

필요한 컴포넌트

  • Rigidbody2D: 물리 엔진을 이용해 점프와 충돌을 처리합니다.
  • Collider2D: 충돌 감지를 위한 컴포넌트입니다.
  • Script: 강아지의 움직임과 장애물의 생성 등을 제어하는 스크립트입니다.

1. 강아지 캐릭터 스크립트 (PlayerController.cs)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float moveSpeed = 5f; // 이동 속도
    public float jumpForce = 10f; // 점프 힘
    private bool isGrounded; // 땅에 있는지 확인
    private Rigidbody2D rb; // Rigidbody2D 컴포넌트
    private Animator animator; // 애니메이션 컨트롤러

    public Transform groundCheck; // 땅 체크 위치
    public LayerMask groundLayer; // 땅 레이어

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        // 점프
        isGrounded = Physics2D.OverlapCircle(groundCheck.position, 0.1f, groundLayer);

        if (isGrounded && Input.GetKeyDown(KeyCode.Space))
        {
            rb.velocity = Vector2.up * jumpForce;
        }

        // 달리기
        float move = Input.GetAxis("Horizontal");
        rb.velocity = new Vector2(move * moveSpeed, rb.velocity.y);

        // 애니메이션
        animator.SetFloat("Speed", Mathf.Abs(move));

        if (!isGrounded)
        {
            animator.SetBool("isJumping", true);
        }
        else
        {
            animator.SetBool("isJumping", false);
        }
    }
}

설명:

  • moveSpeed: 강아지가 달리는 속도입니다.
  • jumpForce: 점프의 높이입니다.
  • isGrounded: 강아지가 땅에 닿아 있는지 확인하는 변수입니다.
  • groundCheck: 강아지가 땅에 있는지 체크하는 위치입니다.
  • groundLayer: 땅과의 충돌을 확인하는 레이어입니다.
  • animator: 달리기와 점프에 따른 애니메이션을 제어합니다.

2. 장애물 스크립트 (Obstacle.cs)

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Obstacle : MonoBehaviour
{
    public float moveSpeed = 5f;

    void Update()
    {
        // 장애물이 왼쪽으로 이동
        transform.Translate(Vector2.left * moveSpeed * Time.deltaTime);
        
        // 화면 밖으로 나가면 오브젝트 삭제
        if (transform.position.x < -10f)
        {
            Destroy(gameObject);
        }
    }
}
설명:

  • 장애물이 왼쪽으로 이동하며, 화면 밖으로 나가면 자동으로 삭제됩니다.

3. 배경 스크립트 (BackgroundScroller.cs)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BackgroundScroller : MonoBehaviour
{
    public float scrollSpeed = 0.5f;
    private Vector2 startPosition;

    void Start()
    {
        startPosition = transform.position;
    }

    void Update()
    {
        // 배경이 일정 속도로 이동
        float newPos = Mathf.Repeat(Time.time * scrollSpeed, 20f);
        transform.position = startPosition + Vector2.left * newPos;
    }
}

설명:

  • 배경이 일정 속도로 왼쪽으로 스크롤되며, 화면 끝에 도달하면 다시 반복됩니다.

4. 게임 오브젝트 설정

  1. 플레이어 설정: Unity에서 Player 오브젝트를 만들고, Rigidbody2D와 BoxCollider2D를 추가합니다. 그리고 PlayerController 스크립트를 적용합니다. groundCheck는 Player 오브젝트 아래에 빈 오브젝트로 만들어 위치를 설정해줍니다.
  2. 장애물 설정: Obstacle 오브젝트를 만들고, Obstacle 스크립트를 적용합니다.
  3. 배경 설정: Background 오브젝트를 만들어, BackgroundScroller 스크립트를 적용합니다.

5. 애니메이션 설정 (Optional)

  • 강아지의 달리기와 점프 애니메이션을 만들고, Animator 컨트롤러에서 속도와 점프 여부에 따라 애니메이션을 변경하도록 설정할 수 있습니다.

6. 장애물 생성 (게임 로직 추가)

게임이 진행됨에 따라 일정 간격으로 장애물을 생성하려면, ObstacleSpawner.cs 같은 스크립트를 만들어 장애물을 일정 시간마다 생성하게 할 수 있습니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ObstacleSpawner : MonoBehaviour
{
    public GameObject obstaclePrefab;
    public float spawnInterval = 2f;
    private float timer;

    void Update()
    {
        timer += Time.deltaTime;

        if (timer >= spawnInterval)
        {
            SpawnObstacle();
            timer = 0f;
        }
    }

    void SpawnObstacle()
    {
        Vector3 spawnPosition = new Vector3(10f, -2f, 0f); // 장애물 생성 위치
        Instantiate(obstaclePrefab, spawnPosition, Quaternion.identity);
    }
}

7. 최종 테스트

모든 요소가 잘 연결되었는지 확인하고, 게임을 실행하여 플레이어가 장애물을 피하고 점프하는 동작을 확인합니다. 게임이 잘 동작하면, 점차 더 많은 장애물, 배경, 점수 시스템 등을 추가해 나갈 수 있습니다.

이렇게 간단한 2D 달리기 게임을 Unity로 만들 수 있습니다.

게임을 더 재미있게 만들려면 애니메이션, 사운드 효과, 점수 시스템 등도 추가할 수 있습니다.

저는 프로그래머가 아니라 아무것도 모르고 맨땅에 헤딩인 상황인데 AI와 여러 무료 툴, 무료 사이트 등의 도움을 받아 도전해 보려 합니다.

 

 

TOP