유니티

유니티 코인 먹기 게임 만들기 - 7 승리 판정과 재시작

당혜성 2025. 3. 28. 00:05

일단 승리와 패배 패널을 만들어 주자.

우클릭 -> UI -> Panel을 누르면 나온다.

패털과 텍스트를 잘 넣어주자.

 

재시작 버튼도 만들어보자. 

 

버튼 만들어주고 여기까지 알아서 만들어 보자.

그 후 게임매니저 스크립트에 들어가자.

 

using System.Collections;
using System.Collections.Generic;
using System.Net.Sockets;
using UnityEngine;
using UnityEngine.UI;

public class GameManager : MonoBehaviour
{
    public GameObject WinPanel; //추가된거
    public Text CoinText;
    int score;
    int coinCount;
    void Start()
    {
        coinCount = FindObjectsOfType<coin>().Length; //추가 된거
    }

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

    public void GotCoin()
    {
        score += 100;
        CoinText.text = $"점수:" + score + "점";
    }

    
}

추가된 코드를 보자. FindObjectsOfType <- 신에 존재하는 일치하는 타입이 있을 경우 반환. 이제 실행하면 Coin Counter가 8개가 되어있을 것이다.

코인이 없을 때 승리 패널 띄우기

일단 코드를 이렇게 만들자.

public void GotCoin()
{
    score += 100;
    CoinText.text = $"점수:" + score + "점";

    coinCount--;
    if(coinCount <=0)
    {
        WinPanel.SetActive(true);
    }
}

저장 후 유니티에 가서 실행하고 코인을 먹어보면 코인이 줄어드는 걸 확인할 수 있다.

 

다 먹으면 이렇게 나온다

하지만 실행하면 재시작이 안된다. 이제 씬 재시작을 만들어 보도록 하자.

 

씬 재시작

코드를 만들어 주도록 하자

using System.Collections;
using System.Collections.Generic;
using System.Net.Sockets;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement; //2차 추가
public class GameManager : MonoBehaviour
{
    public GameObject WinPanel; //추가된거
    public Text CoinText;
    int score;
    int coinCount;
    void Start()
    {
        coinCount = FindObjectsOfType<coin>().Length; //추가 된거
    }

    

    public void GotCoin()
    {
        score += 100;
        CoinText.text = $"점수:" + score + "점";

        coinCount--;
        if(coinCount <=0)
        {
            WinPanel.SetActive(true);
        }
    }

    public void Restart() //2차 추가
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }
    
}

2차 추가된 곳을 보면 bulidindex는 다시 인덱스 해주는것이다.

 

여기가 빌드다. 신이 없으면 0이 된다. 체크가 되어 있어야 신이 활성화 되어 있는 것이다. 없으면 Add Open Scenes를 해서 추가해 주자.

 

그 후 재시작 버튼에 가서 내리다 보면 On Click이 있다. + 를 눌러 추가해 주고, 게임매니저를 넣어주자. 그 후, NoFuntion에 GameManager에서 Restart를 넣어주자.

 

그 후 gamemanager에 winpanel을 넣어주자

 

넣고 코인을 다 먹으면 이렇게 뜬다.

 

만약 이상해지면 상단에 Window -> Rendering -> Lighting -> Scene 아래에 있는 Generate Lighting을 눌러주자

 

조이스틱 에셋 받기

https://assetstore.unity.com/packages/tools/input-management/joystick-pack-107631

 

여기에 들어가서 에셋을 추가하고 유니티를 열자. 만약 안 떴다면 Window -> PacKage Manager를 눌러서 열자. 마이 에셋을 누르면 아까 다운로드한 에셋이 있다.

그 후 Joystick Pack을 다운로드하고 import까지 하자

 

아마 다 체크되어 있을 것이다. 나는 다운을 받았기 때문에 체크가 안된 것이다. 후에 리로드가 뜰 수 있는데 리로드를 해주고 파일에 들어가면 Joystick Pack이 있다.

 

 

후에 Prefabs에 Fixed JoyStick이 있는데 Canvas에 끌어오자.

 

실행화면은 이렇게 되어있다. 모바일에서도 움직일 수 있게 만들어 주도록 하자.

 

player 스크립트로 가자.

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

public class palyer : MonoBehaviour
{
    public GameManager gameManager;
    public FixedJoystick fixedJoystick;
    public Rigidbody rbody; //추가한거
    public Vector3 moveDir;
    public float moveSpeed;
    
    void Update()
    {
        float x = Input.GetAxisRaw("Horizontal") + fixedJoystick.Horizontal; //추가된거
        float z = Input.GetAxisRaw("Vertical") + fixedJoystick.Horizontal; //추가된거
        moveDir = new Vector3(x, 0 , z); //추가된거
        moveDir.Normalize();
    }

    private void FixedUpdate()
    {
        rbody.MovePosition(rbody.position + moveDir * moveSpeed);
    }

    private void OnCollisionEnter(Collision collision)
    {
        if(collision.gameObject.GetComponent<coin>() != null)
        {
            gameManager.GotCoin(); 
            Destroy(collision.gameObject);
        }
    }
}

추가된 거만 잘 보면 된다. 추가를 해줬으면 저장 후 유니티로 가자

 

이렇게 넣어주고 실행하면 조이스틱으로도 잘 움직일 수 있다.