Создание игровых объектов относительно положения, ширины и длины другого игрового объекта? - PullRequest
0 голосов
/ 14 июля 2020

В настоящее время я разрабатываю игру в Unity, используя C#, и у меня возникла небольшая проблема.
Мне нужно создать определенный gameobjects относительно Spawnposition и длины другого игрового объекта .
Теперь я решил, что bounds.size будет лучшей функцией для использования в этом случае.
Как показано ниже, я сначала объявляю переменную, которая использует это в моем стартовом методе:

public void Start()
{

 GameObject PointBar = (GameObject) Resources.Load("PointBar Horizontal");
 PointBarVectorLength = PointBar.GetComponent<BoxCollider2D>().bounds.size.x;
 PointBarVectorConv = Camera.main.WorldToViewportPoint(new Vector2(PointBarVectorLength, 0f));

}

Однако , рассматриваемые gameobjects неактивны при стартовом вызове, и поэтому я предполагаю, что при вызове не возвращает никакого значения для bounds.size.

Кто-нибудь знает, как я могу получить доступ к bounds.size или эквиваленту неактивен gameobject или мне здесь чего-то не хватает?

Ответы [ 2 ]

0 голосов
/ 15 июля 2020

Я решил проблему с помощью GetComponent (). Bounds.size.x; вместо BoxCollider. К этому компоненту можно получить доступ, когда игровой объект не активен.

0 голосов
/ 14 июля 2020

Как отмечено в документации к свойству Collider.bounds , bounds «будет пустой ограничивающей рамкой, если коллайдер отключен или игровой объект неактивен». Итак, ваше предположение было в значительной степени верным. Поскольку объект не существует в мировом пространстве, это имеет смысл.

Я не уверен в наиболее элегантном решении для вашего варианта использования, но на ум приходят два варианта.

  1. Рассчитать размеры порождения объекта путем доступа к его transform.localScale и факторинга в масштабе предполагаемых родительских объектов. Это может стать беспорядочным, но вы, вероятно, также можете написать вспомогательный метод, чтобы сделать его более управляемым.
  2. Создайте экземпляр объекта где-нибудь за экраном после его загрузки, откройте его свойство Collider.bounds, чтобы получить необходимую информацию, затем переместите это где угодно, или сохранить информацию на потом.

Могут быть лучшие решения, но это то, что приходит мне на ум.

...