Unity 볼 롤링 자습서 3-3. 점수와 텍스트 표시

이 기사의 대상자


  • Unity 입문하고 싶은 사람
  • 첫걸음을 밟을 수 없는 사람

  • OS나 환경이라든가


  • Windows 10 Pro
  • macOS Mojave
  • Unity 2019.2.8f1
  • Rider 2019.2.2

  • 보충


  • 공식 동영상에서 이용하고 있는 것은 Mac이므로, Windows 유저는 어느 정도 뇌내 변환해 보는 일
  • 필자는 Windows, Mac의 두 환경에서 확인. 우분투 등에서는 검증하지 않았다.
  • 기본 Unity는 영어 메뉴에서 사용
  • 실수가 있으면 츳코미 환영

  • 공식



    아이템 카운트



    PlayerController 스크립트에 항목 카운트 기능 추가

    단순히 스크립트에 int 형 count 변수를 준비하기 만하면됩니다.
    그러나 이대로는 내부적으로 수치가 증가하는 것만으로 플레이어에게 전해지지 않는다

    Unity에서 텍스트 표시



    Unity의 UI 도구 세트 사용



    UI>Text 추가
    추가하면 Text의 부모로 Canvas, EventSystem이 추가되었습니다.



    이것은 Unity의 사양으로, 모든 UI 요소는 Canvas의 자식 요소로서 기능시켜야 한다는 철의 갠이 있다(아마)

    Text를 "Count Text"로 이름 바꾸기

    추가되었지만 색상이 까맣고 수수하게 보이기 때문에 흰색으로 변경
    Text 객체에는 다른 객체와 달리 Rect Transform이 존재한다


    점수 표시 위치 조정



    Anchor Presets 보기



    Shift+Alt 키를 누른 상태에서 맨 왼쪽 상단의 아이콘을 누릅니다.



    화면의 좌상단에 텍스트가 배치되지만, 이대로라면 텍스트가 너무 빠져서 넘어져 보인다
    그래서 PosX, PosY를 조정하고 공백을 갖게하면 그것처럼 보입니다.



    count 값 반영



    PlayerController 스크립트에서 UnityEngine.UI의 Text를 사용하여 연결

    이제 PlayerController 측에 필드가 늘어나므로 거기에 CountText를 드래그하여 연결
    ※ 최종적인 소스는 마지막에 쓰므로 움직임은 그쪽을 참고로 하는 일



    ↓연결하면 이와 같이 된다



    게임 종료



    UI>Text로 종료를 위한 텍스트 객체 추가
    자동으로 Canvas 아래에 추가되므로 아래와 같이 조정


    요소



    Pos Y
    75

    Font Size
    24

    칼라
    화이트

    텍스트
    Win Text




    이것으로 아래와 같은 상태가 되므로, 실제로 종료 조건을 만족했을 때에 「Win Text」가 갱신되는 스크립트를 구현



    스크립트를 구현한 후 Player 객체의 Win Text 필드로 드래그하여 연결하면 완성

    최종 PlayerController.cs

    PlayerController.cs
    
    using System;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class PlayerController : MonoBehaviour
    {
        public float speed;
        public Text countText;
        public Text winText;
    
        private Rigidbody rb;
        private int count;
    
        // See also:https://docs.unity3d.com/ja/2019.1/Manual/ExecutionOrder.html
        private void Start()
        {
            rb = GetComponent<Rigidbody>();
            count = 0;
            SetCountText();
            winText.text = "";
        }
    
        private void FixedUpdate()
        {
            float moveHorizontal = Input.GetAxis("Horizontal");
            float moveVertical = Input.GetAxis("Vertical");
    
            Vector3 movement = new Vector3(moveHorizontal,0.0f,moveVertical);
            rb.AddForce(movement * speed);
        }
    
        private void OnTriggerEnter(Collider other)
        {
            if (other.gameObject.CompareTag("Pick Up"))
            {
                other.gameObject.SetActive(false);
                count++;
                SetCountText();
            }
        }
    
        private void SetCountText()
        {
            countText.text = "Count :" + count.ToString();
            if (count >= 12)
            {
                winText.text = "You Win!";
            }
        }
    }
    

    좋은 웹페이지 즐겨찾기