{"id":13663755,"url":"https://github.com/3DI70R/Unity-SensorKit","last_synced_at":"2025-04-25T17:33:08.042Z","repository":{"id":111402340,"uuid":"159377613","full_name":"3DI70R/Unity-SensorKit","owner":"3DI70R","description":"Utility classes for headache-free raycasting configuration in Unity","archived":false,"fork":false,"pushed_at":"2020-02-25T20:29:03.000Z","size":1284,"stargazers_count":94,"open_issues_count":0,"forks_count":11,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-10-30T00:04:36.237Z","etag":null,"topics":["physics","unity-3d","unity-scripts"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/3DI70R.png","metadata":{"files":{"readme":"README-ru.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-11-27T17:59:58.000Z","updated_at":"2024-10-01T23:58:29.000Z","dependencies_parsed_at":"2023-03-08T23:00:16.343Z","dependency_job_id":null,"html_url":"https://github.com/3DI70R/Unity-SensorKit","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3DI70R%2FUnity-SensorKit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3DI70R%2FUnity-SensorKit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3DI70R%2FUnity-SensorKit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3DI70R%2FUnity-SensorKit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/3DI70R","download_url":"https://codeload.github.com/3DI70R/Unity-SensorKit/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224011661,"owners_count":17240984,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["physics","unity-3d","unity-scripts"],"created_at":"2024-08-02T05:02:36.221Z","updated_at":"2025-04-25T17:33:08.037Z","avatar_url":"https://github.com/3DI70R.png","language":"C#","readme":"![Logo](Images/SensorKitLogo.gif)\n[![openupm](https://img.shields.io/npm/v/ru.threedisevenzeror.sensorkit?label=openupm\u0026registry_uri=https://package.openupm.com)](https://openupm.com/packages/ru.threedisevenzeror.sensorkit/)\n\nУтилитарные компоненты для работы с Raycast'ами как с игровыми обьектами\n\n# Зачем нужна\nЭта библиотека оборачивает методы Physics.**X**Cast and Physics.Overlap**X** в MonoBehavior, и превращает игровой обьект в конфигурируемый сенсор.\nБлагодаря ей можно писать код который меньше думает о том как стрельнуть луч, и больше о том, как реагировать если луч куда то попал.\n\n# Особенности\n* **Выносит логику работы с cast'ами и overlap'ами в отдельный класс.**\n* **Несколько уровней наследования позволяет абстрагировать тип сенсора (Cast или Overlap) и его форму (Луч, Сфера, Капсула, Куб).**\n* **Спроектирована для встраивание в существующую логику**\n* **Корректно применяет на себя все transform'ы, так же, как это бы делал коллайдер.**\n* **Детальное Gizmo для того чтобы видеть абсолютно всю информацию о том, как себя поведёт каст.**\n* **Автоматический выбор метода в зависимости от настроек сенсора.**\n* **В случае если желаемое количество детектов \u003e 1, используются NonAlloc версии методов с переиспользуемым массивом.**\n* **Можно анимировать параметры каста при помощи аниматора, как и любой другой обьект**\n\n---\n\n# Использование\n- Добавьте на сцену нужный компонент и настройте параметры детекта\n   - **SphereCastSensor** | **BoxCastSensor** | **SphereOverlapSensor** | **BoxOverlapSensor**\n- Добавьте своему игровому обьекту поле того же типа, присвойте туда этот сенсор\n- Вызывайте `UpdateSensor()` когда нужно сделать новый каст/overlap\n- Используйте полученную информацию как угодно\n\n```CS\npublic class SensorTest : MonoBehaviour\n{\n    public CastSensor groundSensor;\n\n    public void Update()\n    {\n        groundSensor.UpdateSensor();\n        \n        if (groundSensor.HasHit)\n        {\n            var normal = groundSensor.RayHit.normal;\n            // ground movement logic\n        }\n        else\n        {\n            // airborn movement logic\n        }\n    }\n}\n```\n\n# Архитектура\nБиблиотека спроектирована таким образом, чтобы дать возможность быстро итерировать логику связанную с Cast'ами и Overlap'ами, и быстро переключаться между различными способами взаимодействия с физическим миром не модифицируя при этом код.\n\n![Class Diagram](Images/ClassDiagram.png)\n###### Ray/Capsule касты отсутствуют, потому что являются производными от SphereCast'а. В случае если Radius = 0, используется RayCast, а в случае если Width \u003e 0, используется CapsuleCast. Похожая логика используется и для Overlap'ов\n\nКаждый из уровней наследования предлагает функционал, который позволит получать общую информацию о детекте независимо от типа сенсора. Таким образом например, в случае если необходимо всего лишь детектить присутствие какого то обьекта, PhysicsSensor позволит получать общую информацию независимую от типа сенсора (Есть ли попадание и список обьектов). Для кардинальной смены логики, например смены BoxOverlap на SphereCast, не потребуется изменять оригинальный исходник, а просто поменять ссылку на сенсор.\n\nСенсор не обновляется сам по себе, и для его обновления необходимо вызывать `UpdateSensor()`. На это есть несколько причин:\n- Все игровые обьекты используют касты внутри своей логики, и невозможно предугадать в какое время и месте они это сделают.\n- Каст может происходить не каждый кадр\n- Иногда необходимо сделать каст, и хранить результат\n\n# Параметры\nСорян, русская документация служит черновиком для английской, а параметры я описывал сразу там, ну в общем там глянь\n\n# Требования\nUnity **2018.1** или выше\n\n# Установка\n\n* **Git**: \n    В случае если у вас версия Unity 2018.1 и выше и установлен git, можете добавить строчку в **Packages\\manifest.json**\n    ```\n    \"ru.threedisevenzeror.sensorkit\": \"https://github.com/3DI70R/SensorKit.git\"\n    ```\n    И все компоненты будут загружены и подключены как модуль, не засоряя папку проекта.\n\n* **Как пакет**:\nПросто скачайте этот репозиторий как Zip, распакуйте, и в Package Manager'е выберите \"Add package from disk...\" указав \"package.json\"\n* **OpenUPM**: \n    Пакет так же доступен в [репозитории OpenUPM](https://openupm.com). Можно установить его через [openupm-cli](https://github.com/openupm/openupm-cli).\n    ```\n    openupm add ru.threedisevenzeror.sensorkit\n    ```\n\nВ противном случае, можно просто скопировать файлы из `Assets/Scripts/Runtime` и вставить в проект, некрасиво, лениво, зато быстро\n\n# Changelog\n* 1.0.0\n    - Первая версия\n* 1.1.0\n    - Фича: Поддержка переопределения PhysicsScene для каста в другой сцене\n    - Фича: Поддержка переопределения направления луча для Cast сенсоров, для возможности кастить фигуры направленные в сторону отличную от луча\n    - Багфикс: RayCast/SphereCast/CapsuleCast считали собственный Ray вместо посчитанного заранее\n* 1.1.1\n    - Багфикс: NullReference при активации Gizmos в GameView\n* 1.1.2\n    - Багфикс: CastSensor хранил **static** массив. Это прямо таки большой и жирный баг который как то прошёл мимо меня. Сорян. (Хранился только последний результат каста и данные терялись если их не использовать до следующего вызова)\n    - Багфикс: На 2019.3 текст в окошке Gizmo был немного обрезан из за обновлённого UI\n* 1.1.3\n    - Улучшение: Форматирование для документации, Всплывающие окошки в с документацией у полей\n    - Улучшение: Обновление стиля окошка с информацией о попадании, также теперь он не обрезается о границу окна\n    - Улучшение: Кэширование вершин для отображения треугольников\n    - Улучшение: \"Lazy Allocation\" теперь только для чтения, нельзя анимировать и можно проставить только из инспектора, так как его значение используется только при инициализации компонента\n* 1.1.4\n    - Багфикс: Out of bounds exception при попытке отрисовать треугольник на Convex MeshCollider (при таком случае, triangleIndex == -1)","funding_links":[],"categories":["Open Source Repositories","C\\#","C#"],"sub_categories":["Physic"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F3DI70R%2FUnity-SensorKit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F3DI70R%2FUnity-SensorKit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F3DI70R%2FUnity-SensorKit/lists"}