Я пытаюсь создать 2D-портал в Unity, который не просто переносит игрока на другой игровой объект портала. Но сохраняя положение игроков, направление и скорость движений после прохождения портала.
Я не значит быть художником, но например:
Игрок подпрыгивает от мяча вокруг области, когда он проходит через портал, его скорость поддерживается, а также тот факт, что он вошел в центр портала.
Где здесь, например:
Если игрок входит в нижнюю половину портала, он выходит из нижней половины портала.
Когда это работает, это прекрасно работает! Тем не менее, это работает только в 50% случаев, тогда как 50% могут иметь кучу разных проблем, хотя иногда мяч просто не телепортируется. Иногда мяч попадает на первый портал, телепортируется на второй портал, а затем обратно на первый портал, и он делает это многократно навсегда. И эти проблемы кажутся случайными.
Вот мой скрипт:
public GameObject otherPortal;
public PortalController otherPortalScript;
private BallController ballController;
public float waitTime = 0.5f;
[HideInInspector]
public bool teleporting;
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.tag == "Ball")
{
ballController = other.GetComponent<BallController>();
if(!teleporting)
{
var offset = other.transform.position - transform.position;
offset.x = 0;
other.transform.position = otherPortal.transform.position + offset;
otherPortalScript.teleporting = true;
teleporting = true;
StartCoroutine("Teleport");
}
}
}
void OnTriggerExit2D(Collider2D other)
{
if (other.gameObject.tag == "Ball")
{
teleporting = false;
otherPortalScript.teleporting = false;
}
}
IEnumerator Teleport()
{
yield return new WaitForSeconds(waitTime);
teleporting = false;
otherPortalScript.teleporting = false;
ballController.teleporting = false;
}
}
Скрипт прикреплен к обоим порталам, которые оба являются префабами одного и того же объекта. Я установил в редакторе «otherPortal», «otherPortalScript» и «waitTime». «waitTime - это то, что я должен был» добавить после факта, чтобы исправить другую проблему, с которой у меня иногда «телепортация» никогда не становилась ложной. Я считаю, что причина этой проблемы - та же причина этой проблемы, делая «waitTime» «просто повязка для большего вопроса. Кроме того, каждый раз, когда сценарий портала изменяет переменную в «ballController», например «ballController.teleporting = false;», это происходит только потому, что мяч добавляет / удаляет точки из системы очков, это никак не влияет на его движение. .