Unity_beginner #16

haechi·2021년 7월 13일
0

unity

목록 보기
16/39

210713
unity_beginner #16


  • GameManager 만들기

c# script - GameManager 생성 / empty object - GameManager 생성

  1. 게임 restart 기능
    GameManager script 수정

기존 FailZone에 있던 LoadLevel코드를 가져오고 FailZone 코드에는 GameManager 오브젝트를 찾아 RestartGame이라는 메세지를 보내도록 한다

  1. 장애물 파괴 기능

기존 RedCoin내 장애물을 사라지게 하는 코드를 GameManager로 옮긴다.
위와 비슷한 방법으로 RedCoin에서 trigger가 발생 한 경우 GameManager에게 메세지를 전송하도록 한다.

RedCoin.cs

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

public class RedCoin : MonoBehaviour
{
    void OnTriggerEnter(Collider col)  // trigger 시
    {
        if (col.gameObject.name == "Ball")
        {
            GameObject.Find("GameManager").SendMessage("RedCoinStart");
            // 게임 매니저를 찾아 메세지 전송
            Destroy(gameObject); // 스크립트가 추가되어있는 게임 오브젝트를 뜻한다.
        }
    }

    
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

GameManager.cs

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

public class GameManager : MonoBehaviour
{
    void RestartGame()  // 게임을 재시작 하도록
    {
        Application.LoadLevel("Game");  // unity파일을 저장할 때 Game이라는 이름으로 저장했기 때문
    }

    void RedCoinStart()
    {
        DestroyObstacles();  // 장애물 파괴 함수 호출
    }
    void DestroyObstacles()  // 장애물을 파괴하는 함수
    {
        GameObject[] obstacles = GameObject.FindGameObjectsWithTag("Obstacle");
        for (int i = 0; i < obstacles.Length; i++)
        {
            Destroy(obstacles[i]);
        }
    }
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

GameManager를 통해서 이런 게임과 관련된 전반적인 컨트롤은 한곳에 모아두고 SendMessage를 통해서 발생한 사건을 알려주고 실제 처리를 GameManager에서 하는것이 유용하다.

참고
https://programmers.co.kr/learn/courses/1/lessons/705#

profile
공부중인 것들 기록

0개의 댓글