{"id":18951909,"url":"https://github.com/christopheratkinson/common-features-toolkit","last_synced_at":"2025-07-06T03:04:50.789Z","repository":{"id":176094334,"uuid":"433609151","full_name":"ChristopherAtkinson/Common-Features-Toolkit","owner":"ChristopherAtkinson","description":"Create intial repo for unity package project.","archived":false,"fork":false,"pushed_at":"2022-03-14T19:25:10.000Z","size":48,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-02T00:54:24.780Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/ChristopherAtkinson.png","metadata":{"files":{"readme":"README.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,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-11-30T22:41:11.000Z","updated_at":"2022-05-19T18:46:46.000Z","dependencies_parsed_at":null,"dependency_job_id":"0fe4cf8f-4292-4a03-b0b0-2a8154679604","html_url":"https://github.com/ChristopherAtkinson/Common-Features-Toolkit","commit_stats":null,"previous_names":["christopheratkinson/common-features-toolkit"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ChristopherAtkinson/Common-Features-Toolkit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChristopherAtkinson%2FCommon-Features-Toolkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChristopherAtkinson%2FCommon-Features-Toolkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChristopherAtkinson%2FCommon-Features-Toolkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChristopherAtkinson%2FCommon-Features-Toolkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ChristopherAtkinson","download_url":"https://codeload.github.com/ChristopherAtkinson/Common-Features-Toolkit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChristopherAtkinson%2FCommon-Features-Toolkit/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263841596,"owners_count":23518484,"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":[],"created_at":"2024-11-08T13:29:56.206Z","updated_at":"2025-07-06T03:04:50.782Z","avatar_url":"https://github.com/ChristopherAtkinson.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Common Features Toolkit [![version support][shield-unity]](#) [![version support][shield-odin_inspector]](#) [![MIT licensed][shield-license]](#)\r\n\r\nCommon Features Toolkit is a set of tools design for improving workflow in Unity and adding missing or much needed features commonly available in other engines, and platforms.\r\n\r\n## Table of Contents\r\n\r\n  * [Dependencies](#dependencies)\r\n    * [Unity Long Term Support](#unity-long-term-support)\r\n    * [Odin Inspector and Serializer](#odin-inspector-and-serializer)\r\n  * [Installation](#installation)\r\n  * [Features](#features)\r\n    * [Scriptable Event System](#scriptable-event-system)\r\n  * [License](#license)\r\n\r\n## Dependencies\r\n\r\n### [Unity Long Term Support](https://unity3d.com/unity/whats-new/2018.4.36) \r\n\r\nthis project depends on Unity as it is a Unity package intended for sharing and re-using Unity projects and collections of assets.\r\n\r\n[![version support][shield-unity]](#)\r\n\r\n### [Odin Inspector and Serializer](https://assetstore.unity.com/packages/tools/utilities/odin-inspector-and-serializer-89041) \r\n\r\nThis project depends heavily on the use of [Odin - Inspector and Serializer](https://assetstore.unity.com/packages/tools/utilities/odin-inspector-and-serializer-89041) to be able to create robust and intuitive inspectors in unity.\r\n\r\nDue to Odin's license agreement, this package will not distribute or share any source material.\r\n\r\n[![version support][shield-odin_inspector]](#)\r\n\r\n## Installation\r\n\r\nThe Unity Package Manager can [load a package from a Git repository](https://docs.unity3d.com/Manual/upm-ui-giturl.html) on a remote server.\r\n\r\n![Package Manager UI Image Not Found](https://docs.unity3d.com/uploads/Main/PackageManagerUI-GitURLPackageButton-Add.png \"Package Manager UI\")\r\n\r\nAlterantivly to add the following [Git dependency](https://docs.unity3d.com/Manual/upm-git.html) using the Unity Package Manager, append the follwoing information to the `manifest.json`:\r\n\r\n```\r\n\"com.undefined.common-features-toolkit\": \"https://github.com/ChristopherAtkinson/Common-Features-Toolkit\"\r\n```\r\n\r\n## Features\r\n\r\n```\r\nInclude introduction for the features included and information about new and upcoming features in the future.\r\n```\r\n\r\n### Scriptable Event System  \r\n\r\nScriptable Event System is a core features to build on top of ScriptableObjects as an Event system. Event architectures help modularize your code by sending messages between systems that do not directly know about each other. They allow things to respond to a change in state without constantly monitoring it in an update loop.\r\n\r\n#### Creation of New Events Types\r\n\r\nHere is an example script for generating GameObject based events **GameObjectChannelSO.cs**\r\n\r\n```c#\r\n\r\n// STEP 1: Include the namespace.\r\nusing Undefined.CommonFeaturesToolkit.ScriptableEventSystem;\r\n\r\n// STEP 2: Define a new scriptable object and inherit from ChannelReceiver.ChannelSO for the desired type.\r\n// IMPORTANT: The class must match the name of the file for unity to correctly associated with the CreateAssetMenu.\r\n[UnityEngine.CreateAssetMenu(fileName = \"New GameObjectChannelSO\", menuName = \"Game Events/GameObjectChannelSO\")]\r\npublic sealed class GameObjectChannelSO : ChannelReceiver.ChannelSO\u003cUnityEngine.GameObject\u003e { }\r\n\r\n// STEP 3: Define a new type defined from ChannelReceiver.Channel to expose to the inspector.\r\n// IMPORTANT: This must be defined for the inspector to correctly find the type during reflection.\r\npublic sealed class GameObjectChannel : ChannelReceiver.Channel\u003cUnityEngine.GameObject, GameObjectChannelSO, UnityEngine.Events.UnityEvent\u003cUnityEngine.GameObject\u003e\u003e { }\r\n\r\n```\r\n\r\n**It is important to not that the these events can be created using most primitive types but can also be defined by using custom classes including several types.**\r\n\r\n#### Interface and Listening for Events\r\n\r\nSelecting type based on the previously defined interfaces through reflection.\r\n\r\n![Channel Receiver - Interface Selection](/Documentation/Images/ChannelReceiver-InterfaceSelection.png \"Channel Receiver - Interface Selection\")\r\n\r\nInterface expansion once type is defined and adjustable fields for suitable event responses.\r\n\r\n![Channel Receiver - Empty Interface](/Documentation/Images/ChannelReceiver-EmptyInterface.png \"Channel Receiver - Empty Interface\")\r\n\r\n## License \r\n\r\nCommon-Features-Toolkit is licensed under the [MIT](#) license. \r\n\r\nCopyright \u0026copy; 2021, Christopher Atkinson.\r\n\r\n[shield-unity]: https://img.shields.io/badge/unity%20support-2018.4.36-brightgreen.svg\r\n[shield-odin_inspector]: https://img.shields.io/badge/odin_inspector%20support-3.0.12-brightgreen.svg\r\n[shield-license]: https://img.shields.io/badge/license-MIT-blue.svg\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchristopheratkinson%2Fcommon-features-toolkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchristopheratkinson%2Fcommon-features-toolkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchristopheratkinson%2Fcommon-features-toolkit/lists"}