Как заставить Game Object перемещаться в определенную позицию - PullRequest
0 голосов
/ 02 ноября 2019

У меня проблемы с функцией, которая должна проверять, является ли строка нулевой, пустой или имеет в ней что-то, а затем показать / скрыть элемент пользовательского интерфейса (перемещая его на экран / выключая). Я не хочу использовать SetActive, потому что в будущем я добавляю слайд на экранную анимацию. Это решило бы проблему на данный момент, но мне нужно было бы вернуться к ней позже.

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

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

public class GameManager : MonoBehaviour
{
    [SerializeField]
    private GameObject _narrationBar;

    private void NarrationBarShow(string NarrationTextString)
    {
        bool testString = string.IsNullOrEmpty(NarrationTextString);
        if (testString == true)
        {
            Debug.Log("String is empty or null");
            Transform gObject = _narrationBar.GetComponent<Transform>();
            if (gObject.position.y > -10f == true)
            {
                gObject.Translate(Vector3.down * _speedUIMove * Time.deltaTime);
            }
        }
        else if (testString == false)
        {
            Debug.Log("String has stuff in it");
            Transform gObject = _narrationBar.GetComponent<Transform>();
            Vector3 defaultPos = gObject.position;
            defaultPos.y = -9.508f;
            gObject.position = defaultPos;
        }
    }
}

Преобразование добавляет значение y к текущей позиции преобразования, а не устанавливает его напрямую (таким образом, оно заканчивается на 2 * -9,508)

1 Ответ

1 голос
/ 03 ноября 2019

Transform.position устанавливает мировую позицию объекта, в то время как инспектор Unity3D отображает локальную позицию объекта .

В вашем случае _narrationBar GameObjectимеет родителя с позицией world , равной y = 6.044956, и поэтому сам бар имеет позицию local , равную y = -15.55296 после его перемещения в world position of y = -9.508.

Эту проблему можно решить, переместив мировую позицию родительского объекта в мировое начало (y = 0) или назначив предполагаемую локальную позицию _narrationBar с помощью Transform. localPosition, в зависимости от предполагаемого поведения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...