텍스트를 객체에 따라 표시

9016 단어 Unity3DC#Unity
Qiita에 처음 기사를 게시합니다. 미코시라고 합니다.

개요



플레이어가 오브젝트와 충돌한 횟수를 오브젝트의 머리 위에 추종하여 표시시키는 방법을 소개합니다.

결과



결국 이 동영상처럼 보입니다.

데모 동영상 피 c. 라고 r. 이 m / 6tv XLw와 b6 — 미코시 (@Mikoshi_prog) September 20, 2019


방법





오브젝트의 구성은 위의 그림과 같다. 움직이는 플레이어는 Unity의 애셋에 있는 ThirdPersonController를 사용하기로 합니다. 녹색 구를 움직여 플레이어가 구와 충돌하는 횟수를 빨간색 텍스트로 구 위에 표시합니다.



Sphere의 자식에 Canvas를 설정하고 자식에 Text를 설정합니다. (위 그림의 Hierarchy 내에서 Text 아이콘이 하늘색으로 되어 있는 것은, 이미 Text를 조립식으로 하고 있기 때문입니다.)





Canvas는 기본적으로 Render Mode가 Screen Space - Overlay로 되어 있지만, 이것을 World Space로 변경합니다. 이렇게하면 일반 객체와 마찬가지로 Canvas를 3D 공간의 원하는 위치에 배치 할 수 있습니다.



Canvas가 Sphere의 자식이기 때문에 Canvas의 Inspector에 표시되는 좌표는 상위 Sphere를 기준으로 한 상대 좌표입니다. 따라서 Canvas의 좌표를 PosX=0, PosY=0, PosZ=0으로 하면 Canvas가 Sphere의 중심에 옵니다. 개인적으로, Canvas가 Sphere의 중심에 있는 것이 나중에 Text의 위치 조정을 할 때 편합니다.





Text는 구의 약간 위에 배치하고 싶기 때문에, Text의 좌표는 PosX=0, PosY=0.7, PosZ=0 정도가 좋다고 생각됩니다. 이전과 마찬가지로 Text도 Canvas의 자식이므로 Text의 Inspector에 표시되는 좌표는 Canvas를 기준으로 한 상대 좌표입니다. 그리고 Text는 플레이어와 구가 충돌할 때마다 생성되므로 프리팹으로 해 두어야 합니다.



에서는 다음에 코드를 작성합니다. 우선 Sphere에 연결하는 코드입니다.




SphereController.cs

using UnityEngine;
using UnityEngine.UI;

public class SphereController : MonoBehaviour
{
    public Text countText;
    private GameObject canvas;
    private int count;
    private bool positive;

    private void Start()
    {
        canvas = transform.Find("Canvas").gameObject;
        count = 0;
        positive = true;
    }

    private void Update()
    {
        if (transform.position.x > 6f) positive = false;
        else if (transform.position.x < -6f) positive = true;

        if (positive) transform.position += new Vector3(0.1f, 0f, 0f);
        else transform.position -= new Vector3(0.1f, 0f, 0f);
    }

    void OnCollisionEnter(Collision col) 
    { 
        count++;
        Text text = Instantiate(countText);
        text.transform.parent = canvas.transform;
        text.GetComponent<Text>().text = count.ToString();
    }
}



public Text countText; 부분에서 Text의 조립식을 받습니다.



Update 메소드 내에서 Sphere의 움직임을 제어합니다. 포인트인 것이 OnCollisionEnter 메소드내에서, Text의 프리팹을 일단 인스턴스화해, Canvas의 아이로 설정해, 마지막에 캐릭터를 충돌 횟수의 숫자로 한다고 하는 흐름이 되고 있습니다.



다음은 Text의 조립식에 연결하는 코드입니다.




TextController.cs

using UnityEngine;

public class TextController : MonoBehaviour
{
    private void Start()
    {
        transform.localPosition = new Vector3(0f, 0.7f, 0f);
        Destroy(gameObject, 2);
    }

    private void Update()
    {
        transform.position += new Vector3(0f, 0.03f, 0f);
    }
}



Start 메소드 내

1행째: Text의 최초의 출현 위치를, 부모인 Canvas를 기준으로 한 상대 좌표로 지정하고 있습니다.

2행: 출현 후 2초 후에 소멸합니다.



Update 메서드 내에서 Text가 위로 계속 움직이도록 지정합니다.



이상입니다. 내 Qiita 첫 기사를 읽어 주셔서 감사합니다!


좋은 웹페이지 즐겨찾기