2015-07-20 4 views
0

Я создаю 3D-игру, которая будет стратегической игрой. Я хочу создать панель (группа пользовательских групп из текста и кнопок) кодом (C#), а затем переместить их так, чтобы они находились поверх GameObject в макете Canvas. Так что я делаю это:Переместить компонент пользовательского интерфейса после его создания

if (ThisBuilding == null) 
    ThisBuilding = this.gameObject; 
Panel = Canvas.Instantiate(Panel); 
Panel.transform.SetParent(canvas.transform, false); //false to prevent stupid scaling issues created by the parent change 

Vector3 centerPosition = ThisBuilding.GetComponentInChildren<MeshRenderer>().bounds.center; //the building GameObject contains a MeshRenderer component in its only children. 
panelRect.anchoredPosition = Vector3.Lerp(panelRect.anchoredPosition, centerPosition, 1.0f); 

Дело в том, что этот скрипт запускается (Пуск()) один раз в здании, в надежде, что панель будет получить экземпляр в 3 раза, и каждая панель соответствует зданию, но и для какая-то странная причина этого не работает.
ОЖИДАЕМЫЕ РЕЗУЛЬТАТ: каждый раз, когда панель получает экземпляр, позиция такой же, как в здании, которое конкретизируется его (здание GameObject держит сценарий и включает/выключает панель)
ФАКТИЧЕСКОГО РЕЗУЛЬТАТА: даже несмотря на то, панель получает экземпляр 3 раза, как и следовало ожидать, все они находятся в одном положении и не меняются, даже когда моя функция Update() меняет свое положение. Что я делаю не так?

ответ

2

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

попробовать что-то вроде этого:

panel.transform.position = Camera.main.WorldToScreenPoint(this.gameObject.transform.position); 
+0

Человек! Это сработало отлично! Огромное спасибо! Он работает безупречно! –

+0

Добро пожаловать, я рад, что смогу помочь! –

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