void Start()
{
Time.timeScale = 1f;
StartCoroutine("TextChange"); // 시작 시 TextChange 코루틴 시작
}
IEnumerator TextChange()
{
// 15초 딜레이를 부여
yield return new WaitForSeconds(15.0f);
// 글씨(하양 => 빨강 / 빨강 => 하양)으로 계속 변경
while (true)
{
TimeTxt.color = new Color(255, 0, 0);
yield return new WaitForSeconds(0.5f);
TimeTxt.color = new Color(255, 255, 255);
yield return new WaitForSeconds(0.5f);
}
}
게임 시작시 코루틴을 사용하여 TextChange를 실행 시킨 다음 코루틴의 yield를 사용하여 15.0f초 동안 딜레이를 주고 while의 무한을 사용하여 TimeTxt의 색을 빨강, 하양으로 0.5초마다 변경하게 함
public class AudioManager : MonoBehaviour
{
public static AudioManager instance;
public AudioClip[] clip;
public AudioSource audioSource;
private bool soundCheck = true;
private void Awake()
{
if (instance == null)
{
instance = this;
audioSource = GetComponent<AudioSource>();
// 게임 시작 시 사운드
instance.audioSource.clip = clip[0];
instance.audioSource.Play();
//씬을 이동할때 해당 오브젝트를 파괴하지 않고 그대로 씬을 넘어가는 코드
DontDestroyOnLoad(gameObject);
}
else
{
//싱글톤이 2개가 존재할때 instance가 이미 있으므로 나머지를 파괴하여 하나만 존재케하는 코드
Destroy(gameObject);
}
}
private void Update()
{
// 게임매니저의 instance가 존재하고 soundCheck가 true일 경우
if(Gamemanager.instance?.time > 15.0f && soundCheck)
{
// 빠른 사운드로 AudioClip변경
instance.audioSource.clip = clip[1];
// AudioClip 변경 후 재생
instance.audioSource.Play();
soundCheck = false;
}
}
게임 시작 시 사운드 클립의 0번째의 사운드를 시작하게 Gamemanger.instance의 null처리를 확인 한 후에 soundChek으로 1번만 실행하게 처리하고 클립의 1번째 사운드로 변경 후 사운드 출력하게 함
// 게임 재시작, 시작할 때 씬 이동
public void ReStart()
{
SceneManager.LoadScene("MainScene");
}
// 1스테이지
public void Stage1()
{
// StageCard의 int형 변수에 6을 저장
PlayerPrefs.SetInt("StageCard", 6);
ReStart();
}
// 2스테이지
public void Stage2()
{
PlayerPrefs.SetInt("StageCard", 8);
ReStart();
}
// 3스테이지
public void Stage3()
{
PlayerPrefs.SetInt("StageCard", 10);
ReStart();
}
public class Board : MonoBehaviour
{
public GameObject card;
void Start()
{
// 저장했던 StageCard의 값을 매개변수로 CardSetting실행
CardSetting(PlayerPrefs.GetInt("StageCard"));
}
private void CardSetting(int cardCount)
{
// int형 List arr를 선언 후 cardCount만큼 List에 저장
List<int> arr = new List<int>();
for (int i = 0; i < cardCount; i++)
{
arr.Add(i);
arr.Add(i);
}
// arr의 값을 랜덤으로 섞어서 배치
arr = arr.OrderBy(x => Random.Range(0f, cardCount-1)).ToList(); //Linq를 사용한곳
}
버튼마다 PlayerPrefs를 이용하여 버튼을 눌러 매개변수의 값을 변경시켜 리스트의 개수를 다르게 함
// List인 arr의 개수만큼 카드 오브젝트를 반복 생성
for (int i = 0; i < arr.Count; i++)
{
GameObject go = Instantiate(card, this.transform);
float x = (i % 4) * 1.4f - 2.1f;
float y;
// 난이도(카드 수)에 따라서 생성되는 카드 위치 변경
if (cardCount == 6)
{
y = (i / 4) * 1.4f - 1.8f;
}
else if (cardCount == 8)
{
y = (i / 4) * 1.4f - 3.0f;
}
else
{
y = (i / 4) * 1.4f - 3.8f;
}
go.transform.position = new Vector2(x, y);
go.GetComponent<Card>().Setting(arr[i]);
}
Gamemanager.instance.CardCount = arr.Count;
}
리스트의 개수만큼 Instantiate를 이용하여 카드의 개수를 증가시키고 위치를 카드의 개수에 따라서 다르게 함
// StageCard라는 int형 변수에 number의 값을 저장
PlayerPrefs.SetInt("StageCard", number);
// int형 변수인 StageCard의 값을 가져옴
PlayerPrefs.GetInt("StageCard");
// 조건으로서 Gamemanager.instance가 Null인지 여부 확인 후
// Null이 아닐 때 time의 변수 값을 15.0f와 비교
Gamemanager.instance?.time > 15.0f