На моем уровне fps (Unity) цели появляются в случайном месте. Я хочу убедиться, что цели не могут появляться за объектами или внутри объектов.
Чтобы убедиться, что они не появляются позади объекта, я сделал raycast
переход от игрока к цели. Если есть препятствия, я пересчитываю точку появления. Это работает нормально, но, поскольку цели являются сферами, лучей не будет препятствовать, когда цель находится на 50% внутри объекта, например, пола. Очевидно, я этого не хочу.
Чтобы определить, находится ли цель в границах другого объекта, я попытался использовать OnCollisionEnter
и OnCollisionExit
. Хотя это работает при простом перемещении цели внутри другого объекта, это кажется ненадежным, когда цикл обновления одного скрипта пересчитывает позицию появления, в то время как цикл обновления цели отслеживает столкновение.
Поэтому я искал другой подход. Вот что я придумал (из документов Unity):
m_Collider2 = spawnpoints[i].GetComponent<Collider>();
m_Collider = world.GetComponentInChildren<Collider>();
if (m_Collider.bounds.Intersects(m_Collider2.bounds))
{
Debug.Log("Bounds intersecting");
}
Мир игровых объектов - это родительский объект, в который я помещаю все объекты своего игрового мира.
Проблема в том, что он учитывает только коллайдер первого объекта. Я в основном хочу использовать один большой коллайдер, состоящий из всех объектов уровня.
Это возможно? Или кто-нибудь знает другой подход к тому, как я могу этого добиться?