본문 바로가기
유니티 최고/유니티 구현

유니티(Unity) 간단한 공 게임 기능 구현 2 - 장애물 삭제, 게임 재시작, 카메라 이동

by Lee_story_.. 2022. 8. 24.
728x90

전 글에 이어서 하겠습니다.

 

다음은 모든 장애물을 제거할수있는 레드 코인을 만들어 줍시다.

 

 

 

모든 장애물을 없애기위해서 이게 장애물이다~ 하는 표시가 필요합니다

그걸 위해 모든 장애물의 속성 창에서 이름 바로 밑에 있는 Tag >> add tag >> 새로 Obstacle 을 추가해주고

모든 장애물의 태그를 변경 해줍시다.

 

 

그러고 나서 게임 메니저파일에 아래처럼 추가해줍시다.

    void RedCoinStart()
    {
        DestroyObstacles();
    }


    void DestroyObstacles()// 모든 장애물 파괴 함수
    {

        GameObject[] obstacle = GameObject.FindGameObjectsWithTag("Obstacle"); // 게임상에서 태그찾기
        for (int i = 0; i < obstacle.Length; i++)
        {
            Destroy(obstacle[i]);
        }
    }

 

 

 

그리고 레드코인 파일에 아래코드 추가!

private void OnTriggerEnter(Collider col)// 충돌 감지
    {
        if (col.gameObject.name == "Ball")
        {
            GameObject.Find("GameManager").SendMessage("RedCoinStart");// 게임메니저에서 함수 불러오기
            Destroy(gameObject);
        }
    }

 

 

 

레드코인도 끝!

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

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

    // Update is called once per frame
    void Update()
    {
        transform.Rotate(new Vector3(0, 0, 100f) * Time.deltaTime);
    }

    private void OnTriggerEnter(Collider col)// 충돌 감지
    {
        if (col.gameObject.name == "Ball")
        {
            GameObject.Find("GameManager").SendMessage("RedCoinStart");// 게임메니저에서 함수 불러오기
            Destroy(gameObject);
        }
    }
}

 

 

 

 

그리고 게임진행상 바닥으로 떨어지게 되면... 다시 시작되도록 하기위해

적당히 밑에 보이지 않는 큐브를 하나 설치해줍시다.

 

 

 

이부분을 체크 해제하면 눈에 보이지 않게 만들수있습니다.

 

 

그러고 나서 게임 메니저파일에 아래처럼 추가해줍시다.

void RestartGame()
    {
        UnityEngine.SceneManagement.SceneManager.LoadScene("Game");
    }

 

 

그리고 그 큐브 파일에 아래처럼 추가하면 끝!

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


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

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

    private void OnTriggerEnter(Collider collider)
    {
        if (collider.gameObject.name == "Ball")
        {
            //Application.LoadLevel("Game");
            //UnityEngine.SceneManagement.SceneManager.LoadScene("Game");
            GameObject.Find("GameManager").SendMessage("RestartGame"); // 게임메니저에서 함수 불러오기


        }
    }
}

 

 

 

 

 

 

그리고 제일 중요한 카메라는 공을 따라다니도록 공의 좌표를 받아 이동시켜줍시다!

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

public class camera : MonoBehaviour
{

    public GameObject ball;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
      
        transform.localPosition = new Vector3(0, ball.transform.localPosition.y +15 , ball.transform.localPosition.z -20);
        
        
    }
}

 

 

 

 

그리고 이때까지 수정한 게임 매니저! (게임 매니저는 )

GameManager라고 스크랩의 이름을 정의하면

이처럼 아이콘이 바뀌고

GameObject >> 크리에이트 엠티를 만들고 위의 스크랩을 부여해주면 됩니다.

 

 

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


public class GameManager : MonoBehaviour // 자주쓰이는 함수들을 모아놓고 사용가능  헤더 파일인듯?
{
    // Start is called before the first frame update
    public int coinCount = 0;
    
    public TextMeshProUGUI coinText;
    public Text coinText1;

    void GetCoin()
    {
        coinCount++;
        coinText.text = coinCount + "~";
        coinText1.text= coinCount + "개";

    }

    void RestartGame()
    {
        UnityEngine.SceneManagement.SceneManager.LoadScene("Game");
    }

    void RedCoinStart()
    {
        DestroyObstacles();
    }


    void DestroyObstacles()// 모든 장애물 파괴 함수
    {

        GameObject[] obstacle = GameObject.FindGameObjectsWithTag("Obstacle");
        for (int i = 0; i < obstacle.Length; i++)
        {
            Destroy(obstacle[i]);
        }
    }


    void Start()
    {
        
    }

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

 

 

 

 

여기까지만 하면 그렇게 많진 않지만 게임에서 사용될수 있는 여러 기능들을 구현해본것 같습니다!

 

다음엔 더 많이 만들어 보겠습니다!

 

댓글