Что заставляет этот код работать с осью Y, но не с осью X? - PullRequest
0 голосов
/ 11 ноября 2018

Итак, я делаю игру с функцией мерцания и фиксированной камерой, поэтому, конечно, я не хочу, чтобы игрок мог покинуть камеру.Поэтому мое решение состоит в том, чтобы не дать игроку пройти границу камеры с миганием.Дело в том, что он прекрасно работает для оси Y, но в меньшей степени для оси X.(Шкала transform.lossy является заполнителем, пока я не найду фактический спрайт, а магические числа - это положение, в котором находятся края камеры)

if ((transform.position += (Vector3)aim * slashDistance).x <= -8.9f)
{
    transform.position += (Vector3)aim * (8.9f + transform.position.x - (transform.lossyScale.x / 2));
}
else if ((transform.position += (Vector3)aim * slashDistance).x >= 8.9f)
{
    transform.position += (Vector3)aim * (8.9f - transform.position.x - (transform.lossyScale.x / 2));
}

if ((transform.position += (Vector3)aim * slashDistance).y <= -5f)
{
    transform.position += (Vector3)aim * (5f + transform.position.y - (transform.lossyScale.y / 2));
}
else if ((transform.position += (Vector3)aim * slashDistance).y >= 5f)
{
    transform.position += (Vector3)aim * (5f - transform.position.y - (transform.lossyScale.y / 2));
}

1 Ответ

0 голосов
/ 11 ноября 2018

У вас есть это заявление в ваших if условиях:

transform.position += (Vector3)aim * slashDistance

У этого утверждения есть побочный эффект - оно переместит игрока. Следовательно, вы будете перемещать игрока каждый раз, когда оценивается любое из четырех условий. Не очень разумно. Таким образом, когда вы выходите за пределы допустимого диапазона х, первый блок переместит игрока обратно внутрь. Но затем, второй блок перемещает игрока снова за пределы диапазона, и y-проверка не сможет компенсировать это. Итак, просто поместите эффект за пределы ваших условий. Это также значительно облегчит чтение вашего кода:

transform.position += (Vector3)aim * slashDistance
if (transform.position.x <= -8.9f)
{
    transform.position += (Vector3)aim * (8.9f + transform.position.x - (transform.lossyScale.x / 2));
}
else if (transform.position.x >= 8.9f)
{
    transform.position += (Vector3)aim * (8.9f - transform.position.x - (transform.lossyScale.x / 2));
}

if (transform.position.y <= -5f)
{
    transform.position += (Vector3)aim * (5f + transform.position.y - (transform.lossyScale.y / 2));
}
else if (transform.position.y >= 5f)
{
    transform.position += (Vector3)aim * (5f - transform.position.y - (transform.lossyScale.y / 2));
}
...