Как сделать чтобы объект не выходил за границы экрана?

Для того чтобы объект в 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);
           }
       }
   }

В обоих случаях важно, чтобы ваша камера была настроена правильно и границы экрана были определены корректно. Это поможет корректно ограничить объекты внутри экрана и предотвратить их выход за границы.