본문 바로가기
유니티/닷지 게임 만들기

Dodge Game 만들기 #4 - 점수 시스템과 아이템 추가

by 찡사랑방 2024. 11. 18.
728x90
728x90

이번 포스팅에서는 플레이어가 게임에서 도전 과제를 느끼고 몰입할 수 있도록 점수 시스템 아이템 기능을 추가해 보겠습니다. 점수 시스템은 플레이어가 더 높은 기록을 달성하려는 동기를 부여하며, 아이템은 게임에 변화를 주어 재미를 더할 수 있습니다.


1. 점수 시스템 구현

1.1 ScoreManager 스크립트 작성

  1. Assets > Scripts 폴더에 ScoreManager.cs라는 새 스크립트를 생성합니다.
  2. 아래와 같이 작성합니다
using UnityEngine;
using UnityEngine.UI;

public class ScoreManager : MonoBehaviour
{
    public int score = 0;       // 현재 점수
    public Text scoreText;      // 점수 UI 텍스트

    void Start()
    {
        UpdateScoreUI();
    }

    public void AddScore(int amount)
    {
        score += amount;
        UpdateScoreUI();
    }

    void UpdateScoreUI()
    {
        scoreText.text = "Score: " + score;
    }
}

 

 

   3. 이 스크립트는 점수를 관리하고 UI에 실시간으로 업데이트합니다.

1.2 점수 UI 추가

  1. Canvas에 텍스트 UI를 추가합니다:
    • **Hierarchy > Create > UI > Text (TextMeshPro)**를 선택하여 ScoreText 오브젝트를 생성합니다.
    • 텍스트 내용을 기본적으로 Score: 0으로 설정합니다.
    • 위치는 화면 상단에 적절히 배치합니다.
  2. ScoreManager 스크립트를 새 빈 오브젝트(GameManager)에 추가합니다.
  3. Inspector에서 scoreText 필드에 ScoreText를 드래그하여 연결합니다.

1.3 적 처치 시 점수 추가

  1. EnemyDamage 스크립트를 수정하여 적이 파괴될 때 점수를 추가합니다
using UnityEngine;

public class EnemyDamage : MonoBehaviour
{
    public int damage = 1;        // 적이 줄 피해량
    public int scoreValue = 10;  // 적 처치 시 추가될 점수

    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.CompareTag("Player"))
        {
            PlayerHealth playerHealth = other.GetComponent<PlayerHealth>();
            if (playerHealth != null)
            {
                playerHealth.TakeDamage(damage);
            }
            ScoreManager scoreManager = FindObjectOfType<ScoreManager>();
            if (scoreManager != null)
            {
                scoreManager.AddScore(scoreValue);
            }
            Destroy(gameObject);
        }
    }
}

 

 

    2. Enemy 프리팹에서 scoreValue를 10으로 설정합니다.


2. 아이템 추가

아이템은 게임에 변화를 주어 플레이어에게 새로운 기회를 제공합니다. 여기에서는 체력 회복 아이템을 추가하겠습니다.

2.1 HealthPickup 스크립트 작성

  1. Assets > Scripts 폴더에 HealthPickup.cs라는 새 스크립트를 생성합니다.
  2. 아래와 같이 작성합니다
using UnityEngine;

public class HealthPickup : MonoBehaviour
{
    public int healAmount = 1; // 회복량

    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.CompareTag("Player"))
        {
            PlayerHealth playerHealth = other.GetComponent<PlayerHealth>();
            if (playerHealth != null)
            {
                playerHealth.TakeDamage(-healAmount); // 체력 회복
            }
            Destroy(gameObject); // 아이템 제거
        }
    }
}

 

2.2 체력 아이템 생성

  1. Hierarchy > Create > 2D Object > Sprite를 선택하여 체력 아이템 오브젝트를 생성합니다.
    • 이름: HealthPickup
    • 스프라이트: 체력과 관련된 아이콘(예: 하트 이미지)
  2. HealthPickup 오브젝트에 Circle Collider 2D를 추가하고 Is Trigger를 체크합니다.
  3. HealthPickup 오브젝트에 HealthPickup 스크립트를 추가합니다.
  4. Assets > Prefabs 폴더에 드래그하여 프리팹으로 저장합니다.

2.3 아이템 스폰 추가

  1. 기존의 EnemySpawner 스크립트를 활용하여 아이템을 생성합니다
public GameObject healthPickupPrefab; // 아이템 프리팹
public float itemSpawnInterval = 10f; // 아이템 생성 간격

void Start()
{
    InvokeRepeating("SpawnEnemy", 1f, spawnInterval);
    InvokeRepeating("SpawnHealthPickup", 5f, itemSpawnInterval);
}

void SpawnHealthPickup()
{
    Vector2 spawnPosition = Random.insideUnitCircle * spawnRadius;
    Instantiate(healthPickupPrefab, spawnPosition, Quaternion.identity);
}

 

 

   2. EnemySpawner 오브젝트에서 healthPickupPrefab 필드에 HealthPickup 프리팹을 연결합니다.


3. 테스트 및 조정

  1. Play 모드로 실행
    • 적이 파괴될 때 점수가 증가하는지 확인합니다.
    • 아이템이 생성되고, 플레이어와 충돌 시 체력이 회복되는지 확인합니다.
  2. 난이도와 밸런스 조정
    • **아이템 생성 간격(itemSpawnInterval)**이나 **체력 회복량(healAmount)**을 조정하여 게임 난이도를 적절히 설정합니다.
    • 점수 증가량(scoreValue)을 조정하여 플레이어가 성취감을 느낄 수 있도록 조율합니다.

4. 다음 단계 예고

이번 포스팅에서는 점수 시스템 체력 회복 아이템을 추가해 게임에 도전 과제와 재미 요소를 더했습니다. 이제 게임이 플레이어에게 더 많은 동기를 부여할 수 있게 되었네요! 다음 포스팅에서는 최고 점수 저장 및 점수판 시스템을 추가하여, 플레이어가 자신의 기록을 확인하고 경쟁할 수 있는 환경을 만들어 보겠습니다.

다음 포스팅에서 만나요! 🕹️

728x90