210713
unity_beginner #16
c# script - GameManager 생성 / empty object - GameManager 생성
기존 FailZone에 있던 LoadLevel코드를 가져오고 FailZone 코드에는 GameManager 오브젝트를 찾아 RestartGame이라는 메세지를 보내도록 한다
기존 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에서 하는것이 유용하다.