#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);
Если вы используете второй вариант, не меняйте тип холста и не создавайте дочерний объект. Это изменит положение вашего объекта, чтобы он появился над сферой, в зависимости от положения в мире относительно используемой вами камеры.
Я также должен добавить, что с помощью любого из этих двух решений удалите весь остальной код, который вы используете для перемещения текста.