Для того чтобы объект в Unity не выходил за границы экрана, можно использовать несколько подходов в зависимости от требуемой логики и типа объекта.
1. Ограничение границами экрана:
- Установите ограничивающие значения координат для объекта на основе размеров экрана. Вы можете использовать методы Camera.WorldToViewportPoint
и Camera.ViewportToWorldPoint
для преобразования экранных координат в мировые координаты и наоборот.
- В методе Update
объекта, проверьте текущие мировые координаты объекта и сравните их с ограничивающими значениями, чтобы убедиться, что объект остается в пределах границ экрана. Если объект выходит за границы, измените его координаты до ближайших границ.
Пример кода:
public class ObjectBoundaries : MonoBehaviour { private Vector3 minBoundaries; private Vector3 maxBoundaries; private void Start() { // Получаем размеры экрана в мировых координатах minBoundaries = Camera.main.ViewportToWorldPoint(new Vector3(0, 0, 0)); maxBoundaries = Camera.main.ViewportToWorldPoint(new Vector3(1, 1, 0)); } private void Update() { // Проверяем, что объект находится в пределах границ if (transform.position.x < minBoundaries.x) { transform.position = new Vector3(minBoundaries.x, transform.position.y, transform.position.z); } else if (transform.position.x > maxBoundaries.x) { transform.position = new Vector3(maxBoundaries.x, transform.position.y, transform.position.z); } if (transform.position.y < minBoundaries.y) { transform.position = new Vector3(transform.position.x, minBoundaries.y, transform.position.z); } else if (transform.position.y > maxBoundaries.y) { transform.position = new Vector3(transform.position.x, maxBoundaries.y, transform.position.z); } } }
2. Использование коллайдеров:
- Добавьте коллайдер объекту (например, BoxCollider или CircleCollider), настроив его размеры в соответствии с размерами объекта.
- Добавьте компонент Rigidbody для объекта, чтобы разрешить физику и применить силы к объекту.
- Установите флаг Is Kinematic
в true для Rigidbody, чтобы объект не двигался под воздействием физики других объектов.
- Добавьте компоненты, отслеживающие столкновения (например, OnCollisionEnter), чтобы проверять столкновения объекта с границами экрана.
- В обработчике столкновений, измените скорость или позицию объекта, чтобы он не выходил за границы экрана.
Пример кода:
public class ObjectBoundaries : MonoBehaviour { private float minX; private float minY; private float maxX; private float maxY; private void Start() { // Получаем размеры экрана в мировых координатах minX = Camera.main.ScreenToWorldPoint(new Vector3(0, 0, 0)).x; minY = Camera.main.ScreenToWorldPoint(new Vector3(0, 0, 0)).y; maxX = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, 0)).x; maxY = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, 0)).y; } private void OnCollisionEnter(Collision collision) { // Проверяем столкновение с границами экрана и изменяем позицию объекта if (collision.gameObject.CompareTag("Boundary")) { // Рассчитываем новые координаты объекта float newX = Mathf.Clamp(transform.position.x, minX, maxX); float newY = Mathf.Clamp(transform.position.y, minY, maxY); // Изменяем позицию объекта на новые координаты transform.position = new Vector3(newX, newY, transform.position.z); } } }
В обоих случаях важно, чтобы ваша камера была настроена правильно и границы экрана были определены корректно. Это поможет корректно ограничить объекты внутри экрана и предотвратить их выход за границы.