Хорошо, так что я разобрался с проблемой, с которой столкнулся.Местоположение, которое возвращалось для портала, находилось внутри портала, и оно вылетало, когда один объект находился внутри другого, поэтому я просто добавил пустой объект к порталу, где я хочу, чтобы они выходили, и программа указала на это.
Я работаю над небольшой «игрой» в Unity, и есть четыре портала с метками PortalMain1
, PortalMain2
, PortalMain3
и PortalMain4
, и цель будет для игрокачтобы иметь возможность столкнуться с коллайдером на каждом из порталов и беспрепятственно телепортироваться на один из других порталов.
У меня есть этот бит кода на модели игрока, обрабатывающей события триггера:
private void OnTriggerEnter(Collider other)
{
int PortalDestination = Random.Range(1, 4); ///Portals index at 1 because Unity
string Portal = "PortalMain" + PortalDestination;
Debug.Log(Portal);
transform.position = GameObject.Find(Portal).transform.position;
}
Что действительно происходит в игре, так это когда игрок сталкивается с коллайдером на портале игрыправильно выберет портал из 1-4 (хотя, кажется, он никогда не выберет тот, к которому вы прикоснулись, который аккуратен) и телепортирует вас туда.
За исключением того, что вы телепортируетесь рядом с порталом, а не поверх него, и если телепортация работает, похоже, она работает только примерно в 1/4 времени.
Вот изображение иерархии сцены с основанием:
Вот изображение иерархиисцена со зданием:
Вот изображение иерархии сцены с порталом:
РЕДАКТИРОВАТЬ # 1: я переработал свой метод для работы с Rigidbody
, но проблема сохраняется.
private void OnTriggerEnter(Collider other)
{
int PortalDestination = Random.Range(1, 4); ///Portals index at 1 because Unity
string Portal = "PortalMain" + PortalDestination;
Debug.Log(Portal);
GetComponent<Rigidbody>().isKinematic = true;
GetComponent<Rigidbody>().position = GameObject.Find(Portal).transform.position;
GetComponent<Rigidbody>().isKinematic = false;
}
Вот ссылка на Github> https://github.com/LvInSaNevL/Bamboozle