Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/3DI70R/Unity-SensorKit
Utility classes for headache-free raycasting configuration in Unity
https://github.com/3DI70R/Unity-SensorKit
physics unity-3d unity-scripts
Last synced: about 2 months ago
JSON representation
Utility classes for headache-free raycasting configuration in Unity
- Host: GitHub
- URL: https://github.com/3DI70R/Unity-SensorKit
- Owner: 3DI70R
- License: mit
- Created: 2018-11-27T17:59:58.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2020-02-25T20:29:03.000Z (over 4 years ago)
- Last Synced: 2024-01-28T23:42:42.874Z (5 months ago)
- Topics: physics, unity-3d, unity-scripts
- Language: C#
- Homepage:
- Size: 1.22 MB
- Stars: 90
- Watchers: 6
- Forks: 10
- Open Issues: 0
-
Metadata Files:
- Readme: README-ru.md
- License: LICENSE
Lists
- awesome-stars - Unity-SensorKit - free raycasting configuration in Unity | 3DI70R | 78 | (C#)
- awesome-unity3d - Unity-SensorKit - Utility classes for headache-free raycasting configuration in Unity (Open Source Repositories / Physic)
- awesome - 3DI70R/Unity-SensorKit - Utility classes for headache-free raycasting configuration in Unity (C\#)
README
![Logo](Images/SensorKitLogo.gif)
[![openupm](https://img.shields.io/npm/v/ru.threedisevenzeror.sensorkit?label=openupm®istry_uri=https://package.openupm.com)](https://openupm.com/packages/ru.threedisevenzeror.sensorkit/)Утилитарные компоненты для работы с Raycast'ами как с игровыми обьектами
# Зачем нужна
Эта библиотека оборачивает методы Physics.**X**Cast and Physics.Overlap**X** в MonoBehavior, и превращает игровой обьект в конфигурируемый сенсор.
Благодаря ей можно писать код который меньше думает о том как стрельнуть луч, и больше о том, как реагировать если луч куда то попал.# Особенности
* **Выносит логику работы с cast'ами и overlap'ами в отдельный класс.**
* **Несколько уровней наследования позволяет абстрагировать тип сенсора (Cast или Overlap) и его форму (Луч, Сфера, Капсула, Куб).**
* **Спроектирована для встраивание в существующую логику**
* **Корректно применяет на себя все transform'ы, так же, как это бы делал коллайдер.**
* **Детальное Gizmo для того чтобы видеть абсолютно всю информацию о том, как себя поведёт каст.**
* **Автоматический выбор метода в зависимости от настроек сенсора.**
* **В случае если желаемое количество детектов > 1, используются NonAlloc версии методов с переиспользуемым массивом.**
* **Можно анимировать параметры каста при помощи аниматора, как и любой другой обьект**---
# Использование
- Добавьте на сцену нужный компонент и настройте параметры детекта
- **SphereCastSensor** | **BoxCastSensor** | **SphereOverlapSensor** | **BoxOverlapSensor**
- Добавьте своему игровому обьекту поле того же типа, присвойте туда этот сенсор
- Вызывайте `UpdateSensor()` когда нужно сделать новый каст/overlap
- Используйте полученную информацию как угодно```CS
public class SensorTest : MonoBehaviour
{
public CastSensor groundSensor;public void Update()
{
groundSensor.UpdateSensor();
if (groundSensor.HasHit)
{
var normal = groundSensor.RayHit.normal;
// ground movement logic
}
else
{
// airborn movement logic
}
}
}
```# Архитектура
Библиотека спроектирована таким образом, чтобы дать возможность быстро итерировать логику связанную с Cast'ами и Overlap'ами, и быстро переключаться между различными способами взаимодействия с физическим миром не модифицируя при этом код.![Class Diagram](Images/ClassDiagram.png)
###### Ray/Capsule касты отсутствуют, потому что являются производными от SphereCast'а. В случае если Radius = 0, используется RayCast, а в случае если Width > 0, используется CapsuleCast. Похожая логика используется и для Overlap'овКаждый из уровней наследования предлагает функционал, который позволит получать общую информацию о детекте независимо от типа сенсора. Таким образом например, в случае если необходимо всего лишь детектить присутствие какого то обьекта, PhysicsSensor позволит получать общую информацию независимую от типа сенсора (Есть ли попадание и список обьектов). Для кардинальной смены логики, например смены BoxOverlap на SphereCast, не потребуется изменять оригинальный исходник, а просто поменять ссылку на сенсор.
Сенсор не обновляется сам по себе, и для его обновления необходимо вызывать `UpdateSensor()`. На это есть несколько причин:
- Все игровые обьекты используют касты внутри своей логики, и невозможно предугадать в какое время и месте они это сделают.
- Каст может происходить не каждый кадр
- Иногда необходимо сделать каст, и хранить результат# Параметры
Сорян, русская документация служит черновиком для английской, а параметры я описывал сразу там, ну в общем там глянь# Требования
Unity **2018.1** или выше# Установка
* **Git**:
В случае если у вас версия Unity 2018.1 и выше и установлен git, можете добавить строчку в **Packages\manifest.json**
```
"ru.threedisevenzeror.sensorkit": "https://github.com/3DI70R/SensorKit.git"
```
И все компоненты будут загружены и подключены как модуль, не засоряя папку проекта.* **Как пакет**:
Просто скачайте этот репозиторий как Zip, распакуйте, и в Package Manager'е выберите "Add package from disk..." указав "package.json"
* **OpenUPM**:
Пакет так же доступен в [репозитории OpenUPM](https://openupm.com). Можно установить его через [openupm-cli](https://github.com/openupm/openupm-cli).
```
openupm add ru.threedisevenzeror.sensorkit
```В противном случае, можно просто скопировать файлы из `Assets/Scripts/Runtime` и вставить в проект, некрасиво, лениво, зато быстро
# Changelog
* 1.0.0
- Первая версия
* 1.1.0
- Фича: Поддержка переопределения PhysicsScene для каста в другой сцене
- Фича: Поддержка переопределения направления луча для Cast сенсоров, для возможности кастить фигуры направленные в сторону отличную от луча
- Багфикс: RayCast/SphereCast/CapsuleCast считали собственный Ray вместо посчитанного заранее
* 1.1.1
- Багфикс: NullReference при активации Gizmos в GameView
* 1.1.2
- Багфикс: CastSensor хранил **static** массив. Это прямо таки большой и жирный баг который как то прошёл мимо меня. Сорян. (Хранился только последний результат каста и данные терялись если их не использовать до следующего вызова)
- Багфикс: На 2019.3 текст в окошке Gizmo был немного обрезан из за обновлённого UI
* 1.1.3
- Улучшение: Форматирование для документации, Всплывающие окошки в с документацией у полей
- Улучшение: Обновление стиля окошка с информацией о попадании, также теперь он не обрезается о границу окна
- Улучшение: Кэширование вершин для отображения треугольников
- Улучшение: "Lazy Allocation" теперь только для чтения, нельзя анимировать и можно проставить только из инспектора, так как его значение используется только при инициализации компонента
* 1.1.4
- Багфикс: Out of bounds exception при попытке отрисовать треугольник на Convex MeshCollider (при таком случае, triangleIndex == -1)