У вас есть это заявление в ваших 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));
}