
혹시나 했는데 폰으로 실행해보면 또 지난번처럼 성공해도 멈추지 않고 제한시간이 종료될때 까지 가요~;; 유니티에서는 정상 작동하구요. 지난번이랑 순서도 똑같이 에러가 나고있네요^^;;
게임매니저.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; //시간이 지나가게
using System.Linq; //카드섞기
using UnityEngine.SceneManagement;
public class gameManager : MonoBehaviour
{
public GameObject card;
public Text timeTxt; //시간이 지나가게
float time = 0.0f; //시간이 지나가게
public static gameManager I; //게임메니저싱글톤화
public GameObject quit;
public GameObject retryBtn;
public GameObject firstCard;
public GameObject secondCard;
public AudioClip match;
public AudioSource audioSource;
public GameObject endTxt;
public GameObject endPanel;
public GameObject endPanel2;
public GameObject endPanel3;
public int level = 1; // 레벨을 계산하기위해//public int level = private int level (해킹막기위함)레벨세분화할때
public Transform cards;
void Awake()//게임메니저싱글톤화
{
Application.targetFrameRate = 60; //프레임조절
I = this; //게임메니저싱글톤화
}
// Start is called before the first frame update
void Start()
{
if (level == 1)
{
Time.timeScale = 1.0f;
int[] mongsyong = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7 };
mongsyong = mongsyong.OrderBy(item => Random.Range(-1.0f, 1.0f)).ToArray(); //랜덤하게 카드섞기(for문 안에있으면 같은카드여러장나옴! 밖으로빼줘야됨)
for (int i = 0; i < 16; i++) //i++는 i에 1씩 증가시켜라/
{
GameObject newCard = Instantiate(card); // newCard수정가능하게함
newCard.transform.parent = cards.transform; //newcard를 cards로 옮기라
float x = (i / 4) * 1.4f - 2.1f; //0.1.2.3/ 4.5.6.7/8.9.10.11/12.13.14.15.16/ 4개씩 묶음 (중앙으로 맞추기위해 -2.1f)
float y = (i % 4) * 1.4f - 3.0f;//4로나눈 나머지를 이용해서 계단식으로 나타나는 부분을 큐브모양으로 바꿀 수있음(중앙으로 맞추기위해 -3.0f)
newCard.transform.position = new Vector3(x, y, 0);
// this.transform.localScale = new Vector3(1.0f, 0.0f, 0.0f); (카드장수 많아지면 카드사이즈 줄일때 필요한 코드~!!)
string mongsyongName = "mongsyong" + mongsyong[i].ToString(); //이미지 불러오기, 몽숑 i번째 숫자를 불러와서 그것을 문자로 바꾼다음 합쳐줌
newCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>(mongsyongName);
// newcard에 sprite이미지를 (front에 sprite) 불러와서 = resources에서 불러온 이미지(mongsyongName)로 바꿔줌
}
}
if (level == 2 )
{
int level = 2;
Time.timeScale = 1.0f;
int[] mongsyong = { 0, 0, 2, 2, 3, 3, 4, 4, 5, 5, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11 };
mongsyong = mongsyong.OrderBy(item => Random.Range(-1.0f, 1.0f)).ToArray(); //랜덤하게 카드섞기
for (int i = 0; i < 20; i++) //for 반복적 작업(i값을 반복 출력 : 언제까지 반복할것인가/ i++는 i에 1씩 증가시켜라/ 20장까지반복
{
GameObject newCard = Instantiate(card);
newCard.transform.parent = cards.transform; //newcard를 cards로 옮기라
float x = (i % 4) * 1.4f - 2.1f; //0.1.2.3/ 4.5.6.7/8.9.10.11/12.13.14.15.16/ 4개씩 묶음
float y = (i / 4) * 1.4f - 4.0f;//4로나눈 나머지를 이용해서
newCard.transform.position = new Vector3(x, y, 0);
string mongsyongName = "mongsyong" + mongsyong[i].ToString();
newCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>(mongsyongName);
}
}
if (level == 3)
{
int level = 3;
Time.timeScale = 1.0f;
int[] mongsyong = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11 };
mongsyong = mongsyong.OrderBy(item => Random.Range(-1.0f, 1.0f)).ToArray(); //랜덤하게 카드섞기
for (int i = 0; i < 24; i++) //for 반복적 작업(i값을 반복 출력 : 언제까지 반복할것인가/ i++는 i에 1씩 증가시켜라/ 20장까지반복
{
GameObject newCard = Instantiate(card);
newCard.transform.parent = cards.transform; //newcard를 cards로 옮기라
float x = (i % 4) * 1.4f - 2.1f; //0.1.2.3/ 4.5.6.7/8.9.10.11/12.13.14.15.16/ 4개씩 묶음
float y = (i / 4) * 1.4f - 4.0f;//4로나눈 나머지를 이용해서
newCard.transform.position = new Vector3(x, y, 0);
string mongsyongName = "mongsyong" + mongsyong[i].ToString();
newCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>(mongsyongName);
}
}
}
private int LoadScene(string v) //if (level1 == LoadScene("MainScene"))넣을때 이거 넣으니까 오류사라짐
{
throw new System.NotImplementedException();
}
// Update is called once per frame
void Update()
{
time += Time.deltaTime; //시간이 지나가게
timeTxt.text = time.ToString("N2"); //시간이 지나가게
if (level==1 && time > 30f)
{
endPanel.SetActive(true);
Time.timeScale = 0.0f;
}
if (level == 2 && time > 30f)
{
endPanel.SetActive(true);
Time.timeScale = 0.0f;
}
if (level == 3 && time > 40f)
{
endPanel.SetActive(true);
Time.timeScale = 0.0f;
}
}
public void isMatched()
{
int cardsLeft = GameObject.Find("cards").GetComponentsInChildren<card>().Where((card) => card.gameObject.activeSelf == true).Count(); //1단계성공 후에도 카드2장남음 인식 못하고 제한시간까지 지난 후 종료되는 문제
Debug.Log(cardsLeft);
string firstCardImage = firstCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite.name; //첫번째 카드 불러오기
string secondCardImage = secondCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite.name; //두번째 카드 불러오기
if (firstCardImage == secondCardImage)
{
audioSource.PlayOneShot(match);
firstCard.GetComponent<card>().destroyCard();
secondCard.GetComponent<card>().destroyCard();
if (cardsLeft == 2)// if (cardsLeft == 2)에서 변경.1단계성공 후에도 카드2장남음 인식 못하고 제한시간까지 지난 후 종료되는 문제
{
//level = +1; 레벨올리는 시점을 넥스트버튼 하나로 고정되어있어 중복되어 삭제
GameEnd();
Time.timeScale = 0.001f; //시간종료 0.0f;에서 변경..1단계성공 후에도 카드2장남음 인식 못하고 제한시간까지 지난 후 종료되는 문제
}
else if (cardsLeft == 2 && level == 3)//cardsLeft == 2)에서 변경
{
GameEnd();
Time.timeScale = 0.001f; //시간종료.0.0f;에서 변경
}
}
else
{
firstCard.GetComponent<card>().closeCard();
secondCard.GetComponent<card>().closeCard();
}
firstCard = null; //메칭이 끝나면 첫번째 카드비워주기
secondCard = null;//매칭이 끝나면 두번재 카드비워주기
}
void GameEnd()
{
Debug.Log(4);
if (level == 1)
{
endPanel2.SetActive(true);
}
else if (level == 2)
{
endPanel2.SetActive(true);
}
else if (level == 3)
{
endPanel3.SetActive(true);
}
Time.timeScale = 0.001f;
//endPanel.SetActive(true);
// endPanel2.SetActive(true);
//Time.timeScale = 0.0f;
}
public void GameQuit()
{
Application.Quit();
}
public void retry()
{
if (level == 1)
{
SceneManager.LoadScene("MainScene");
}
if (level == 2)
{
SceneManager.LoadScene("MainScene2");
}
if (level == 3)
{
SceneManager.LoadScene("MainScene3");
}
}
// public void nextBtn()
// {
// SceneManager.LoadScene("MainScene2");
// }
}
