Перемещение объекта в то же место на другом объекте после телепортации - PullRequest
1 голос
/ 11 ноября 2019

Извините за название, но я не знаю, как его обобщить, смело меняйте его.

Я пытаюсь создать 2d порталы в единстве, сейчас, хотя и использую этот скрипт на порталах

OnTriggerEnter2d(collision other)
{
    if(other.gameobject.tag == "ball")
    {
        // portal2 is just a gameobject I input in the editor.
        other.transform.position == portal2.transform.position;
    }
}

Извините за мои грубые рисунки, но это приводит к тому, что это происходит:

Что делает сейчас

What is does now

Но, как вы можете видеть, независимо от того, как мяч попадет в портал1 (синий), он всегда придетв центре портала 2 (Оранжевый).

Но мне нужно это сделать:

Что мне нужно сделать

What I need it to do

, где, если мяч попадает в верхнюю часть портала, он выходит из верха, если он попадает в нижнюю часть, выходит из нижней части и т. Д.

Я нено знаете, как это сделать, оба портала имеют одинаковый размер и являются просто спрайтами друг друга.

Ответы [ 2 ]

1 голос
/ 11 ноября 2019

Вам необходимо рассчитать (в вашем случае: y) смещение столкновения. Я считаю, что это было бы самым простым решением, учитывая, что вы используете триггеры (таким образом, получаете Collider), а не столкновение (где вы получите Collision и, таким образом, получите доступ к contactPoints):

void OnTriggerEnter2D(Collider2D other)
{
    if (other.gameObject.tag == "ball")
    {
        var offset = other.transform.position - transform.position;
        // Set x to 0 if you want to ignore the x offset value like your image suggests
        offset.x = 0; 
        other.transform.position = portal2.transform.position + offset;
    }
}
0 голосов
/ 11 ноября 2019

То, что вы можете сделать, это когда он сталкивается, получить свою позицию в вашем коде. Затем используйте эту позицию, чтобы решить, где она должна появиться на другой. Например, скажем, порталы имеют длину 20, а один портал на 100, а другой на 200. Когда он сталкивается, вы получаете, что ваш шар на 115. Следующие порталы на 200. Вы вычитаете положение шаров из положения портала, чтоСтолкнулся с мячом и добавьте, к примеру, то, что вы получите, это будет 15, потому что 115-100 = 15. Поэтому, когда вы добавите их, вы получите 215. Затем вы будете использовать 215, чтобы изменить положение шара вместо всего 200.

...