Как я могу переместить текст пользовательского интерфейса вверх?

#c# #unity3d

Вопрос:

Это скриншот иерархии, в которой у меня есть куб и дочерняя сфера куба. Затем у меня есть холст, настроенный на наложение космического мира, и текст пользовательского интерфейса, дочерний элемент холста.

Текстовый пользовательский интерфейс

Я хочу, чтобы текст пользовательского интерфейса перемещался вместе со сферой.

Когда я запускаю игру, текст находится в центре сферы, но только сфера движется вверх, текст остается в том же положении. Я пробовал также другие режимы холста экранная камера и мировое пространство, но текст не перемещается вместе со сферой.

Этот скрипт прикреплен к Сфере :

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

public class Testing : MonoBehaviour
{
    public GameObject myText;
    public float speed;
    public float offset;
    public bool go = false;

    private bool exited = false;
    private Vector3 exitPosition;

    private void Start()
    {
        myText.GetComponent<Text>().alignment = (TextAnchor)TextAlignment.Center;

        Debug.Log("Position : "   transform.position);
    }

    private void OnTriggerExit(Collider other)
    {
        if (other.name == "Cube")
        {
            Debug.Log("Exited !");
        }

        exitPosition = new Vector3(transform.position.x,
                transform.position.y   offset, transform.position.z);

        exited = true;
    }

    private void Update()
    {
        if (go)
        {
            if (!exited)
            {
                transform.position  = Vector3.up * speed * Time.deltaTime;
                myText.GetComponent<RectTransform>().position  = Vector3.up * speed * Time.deltaTime;
            }
            else
            {
                transform.position = Vector3.MoveTowards(transform.position, exitPosition, speed * Time.deltaTime);
                myText.GetComponent<RectTransform>().position = Vector3.MoveTowards(myText.transform.position, exitPosition, speed * Time.deltaTime);
            }
        }
    }
}
 

Я также попытался переместить холст с текстом, чтобы он был дочерним элементом Сферы, но все равно текст не движется.

Ответ №1:

Вы захотите установить холст на World Space , а затем добавить холст в свою сферу.

Другой вариант-добавить сценарий к объекту пользовательского интерфейса и преобразовать его в координаты мирового пространства, чтобы следовать за сферой. Что-то вроде:

 uiObject.transform.position = YourMainCamera.WorldToScreenPoint(theSphere.transform.position);
 

Если вы используете второй вариант, не меняйте тип холста и не создавайте дочерний объект. Это изменит положение вашего объекта, чтобы он появился над сферой, в зависимости от положения в мире относительно используемой вами камеры.

Я также должен добавить, что с помощью любого из этих двух решений удалите весь остальной код, который вы используете для перемещения текста.