Unity3D Vector 3 Teleporting
Эй, ребята!
Я приложил изображение, чтобы визуализировать свое объяснение проблемы, которая у меня есть. В моей игре зеленый шарик катится по бесконечной дороге, преследуемый желтым шариком. Чтобы дорога казалась бесконечной, шар телепортируется назад (фиолетовая линия на нижнем изображении), когда он пересекает определенное расстояние по оси X (фиолетовая линия на верхнем изображении). Я сделал это так:
if (gameObject.transform.position.x <= -20) {
gameObject.transform.position = new Vector3 (transform.position.x + 80, transform.position.y, transform.position.z);
}
и это работает совершенно нормально.
Когда зеленый шар становится "телепортированным", желтый шар должен телепортироваться обратно с тем же значением, чтобы расстояние между слишком маленькими шарами не изменилось после телепортации. Поэтому я сделал публичный игровой объект "враг", поместил желтый шарик внутри вражеского поля в инспекторе и изменил код так:
if (gameObject.transform.position.x <= -20) {
gameObject.transform.position = new Vector3 (transform.position.x + 80, transform.position.y, transform.position.z);
enemy.transform.position = new Vector3 (transform.position.x + 80, transform.position.y, transform.position.z);
}
Но, как вы можете видеть на нижнем изображении, желтый шар не телепортировался на том же расстоянии. Кажется, что расстояние прибавляется от исходной начальной точки, а не от точки, которая была до телепортации. Надеюсь, вы, ребята, знаете решение для этого.
У Желтого шара есть сценарий, чтобы следовать за Игроком, может быть, он как-то связан с этим?
void Update ()
{
//enemy follows the ball with speed 8
transform.LookAt (target);
transform.Translate (Vector3.forward * 8 * Time.deltaTime);
//fix y-position
Vector3 tmp = transform.position;
tmp.y = lockedY;
transform.position = tmp;
}
1 ответ
Вы хотите отодвинуть противника на 80 единиц назад, тогда вам нужно отодвинуть противника на 80 единиц назад.
enemy.transform.position = new Vector3(
враг.position.x + 80,
враг .position.y,
враг.position.z);