using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class CollisionHandler : MonoBehaviour
{
public float nextLevelDelayTime;
AudioSource audioSource;
public AudioClip crashSound;
public AudioClip successSound;
bool isTransition = false;
private void Start()
{
audioSource = GetComponent<AudioSource>();
}
private void OnCollisionEnter(Collision collision)
{
if (isTransition)
{
return;
}
switch (collision.gameObject.tag)
{
case "Friendly":
print("a");
break;
case "Finish":
FinishSuccessSequence();
break;
case "Fuel":
print("c");
break;
default:
// 씬 다시 불러오기
StartCrashSequence();
break;
}
}
void FinishSuccessSequence()
{
// 움직임 금지하기
GetComponent<Move>().enabled = false;
audioSource.Stop();
// 마지막에 도달했을때 소리 재생
audioSource.PlayOneShot(successSound);
// N초 후에 씬 재시작 하기
Invoke( "NextScene", nextLevelDelayTime);
isTransition = true;
}
void StartCrashSequence()
{
if (isTransition)
{
return;
}
// 움직임 금지하기
GetComponent<Move>().enabled = false;
audioSource.Stop();
// 부딪혔을때 소리 재생
audioSource.PlayOneShot(crashSound);
// N초 후에 씬 재시작 하기
Invoke( "LoadScene", nextLevelDelayTime);
isTransition = true;
}
private void NextScene()
{
// 다음 레벨로 넘어가기
int CurrentScene = SceneManager.GetActiveScene().buildIndex;
int nextScene = CurrentScene + 1;
// 마지막 레벨(스테이지)을 클리어하면 처음 레벨로 돌아가기
if ( nextScene == SceneManager.sceneCountInBuildSettings ) // 빌드세팅에 있는 씬의 개수 카운트해서 비교
{
nextScene = 0;
}
SceneManager.LoadScene(nextScene);
}
private void LoadScene()
{
//SceneManager.LoadScene(0);
// 현재 재생중인 씬을 다시 불러오기
int CurrentScene = SceneManager.GetActiveScene().buildIndex;
SceneManager.LoadScene(CurrentScene);
}
}
아래 코드를 사용해서 bool 값을 확인하여 두개 이상의 중복 사운드가 재생되지 않게 함.
if (isTransition)
{
return;
}
if (isTransition) { return; } 조건문은 isTransition이 true일 때, 이후의 코드를 실행하지 않도록 하기 위해 사용됩니다.
이는 중복 충돌 처리나 씬이 이미 재시작되고 있는 상황에서 추가적인 처리나 충돌 로직이 실행되지 않도록 하는 중요한 역할을 합니다.