Поскольку transform.position
и Vector3.down * Time.deltaTime * speed
оба имеют (x, y, z), поскольку они Vector3
, вы можете просто проверить компонент Y и пропустить движение между указанным диапазоном, например,
if(transform.position.y < -6 || transform.position.y > 6)
{
// the Vector3.down is (0, -1, 0) so this operation will change only Y component anyway
transform.position += Vector3.down * Time.deltaTime * speed;
}
В исходном ОП перерегулирование не упоминалось, но, как указывал @derHugo, вы можете ограничить движение, чтобы избежать перерегулирования.Возможна одна такая возможность: она будет ограничивать движение относительно ближайшей границы, не позволяя также перепрыгивать с одной границы на другую ...
private static float OutsideLimitedMove(float current, float move, float bottomLimit, float topLimit)
{
//----->---------| not allowed |---------<-----
// fromBottom -6 6 fromUp
if(current >= -6 && current <= 6)
return 0f;
float predictedY = current + move;
//fromBottom
if(current < bottomLimit && predictedY > bottomLimit)
return Math.Min(bottomLimit - current, move);
//fromUp
if (current > topLimit && predictedY < topLimit)
return Math.Max(topLimit - current, move);
return move;
}
Vector3 predictedMove = Vector3.down * Time.deltaTime * speed;
float y = OutsideLimitedMove(transform.position.y, predictedMove.y, -6, 6);
transform.position += new Vector3(predictedMove.x, y, predictedMove.z);