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

유니티(Unity) UI 텍스트 표시, 스크립(Script) 연결

by Lee_story_.. 2022. 10. 20.
728x90

어떤 게임이든 화면상에 나타내 주는 무언가들이 있습니다. 바로 UI들 입니다!

 

 

UI에서 나타내줄 수 있는 것들로는 점수, 보상, 메뉴, 종료버튼 등 다양합니다.

이것들을 유니티에서는  버튼, 텍스트등으로 표현가능한데

 

 

이번엔 텍스트 부분만 사용해보겠습니다!

 

 

 

먼저 텍스트를 만들어 봅시다.

 

우클릭 >> UI >>text  클릭

 

 

 

그러면 바로 캔버스 판과 text가 생성됩니다!

 

 

 

 

 

디테일 창에서  텍스트의 위치, 크기  , 글꼴 등을 지정할수있으니

 

 

화면에 맞게 조정해줍시다.

 

위 처럼 조정이 끝났다면

 

 

 

 

텍스트 띄우기는 끝났습니다!!

 

하지만.. 저걸 계속해서 갱신해 주어야겠죠..

 

 

 

 

물론 이 텍스트에도 스크립을 넣어줄수있어 자체적으로 갱신이 가능합니다.

하지만 점수인 경우 캐릭터에서 텍스트로 값을 넘겨주어야 하는 경우가 발생합니다.

 

 

 

 

이 경우에 2가지 방법이 있습니다.

 

1. 캐릭터에서 점수를 연동해준다!

2. 빈 오브젝트에서 점수를 계속해서 보내준다!

 

1번의 경우 오브젝트 손실이 없겠네요! 하지만 캐릭터가 바뀐다면..? >> 문제가 발생합니다.

 

 

그렇기에 점수등과 같이 계속해서 사용하려는 정보는 빈 오브젝트에서 저장,처리 해주는 방법을 사용합니다! 

 

(일단 이부분은 제가 익숙해져서사용하는 방법입니다.)

 

 

 

 

 

그럼 일단 시작!


 

먼저 빈 오브젝트와 새로운 스크립을 만들어 줍시다.

 

다음으로 스크립을 작성해줍시다.

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


using TMPro; /// ui text를 불러오기위한 부분
using UnityEngine.UI;

public class score : MonoBehaviour
{
    // Start is called before the first frame update

    public TextMeshProUGUI text;// 텍스트를 받아올 부분

    public int allscore = 0;// 점수를 받아올 부분

    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        text.text=allscore;
    }

 

여기 까지 작성한다면 아래처럼 뜨게되고

이제 드래그로 Text에 아까 만들어 두었던 텍스트를 넣어줍시다.

 

 

****public으로 선언해야 아래처럼 나옵니다! (다른곳에서도 사용할수있게 공용변수를 선언하는 것)

 

 

이러면 연결끝!

 

하지만 아직  빈오브젝트의 텍스트와  UI의 텍스트만 연결되어있습니다.

 

여기서! 캐릭터와 빈오브젝트도 연결해주어야합니다.... >>> 복잡해보이지만 똑같은 형식입니다.

 

 

 

다시시작!

캐릭터에도 스크립을 하나 만들어줍시다.

 

그리고 바로 아래의 코드를 추가해줍시다.

public score score_save; ///    빈오브젝트의 스크립 형식을 score_save로 사용하겠다!

 

 

아까와 마찬가지로 이번엔 빈오브젝트를 넣어줍시다.

 

이렇게 되면 score_save에 빈오브젝트의 score 스크립이 들어가게됩니다!

 

 

 

 

 

이제 캐릭터 스크립에 아래처럼 충돌시 점수가 증가하도록 바꿔준다면?

private void OnCollisionEnter(Collision collision)
    {
        Destroy(other.gameObject);
        score_save.allscore += 1;
    }

 

UI의 텍스트도 갱신되는걸 볼수있습니다!

 

 

 

 

 

 

크게 보면 

 

캐릭터 >> 빈오브젝트.스크립  >> 텍스트 

 

순으로 계속해서 정보를 전달하는 방식입니다!

 

더 쉬운 방법도 있을것 같은데 저는 위의 방법을 사용하고있습니다.

갱신해야할 것들이 많아지고, 캐릭터가 늘어가면서  이 정보들을 한군데에서 관리한다는 느낌으로 사용했습니다.

 

 

 

 

더 좋은 방법이 있다면 댓글로 알려주시면 감사하겠습니다!

 

 

 

 

 

틀린점이 있다면 댓 달아주세요!

 

 

 

 

 

 

 

 

 

 

 

댓글