커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
30초 종료 후 게임 재시작
undefined주차
북마크
김*희
댓글
3
추천
0
조회수
16
조회수
16
답변 완료

* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.

* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.


끝!을 눌러 게임을 다시 시작하면 카드 배치까지는 완료가 되는데

시작 타임이 0.00초에 고정되어 있고 한번 열린 카드가 다시 닫히지 않습니다.

스파르타 즉문즉답


gameManager.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Linq;


public class gameManager : MonoBehaviour
{
    public static gameManager I;
    public GameObject firstCard;
    public GameObject secondCard;
    public GameObject endText;
    public AudioClip match;
    public AudioSource audioSource;
    void Awake()
    {
        I = this;
    }


    public Text timeTxt;
    public GameObject card;
    float time;
    // Start is called before the first frame update
    void Start()
    {
        int[] rtans = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7 };
        rtans = rtans.OrderBy(item => Random.Range(-1.0f, 1.0f)).ToArray();


        for (int i = 0; i < 16; i++)
        {
            GameObject newCard = Instantiate(card);
            // newCard를 cards 안으로 옮겨줘
            newCard.transform.parent = GameObject.Find("cards").transform;


            float x = (i / 4) * 1.4f - 2.1f;
            float y = (i % 4) * 1.4f - 3.0f;
            newCard.transform.position = new Vector3(x, y, 0);


            string rtanName = "rtan" + rtans[i].ToString();
            newCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>(rtanName);
        }


    }


    // Update is called once per frame
    void Update()
    {
        time += Time.deltaTime;
        timeTxt.text = time.ToString("N2");
        if (time > 30f) {
            Invoke("GameEnd", 0f);
        }
    }


    public void isMatched()
    {
        //firstCard와 seondCard가 같은지 판단함
        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();


            int cardsLeft = GameObject.Find("cards").transform.childCount;
            if (cardsLeft == 2)
            {
                Invoke("GameEnd", 1f);
            }
        }
        else
        {
            firstCard.GetComponent<card>().closeCard();
            secondCard.GetComponent<card>().closeCard();
        }


        firstCard = null;
        secondCard = null;
    }


    void GameEnd()
    {
        Time.timeScale = 0f;
        endText.SetActive(true);
    }


}


card.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class card : MonoBehaviour
{
    public Animator anim;
    public AudioClip flip;
    public AudioSource audioSource;
    // Start is called before the first frame update
    void Start()
    {
        
    }


    // Update is called once per frame
    void Update()
    {
        
    }


    public void openCard()
    {
        audioSource.PlayOneShot(flip);
        anim.SetBool("isOpen", true);
        transform.Find("front").gameObject.SetActive(true);
        transform.Find("back").gameObject.SetActive(false);


        if (gameManager.I.firstCard == null) 
        {
            gameManager.I.firstCard = gameObject;        
        }
        else
        {
            gameManager.I.secondCard = gameObject;
            gameManager.I.isMatched();
        }
    }


    public void destroyCard()
    {
        Invoke("destroyCardInvoke", 0.5f);
    }


    void destroyCardInvoke()
    {
        Destroy(gameObject);
    }


    public void closeCard()
    {
        Invoke("closeCardInvoke", 1.0f);
    }


    void closeCardInvoke()
    {
        anim.SetBool("isOpen", false);
        transform.Find("back").gameObject.SetActive(true);
        transform.Find("front").gameObject.SetActive(false);
    }


}

endText.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;


public class endText : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {


    }


    // Update is called once per frame
    void Update()
    {


    }


    public void ReGame()
    {
        SceneManager.LoadScene("MainScene");
    }
}


취소
 공유
취소
댓글 0
댓글 알림
나의얼굴