2015-05-07 2 views
3

Итак, я использую C# в единстве, чтобы поместить некоторые объекты с использованием Unity UI, и у меня есть объект, положение которого в скрипте не совпадает с его положением в сцене. У меня есть следующий код в функции:Unity UI Позиция RectTransform для меня не имеет смысла

using UnityEngine; 
using System.Collections; 

public class SeedChecker : MonoBehaviour { 

    Vector3 lockedPos; 
    RectTransform tran; 

    // Use this for initialization 
    void Awake() { 
     tran = GetComponent<RectTransform>(); 
    } 

    public void LockPos(Vector3 pos) { 
     tran.localPosition = pos; 
     lockedPos = pos; 
     print (tran.localPosition); 
    } 

} 

В качестве примера, этот код печатает, что его позиция является й -60 - что правильное число, которое я ищу - 60 пикселей влево от середины экрана. Но, когда я смотрю в инспектор и на сцене, позиция x равна 0 - и объект расположен точно в середине экрана. Это приводит к довольно неприятной ситуации, в которой у меня также есть talked about here. Это расстраивает, потому что говорит, что он получает правильное положение, но когда я назначаю эту правильную позицию объекту, он переходит к тому, что я считаю неправильным местом. Это непонимание того, как локальные объекты работают в RectTransforms? Мой объект является дочерним элементом нескольких объектов, но все они обнуляются в центре экрана и имеют «1» для значений шкалы.

+1

Этот код работает нормально, я пробовал его, и я получаю Lockpos, который я отправляю. Вы прикрепляете холст с якорем? – joreldraw

ответ

1

Решено! Оказалось, что мои RectTransforms ведут себя странно, потому что я хранил их в классе, который я написал, чтобы организовывать их, называемый EventRow. Строка события даже не унаследовала от MonoBehavior, но сохранение RectTransforms в списке System.Collections.Generic внутри этого объекта заставляло их странно позиционировать. Итак, когда я начал хранить их как детей других Rect Transforms, вместо того, чтобы отслеживать их в моем классе EventRow, он работал отлично! Странно, нет? Вы когда-нибудь видели что-то подобное? Первоначальная цель моего класса EventRow состояла в том, чтобы разрешить мне иметь список списков событий - сетку событий. Я предполагаю, что RectTransform не любит быть списком списков этого сорта, и что он каким-то образом заботится о том, находится ли он в коллекции или нет. Иди цифра!

4

Как я знаю, вы должны использовать anchoredPosition. Смотрите документацию для возможных атрибутов: http://docs.unity3d.com/ScriptReference/RectTransform.html

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

+0

Я нашел проблему! Я использовал привязку и все еще имел проблему. Хорошая идея! – Catlard

Смежные вопросы