void Update(){
float accel = Input.acceleration.x;
transform.Translate(accel, 0, 0);
}
Выше мой текущий код для управления ускорителем в моей игре. Я хочу иметь возможность наклонять телефон влево и вправо, и персонаж будет двигаться влево и вправо. Код работает нормально, но персонаж перемещается за пределы экрана. Я попробовал Mathf.Clamp на значении ускорения, а также попытался зафиксировать transform.position, но ничего не сработало и, похоже, просто изменило скорость управления акселерометром.
Мне нужен способ динамически ограничивать перемещение персонажей на экране любого размера.





Если я правильно понял вопрос, вы хотите, чтобы объект был зажат в видимой области. Для этого вы можете использовать Viewport.
Vector3 pos = this.transform.position;
Vector3 viewportPos = Camera.main.WorldToViewportPoint(pos);
if (viewportPos.x < 0f) Camera.main.ViewportToWorldPoint(new Vector3(0f, pos.y, pos.z));
else if (viewportPos.x > 1f) Camera.main.ViewportToWorldPoint(new Vector3(1f, pos.y, pos.z));
Да, этот код переходит в функцию обновления. Если вы не знакомы с пространством области просмотра - это как координата пространства экрана, но со значениями единиц измерения. Таким образом, он изменяется от 0 до 1 по обеим осям (x и y). Это позволяет легко зажимать объекты в видимой области.
Другим решением может быть добавление 2D-коллайдеров вокруг видимой области и привязка их к камере. Однако это будет работать, только если основной объект также использует физику.
Хм, я пробовал использовать идею WorldToViewPortPoint, но персонаж просто прошел сквозь них. Полностью проигнорировал зажим. Я также попытался создать несколько парящих коллайдеров вокруг персонажа, который двигался вместе с ним, и установить его ускорение на 0, как предложил кто-то другой, но это тоже не сработало. Я также попытался сделать так, чтобы у переводчика была жесткая блокировка, когда он ударялся о невидимые стены, но я не уверен, как вы его «разблокируете», когда он отойдет от стены.
Возможно, вы могли бы установить коллайдеры в качестве триггеров рядом с дорожкой и установить переменную ускорения в 0, если объект касается триггера
Я полагаю, вы поместили этот скрипт в функцию обновления? Потому что я попробовал это, и это не сработало. Для справки, я делаю трехмерную летную игру, поэтому нет никаких естественных краев или стен, которые могли бы удерживать его. Также да, в соответствии с вашим предположением. Я хочу убедиться, что персонаж может перемещаться влево и вправо с помощью элементов управления наклоном, но его следует останавливать, когда он уходит слишком далеко.