본문 바로가기
VR 팀프로젝트/[GroundZero] 제작 일지

GroundZero 제작일지 - GameOverScene 수정 및 GameClearScene

by 잰쟁 2024. 1. 12.
728x90

 

▼ 수정할 부분

- InverseSphere --> SkyBox로 변경

- 게임결과를 나타내줄 오브젝트들 회전 방식 바꿔주기

- GameScene에서 결과값들 GameOverScene에 받아오기

- Continue 텍스트가 활성화 된 후 Controller의 아무 버튼이나 누르면 LobbyScene으로 돌아가기(Scene 전환)

- Score 텍스트 애니메이션 등 연출하기


▶ InverseSphere --> SkyBox로 변경

 

- 기존에 넣은 이미지 보다는 SkyBox가 더 화질이 좋고 더 asset이 다양하다고 판단하여 변경했다.

 

Window -> Rendering -> Lighting -> Environment -> Skybox Material을 원하는 Material로 바꿔준다.


 

▶ 오브젝트 회전 방식 바꾸기

 

- 기존에 Animation으로 오브젝트를 회전하던 방식이 조금 부자연스러운 것 같아서 코드로 오브젝트를 회전시키는 것으로 변경하였다.

- 각 오브젝트에 붙여둔 Animator를 제거한 후, 오브젝트들 리스트를 만들어서 foreach문을 돌며 회전시켜 주었다.

private void Update()
{
    foreach (GameObject gameObject in gameResultObjects)
    {
        gameObject.transform.Rotate(new Vector3(0, 0.8f, 0) * 180 * Time.deltaTime);
    }
}

 


▶ GameScene에서 결과값들 GameOverScene에 받아오기

 

- GameScene의 플레이한 결과값을 받아오기 위해 팀원이 만들어둔 InfoManager 스크립트에 아래와 같이 추가해주었다.

- InfoManager가 싱글톤이기 때문에 아무 곳에서나 접근이 가능하여 여기에 추가한 이유도 있다.

 

**kills : 처치한 적의 수

**blockedBullet : 방패로 막은 총알 수

**totalDamage : 적에게 가한 총 데미지

**itemEquiped: 얻은 웨이브 아이템 수

**score : 게임 점수

 

각각 항목들이 해당되는 곳에 위에 만들어준 InfoManager의 인스턴스를 활용하여 처리해주었다.

 

**GameMain 스크립트

**Shield 스크립트

**Reward 스크립트

**Enemy1Move 스크립트

 

InfoManager에 처리해준 것을 GameOverMain 스크립트에 가져와 UI로 보여지게 하였다.


▶ Continue 텍스트가 활성화 된 후 Controller의 아무 버튼이나 누르면 LobbyScene으로 돌아가기(Scene 전환)

 

- bool isContinue를 사용하여 Start()가 되면 false로 설정하고 contiune 텍스트가 뜬 후에 isContinue를 true로 바꾼 후,

isContinue가 true일때만 Scene전환 메서드를 호출하도록 하였다.

private bool isContinue;
void Start()
{
    this.isContinue = false;
    this.result.SetActive(true);
    this.GameOver();

    this.enemyKills_txt.text = InfoManager.Instance.kills.ToString();
    this.blockedBullets_txt.text = InfoManager.Instance.blockedBullet.ToString();
    this.itemEquiped_txt.text = InfoManager.Instance.itemEquiped.ToString();
    this.totalDamge_txt.text = InfoManager.Instance.totalDamage.ToString();

}

private void Update()
{
    foreach (GameObject gameObject in gameResultObjects)
    {
        gameObject.transform.Rotate(new Vector3(0, 0.8f, 0) * 180 * Time.deltaTime);
    }

    if (this.isContinue == true)
    {
        this.GoLobby();
    }
}
private IEnumerator CoShowGameOver()
{
    this.defeat_txt.gameObject.SetActive(true);
    yield return new WaitForSeconds(1.5f);
    this.score.SetActive(true);

    for (int i = 0; i <  InfoManager.Instance.score + 1; i += 10)
    {
        this.score_txt.text = i.ToString();
        yield return null;
    }

    yield return new WaitForSeconds(0.5f);

    for (int i = 0; i < gameResultLists.Length; i++)
    {
        this.gameResultLists[i].gameObject.SetActive(true);
        yield return new WaitForSeconds(1f);
    }

    yield return new WaitForSeconds(1f);
    this.continue_txt.gameObject.SetActive(true);

    this.isContinue = true;
}

private void GoLobby()
{
    if (OVRInput.Get(OVRInput.RawButton.Any))
    {
        InfoManager.Instance.InitGameScore();
        SceneManager.LoadScene("LobbyScene");
    }
}

 


▶ Score 텍스트 애니메이션 등 연출하기

 

- Score 텍스트 부분에 Scale을 변경해주는 Animation을 넣어주고

 

단순히 크기가 커졌다 작아졌다하는 것이 밋밋하여 점수가 0에서 부터 최종스코어까지 +10씩 빠르게 더해지도록 GameOver 정보를 보여주는 코루틴 메서드에 아래와 같이 추가해주었다. 

 

 

 


 

▶ 수정한 GameOverScene 모습

 

- 더불어 게임결과에 대한 설명이 영어로 되어있어 이해도가 떨어질 것을 염려하여 한글로 바꿔주었다!

 

 


▶ GameClearScene 

- 웨이브3까지 다 적을 처치한 후 나오는 GameClearScene도 GameOverScene과 동일하게 구성을 하되, SkyBox와 이펙트를 변경하여 연출하였다. (좀 더 희망적인 느낌!!)

 

▶ GameClearScene 모습