# Работа с физикой

#### **С физикой, особенно с логикой движения, работаем в FixedUpdate**

### **Слои коллизий**

Юнити предоставляет возможность настраивать коллизию между объектами слоев при помощи матрицы коллизий. **При помощи них можно снизить количество нежелательных коллизий.**

![](https://lh6.googleusercontent.com/5UBwns-tsFD0aYZ8YsO7Ild_vnGzNegeF3urgmHAM4MyyqM-YZx_nyp2MepOLE0qon_e00JuWIjXo6LNUJQoCmXC3Suvd8gQdAyE8D3bcobR64l4X0TFGiXyLv3EopalgCd2ECjzaEGnFkl4Pg)

В целях оптимизации убираем коллизию между слоями которые по задумке не должны взаимодействовать. И не забываем использовать эти слои.

### **Триггеры**

Если нужно создать какую-то логику на триггерах, то делаем так: **на единичных объектах (например игрок) или тех что меньше по кол-ву должен висеть коллайдер (isTrigger или нет, не важно) с rigidbody, а на множественных объектах должен висеть триггер со скриптом, который содержит логику триггера**

### **Raycast**

Некоторые советы по работе с рейкастами:

* Используем **минимально** необходимое количество **рейкастов**.
* **Не увеличиваем длину луча больше чем необходимо**, длина луча влияет на производительность
* **Не используем рэйкасты внутри апдейтов**, без необходимости
* **Используй layerMask** для ограничения того, с чем сталкивается луч. Если необходимо, чтобы луч пересекался со всеми слоями кроме тех, что мы задаем в layerMask - используем оператор \~ для битовой маски (\~layerMask.value)
