(5) 패배 판정 & 씬 변환
이번엔 패배판정과 결과에 따른 씬 변환까지 구현해보도록 하겠다
패배판정은 처음 설명에서도 말했듯 본인이 날린공이 본인의 Deadzone에 닿아야만 패배로 간주하기에
조건이 약간 까다롭다. 게다가 팽창하며 Deadzone에 닿은것 역시 인정하기 않기에 조건이 하나 더 붙게된다
우선 "본인이 날린공이 본인의 Deadzone에 닿아야만 패배로 처리" 이것부터 구현해보겠다
(이걸 위해 미리 세팅해둔 Deadzone과 구체의 태그들)
사실상 패배판정이 나는 순간 곧바로 씬변환이 일어나기 때문에 둘은 동시에, 같은 스크립트에 만들어야하고,
이번엔 트리거 역할을 해줄 Deadzone안에 새로운 스크립트를 만들어 넣어주도록 하겠다
using UnityEngine;
using UnityEngine.SceneManagement;
public class P1deadzone : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
BallController ball = collision.GetComponent<BallController>();
if (collision.gameObject.tag == "P1ball")
if (!ball.hasExpanded)
SceneManager.LoadScene("P2 Win");
}
}
각각의 경우가 다르기때문에 코드는 2개를 만들어 각각의 Deadzone에 넣어줄 것이며,
우선 Player1의 Deadzone에 들어갈 스크립트이다
private void OnTriggerEnter2D(Collider2D collision)
Deadzone과 충돌이 일어나는 순간
{
BallController ball = collision.GetComponent<BallController>();
변수 ball에 충돌한 오브젝트의 BallController 컴포넌트를 불러온다
if (collision.gameObject.tag == "P1ball")
만약 충돌한 오브젝트의 태그가 "P1ball"이어야 진입가능
(상대 구체가 내 Deadzone에 닿는것은 상관없기때문)
if (!ball.hasExpanded)
거기서 만약 구체가 확장을 하지 않은 상태라면
SceneManager.LoadScene("P2 Win");
패배로 간주. P2 Win이라는 씬으로 넘어간다
}
내가 날린 구체가 내 Deadzone에 닿았을때, 그리고 확장을 아직 하지 않은 상태의 구체일때.
이 2가지의 조건을 만족시켜주는 패배조건을 코드로 작성했다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class P2deadzone : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
BallController ball = collision.GetComponent<BallController>();
if (collision.gameObject.tag == "P2ball")
if (!ball.hasExpanded)
SceneManager.LoadScene("P1 Win");
}
}
P2deadzone에 들어가는 코드도 마찬가지이다. 위 코드에서 숫자만 바꿔주면 된다
SceneManager.LoadScene("P2 Win");
자 이제 "P2 Win", "P1 Win"이라는 씬 두개만 만들어주면 된다
우선은 간단하게 텍스트를 넣고 완성시켜보았다. 하지만 한가지 중요한것은 맨밑줄의 텍스트
"TAB TO RESTART"이다. 즉, 탭을 하는순간 다시 메인화면으로 돌아가는 스크립트를 하나 더 짜줘야한다는 의미이다
using System.Collections;
using System.Collections.Generic;
using UnityEditor.SearchService;
using UnityEngine;
using UnityEngine.SceneManagement;
public class ClearScene : MonoBehaviour
{
void Update()
{
if(Input.GetMouseButtonDown(0))
SceneManager.LoadScene("Main Scene");
}
}
이건 더 간단하다. 마우스를 클릭하는 순간 바로 "Main Scene"으로 돌아가게 만들어주면 된다
심지어 어느 상황이든 메인으로 돌아가는건 똑같기에 각각 다른 코드를 짜줄필요도 없이 하나를 같이 사용할 수 있다
각각의 씬에 빈 오브젝트를 만들어준뒤 "ClearScene" 스크립트를 넣어주자
모바일로 나올 게임이기에 텍스트에는 "TAB TO RESTART"라고 적혀있지만 우선은 컴에 맞춰 클릭으로 동작하게 하였다
한번 실행하여 확인해보자. 내가 날린 (팽창되지 않은) 구체가 내 Deadzone에 닿으면 씬이 변환되고,
그 상태에서 한번 클릭을 하면 다시 메인씬으로 돌아오는것을 확인할 수 있다