728x90
반응형

전에 뭐했는지 처음에 적어둘 필요가 있을거같음.

  1. 맵 확장
  2. 한 방향으로 꺾는 트리거 제작

오늘의 할일

  1. 가운데에 엔딩 만들기
  2. 타이머 생성

일단 엔딩을 어떻게 구현해야 할까. 보통 게임에서 결과가 나오면 UI를 띄우기는 한다. 대충 구글에 검색해서 가져온 게임 결과창이다. PVP인거같기도 한데..

뭐 어차피 이걸 그대로 쓸건 아니다.

넣을만한 기능을 정리해보자.

  1. 결과 시간
  2. 최종 점수
  3. 메뉴 버튼(재시작/메뉴로 나가기)

일단 게임 결과창 UI를 만들었는데 게임이라기 보다는 시뮬레이션같은 기분이다.

 

 
 

그리드를 추가해서 버튼을 정렬했다.

나는 정확한 간격을 모르기 때문에 유니티에 있는 기본 기능에 의지하기로 했다. 근데 이거 왠지 언리얼에서 해봤던 기억이 있는거같은데...

만들어둔 UI들의 이름을 정리했다.

재시작 및 범용적으로 쓰고싶기 때문에 LoadScene 함수를 만들고 Inspector 창에서 불러올 씬을 지정하도록 하였다.

 

using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour
{
    public void LoadScene(string sceneName)
    {
        SceneManager.LoadScene(sceneName);
    }
}

 

빈 오브젝트를 만들어 collider 적용 후 트리거 기능을 체크한 EndTrigger를 만들었다. 가운데를 표시해주던 네모를 치우고 거기에 뒀다.

 
 

트리거에 부딪힐 경우 움직임을 멈추고 싶으므로 bool형의 isMove 변수를 만들어 부딪히면 멈추도록 만들었다. 게임 시간을 멈추는 방법도 있지만 얼마전에 게임을 하나 했는데 자동 저장 할 때 마다 시간이 멈추는지 캐릭터가 멈춰서 불편했던 기억이 잇다. 어차피 업데이트에 translate 하나 있는거 막기로 했다.

PlayerBehavior에 OntriggerEnter를 생성하고 태그가 EndTrigger일 경우 엔딩창을 띄운다.타이머를 설정하는 김에 게임 플레이 중 확인할 수 있도록 만들었다.

게임 결과창이 뜨면 인게임 타이머는 보이지 않게 처리했다.

 

using UnityEngine.UI;

    public bool isMove = true;
    public GameObject EndPanel;

    public Text Timer;
    public Text InGameTimer;
    float timeText = 0;

    void Update()
    {
        if (isMove)
        {
            timeText += Time.deltaTime;
            transform.Translate(Vector3.forward * Time.deltaTime * speed);
        }
    }

    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "EndTrigger")//태그가 엔딩 트리거일 경우
        {
            isMove = false;
            EndPanel.SetActive(true);
            //Timer.text = timeText.ToString();
            Timer.text = string.Format("경과시간 : {0:N2}", timeText);

            Debug.Log("엔딩");
        }
    }

 

메뉴를 만들 기력도 없고 해서 메뉴 대신 트윗하는 기능을 추가하기로 했다.

    private const string tweetTextAddress = "http://twitter.com/intent/tweet?text=";
    public PlayerBehaviour player;

    public void LoadScene(string sceneName)
    {
        SceneManager.LoadScene(sceneName);
    }

    public void TweetScore()
    {
        string tweet = "I got " + string.Format("{0:0}", player.Timer.ToString()) + " time to GameEnd!";
        string url = UnityEngine.Networking.UnityWebRequest.EscapeURL(tweet);
        Application.OpenURL(tweetTextAddress + url);
    }

    public void Quit()
    {
        Application.Quit();
    }

 

각각 맞는 함수를 넣어줬다.

테스트를 위해서 플레이어를 강제로 옮겼다.

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

문자가 변환되는게 아니라 UI가 텍스트화 되어버렸다.

 

    public void TweetScore()
    {
        string tweet = "I got " + string.Format("{0:N2}", player.timeText) + " time to GameEnd!";
        string url = UnityEngine.Networking.UnityWebRequest.EscapeURL(tweet);
        Application.OpenURL(tweetTextAddress + url);
    }

 

해결!

일주일동안 미룬 결과로는 썩 영양가가 없는듯도 한듯한..

 

728x90
반응형

'공부 > 유니티' 카테고리의 다른 글

유니티 Find 정리  (1) 2024.04.30
프로젝트 회고 - Unity Http 통신  (0) 2024.04.24
미로게임4 (22.6.7)  (0) 2024.04.22
미로게임3 (22.6.2)  (0) 2024.04.22
미로게임2 (22.5.30)  (0) 2024.04.22