UniRun Platfrom 자동 생성

공재원
∙∙조회 4

UniRun Platform 자동생성 코드

csharp
using UnityEngine;

public class Platform : MonoBehaviour
{
    public GameObject[] obstacles;

    public float abstaclesRatio = 0.3f;

    private bool stepped = false;
    public int score = 10;
    private GameManager gameManager;

    private void Start()
    {
        GameObject findGo = GameObject.FindWithTag("GameController");
        gameManager = findGo.GetComponent<GameManager>();
    }

    private void OnEnable()
    {
        stepped = false;
        
        foreach (GameObject obstacle in obstacles)
        {
            obstacle.SetActive(Random.value < abstaclesRatio);
        }
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.collider.CompareTag("Player") && !stepped)
        {
            stepped = true;
            gameManager.AddScore(score);
        }
    }
}

Platform 코드 요약

코드설명
GameObject[] obstacles여러 장애물 오브젝트를 배열로 저장한다.
abstaclesRatio = 0.3f장애물이 활성화될 확률을 30%로 설정한다.
GameObject.FindWithTag("GameController")GameController 태그를 가진 오브젝트를 찾는다.
GetComponent<GameManager>()게임 매니저 컴포넌트를 가져온다.
OnEnable()오브젝트가 활성화될 때 실행한다.
stepped = false발판의 점수 획득 여부를 초기화한다.
foreach (GameObject obstacle in obstacles)배열에 있는 장애물을 하나씩 확인한다.
Random.value < abstaclesRatio설정한 확률에 따라 장애물의 활성화 여부를 결정한다.
obstacle.SetActive(...)장애물을 활성화하거나 비활성화한다.
OnCollisionEnter2D()다른 오브젝트와 충돌하기 시작할 때 실행한다.
CompareTag("Player")충돌한 오브젝트가 플레이어인지 확인한다.
!stepped아직 발판의 점수를 획득하지 않았는지 확인한다.
gameManager.AddScore(score)게임 매니저에 점수를 전달한다.

핵심 개념 정리

  • 게임 매니저 연결: GameObject.FindWithTag()로 GameController 태그를 가진 오브젝트를 찾고, GetComponent<GameManager>()로 게임 매니저를 가져온다.
  • 오브젝트 배열: GameObject[]에 여러 장애물을 저장하고, foreach로 각 장애물을 하나씩 확인한다.
  • 오브젝트 활성화: SetActive()로 장애물을 활성화하거나 비활성화한다.
  • 랜덤 장애물 생성: Random.value < abstaclesRatio로 확률을 확인해 장애물을 무작위로 활성화한다. 비율이 0.3f이면 각 장애물이 약 30% 확률로 활성화된다.
  • 활성화 시 초기화: OnEnable()은 오브젝트가 활성화될 때 실행되며, stepped = false로 발판을 다시 밟을 수 있도록 초기화한다.
  • 중복 점수 방지: stepped로 플레이어가 발판을 밟았는지 확인하고, 이미 밟았다면 점수를 다시 획득하지 못하도록 한다.
  • 충돌 감지: OnCollisionEnter2D()에서 CompareTag("Player")로 충돌한 오브젝트가 플레이어인지 확인한다.
  • 점수 추가: gameManager.AddScore(score)를 호출해 발판에 설정된 점수를 게임 매니저에 전달한다.

오늘은 UniRun게임에 발판을 주기적으로 생성하고 오브젝트들을 활성화 한 상태로 소환하거나 소환 되지 않는 상태로 생성하는 구문에 대해 초점을 두었다. 점수 추가나 게임의 전반적인 UI는 GameManager에서 다루었다.
UinRun 제작이 끝난 이후 쿠키런 스타일의 2D게임을 저번 Dodge게임과 동일하게 네비게이터와 드라이버로 나뉘어 제작을 하였고 이번엔 네비게이터로써 우리가 만들어야 하는 게임의 방향성과 기능들을 어떻게 활용할 것인지에 대하여 드라이버분께 설명드리며 제작을 하였다. 내일 제작이 마무리 될 것 같으니 자세한 코드와 의도는 내일 작성해보도록 하겠다.