게임을 시작하는 씬이다.
using UnityEngine.SceneManagement;
using UnityEngine;
public class Menu : MonoBehaviour
{
public GameObject tuto;
public void StartGame()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
}
public void ShowTuto()
{
tuto.SetActive(true);
}
public void HideTuto()
{
tuto.SetActive(false);
}
}
플레이어 사망 시 뜨는 화면이다.
(프리팹으로 생성 -> 프리팹인 GameManager에서 참조하기 위해)
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using UnityEngine;
public class FailedUI : MonoBehaviour
{
public Text MaxLevel;
public Text KillCount;
public GameManager gameManager;
private void OnEnable()
{
//kill, max level
MaxLevel.text = gameManager.GetLevel().ToString();
KillCount.text = gameManager.GetKillcount().ToString();
}
public void Restart()
{
//Destroy(gameManager.gameInfo);
//gameManager.ResetGameInfo();
gameManager.gameInfo.Reset();
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
public void GotoMain()
{
//gameManager.ResetGameInfo();
gameManager.gameInfo.Reset();
//Destroy(gameManager.gameInfo);
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex-1);
}
public void Quit()
{
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#else
Application.Quit();
#endif
}
}
레벨 클리어시 나타나는 화면이다.
약 2초 정도의 텀을 두고 사라진다.
(프리팹으로 생성 -> 프리팹인 GameManager에서 참조하기 위해)
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using UnityEngine;
public class ClearUI : MonoBehaviour
{
public Text KillCount;
public GameManager gameManager;
private void Start()
{
Invoke("Next", 2f);
}
private void OnEnable()
{
//kill, max level
//gameManager.gameInfo.IncreaseLevel();
KillCount.text = gameManager.GetKillcount().ToString();
}
private void Next()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
}
플레이 중에 보이는 화면이다.
프리팹으로 따로 생성했다. (이유는 하단에)
using UnityEngine.UI;
using UnityEngine;
public class PlayerUI : MonoBehaviour
{
GameManager gameManager;
public Player player;
public Image hpbar;
public Text hpText;
public GameObject PauseUI;
private bool isPause = false;
public void Start()
{
//gameManager = this.gameObject.transform.parent.gameObject.GetComponent<GameManager>();
//player = this.gameObject.transform.parent.gameObject.GetComponent<Player>();
//player = this.gameObject.transform.parent.transform.parent.gameObject.GetComponent<Player>();
}
private void Update()
{
PlayerHPbar();
if (Input.GetKeyDown(KeyCode.Escape))
{
PauseGame();
}
}
public void PlayerHPbar()
{
if (player != null)
{
//LivingEntity live = player.GetComponent<LivingEntity>();
float HP = player.getHealth();
//Debug.Log(HP);
hpbar.fillAmount = HP / 10;
hpText.text = string.Format("HP {0}/10", HP);
}
else
{
Debug.Log("No player");
}
}
public void PauseGame()
{
Time.timeScale = 0;
isPause = true;
if (isPause)
{
PauseUI.SetActive(true);
isPause = false;
}
}
}
처음에는 플레이어 UI를 플레이어 오브젝트의 자식으로 넣어뒀다. 하지만 이렇게 하니까 플레이어의 체력 정보를 받아오지 못하는 현상이 발생했다.
원인으로 예상되는 것은
이건 아직 이유를 밝혀내지 못했다.
예상되는 이유는 GameInfo와 Manager가 얽혀서 그런 것 같은데, 로그로 찍어봐도 알 수가 없다...