{"id":31130323,"url":"https://github.com/thisaislan/scriptables","last_synced_at":"2025-09-18T02:36:12.827Z","repository":{"id":312657691,"uuid":"1048111844","full_name":"thisaislan/scriptables","owner":"thisaislan","description":"A powerful Unity package that enhances ScriptableObjects with runtime data management, editor debugging capabilities, and intuitive data separation between editor and runtime environments.","archived":false,"fork":false,"pushed_at":"2025-09-11T15:22:31.000Z","size":139,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-11T18:22:46.913Z","etag":null,"topics":["scriptableobjects","tools","unity"],"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/thisaislan.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-31T23:57:23.000Z","updated_at":"2025-09-11T15:20:32.000Z","dependencies_parsed_at":null,"dependency_job_id":"380d6bda-6f58-4208-b2dd-5c561219a5f6","html_url":"https://github.com/thisaislan/scriptables","commit_stats":null,"previous_names":["thisaislan/scriptables"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/thisaislan/scriptables","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisaislan%2Fscriptables","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisaislan%2Fscriptables/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisaislan%2Fscriptables/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisaislan%2Fscriptables/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thisaislan","download_url":"https://codeload.github.com/thisaislan/scriptables/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisaislan%2Fscriptables/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275697928,"owners_count":25511746,"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","status":"online","status_checked_at":"2025-09-18T02:00:09.552Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["scriptableobjects","tools","unity"],"created_at":"2025-09-18T02:36:07.503Z","updated_at":"2025-09-18T02:36:12.802Z","avatar_url":"https://github.com/thisaislan.png","language":"C#","funding_links":["https://ko-fi.com/thisaislan"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/thisaislan/janus-scenes\"\u003e\n    \u003cimg src=\"https://github.com/thisaislan/just-images/raw/main/images/scriptables/scriptables_logo.png\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch1 style=\"font-size: 50px\" align =\"center\"\u003e\n  Scriptables  \n  \u003ch4  align =\"center\"\u003e\n    A powerful Unity package that enhances ScriptableObjects with runtime data management, editor debugging capabilities, and intuitive data separation between editor and runtime environments.\n    \u003cbr\u003e\n  \u003c/h4\u003e\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://unity3d.com/get-unity/download\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/unity-tools-blue\" alt=\"Unity Download Link\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/thisaislan/scriptables/blob/main/LICENSE.md\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/License-MIT-brightgreen.svg\" alt=\"License MIT\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://chat.deepseek.com\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/%F0%9F%92%AC-DeepSeek%20AI-blue\" alt=\"License MIT\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch1\u003e\u003c/h1\u003e\n\n\n\u003c/br\u003e\n\n### Table of Contents\n- [Features](#✨-features)\n- [Overview](#🏗️-overview)\n- [Quick Start](#🚀-quick-start)\n- [Install](#📦-install)\n- [Support](#🤝-support)\n- [Thanks](#💖-thanks)\n- [License](#📄-license)\n\n\u003c/br\u003e\n\n## ✨ Features\n\n- **Dual Data System**: Separate editor data from runtime data with automatic reset functionality\n- **Runtime ScriptableObjects**: Data that automatically resets when exiting play mode\n- **Settings ScriptableObjects**: Preserve editor data while allowing runtime modifications\n- **Reactive ScriptableObjects**: Preserve editor data while allowing other classes to add observer to value changes\n- **Advanced Editor Integration**: Custom inspector with real-time data visualization\n- **Type-Safe Data Management**: Generic implementation supporting any serializable data type\n- **Reflection-Based UI**: Automatically generates editor UI for the data structures (Editor mode)\n- **Reset Management**: Automatic data cleanup when entering/exiting play mode\n- **Scriptable Panel**: Panel to help organize all scriptableObjects in the project (Tools/Scriptable/Panel)\n\n\u003c/br\u003e\n\n## 🏗️ Overview\n\nThe package follows a clean ScriptableObject architecture by dividing them into three specialized types:\n\n### ⚙️ Scriptable Settings\n- **Fixed data** configured to be used when the game runs\n- Can be updated via remote config, repositories, or any external means\n- Persistent data that maintains editor-configured values\n- Ideal for game configuration, constants, and setup parameters\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\n\n### 🔄 Scriptable Runtime\n- **Temporary data** shared across different systems in the project\n- Volatile data that resets automatically\n- Perfect for game state, temporary variables, and system communication\n- No persistence - reset to defaults on every run\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\n\n### 🔥Scriptable Reactive\n- **Observable data** that notifies listeners automatically when values change\n- Editor/Runtime separation maintains different values for edit mode vs. play mode\n- Event-driven architecture allows decoupled communication between systems\n- Automatic persistence preserves editor-configured values while allowing runtime modifications\n\n\u003c/br\u003e\n\n## 🚀 Quick Start \n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\n\n### Creating Scriptable Settings\n\n```csharp\n[CreateAssetMenu(fileName = \"BarScriptableSettings\", menuName = \"Bar/Settings\")]\npublic class BarScriptableSettings : ScriptableSettings\u003cBarScriptableSettings.BarData\u003e\n{\n    [Serializable]\n    public class BarData : Data\n    {\n        public string Foo;\n    }\n}\n```\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\nWhen a new instance is created of these ScriptableObjects in the Inspector, they appear with a clean, organized interface:\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\n\n\u003cdiv align=\"center\" style=\"text-align:center;\"\u003e\n  \u003cimg src=\"https://github.com/thisaislan/just-images/raw/main/images/scriptables/settings.png\"  width=\"500\" \u003e \n  \u003cbr\u003e\n\u003c/div\u003e\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\nAnd in play mode:\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\n\u003cdiv align=\"center\" style=\"text-align:center;\"\u003e\n  \u003cimg src=\"https://github.com/thisaislan/just-images/raw/main/images/scriptables/settings_play_mode.png\"  width=\"500\" \u003e \n  \u003cbr\u003e\n\u003c/div\u003e\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\nThe editor provides:\n\n    Clear separation between Settings and Runtime data\n\n    Intuitive interface for configuring default values\n\n    Visual indicators for data type and purpose\n\n    Method to initialize data when necessary\n\n    Method to print data (Editor only)\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\n### Creating Scriptable Runtime\n\n```csharp\n[CreateAssetMenu(fileName = \"FooScriptableRuntime\", menuName = \"Foo/Runtime\")]\npublic class FooScriptableRuntime : ScriptableRuntime\u003cFooScriptableRuntime.FooData\u003e\n{\n    [Serializable]\n    public class FooData : Data\n    {\n        public int Bar;\n    }\n}\n```\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\n\nInstance:\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\n\n\u003cdiv align=\"center\" style=\"text-align:center;\"\u003e\n  \u003cimg src=\"https://github.com/thisaislan/just-images/raw/main/images/scriptables/runtime.png\"  width=\"500\" \u003e \n  \u003cbr\u003e\n\n\u003c/div\u003e\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\n\nPlay mode:\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\n\n\u003cdiv align=\"center\" style=\"text-align:center;\"\u003e\n  \u003cimg src=\"https://github.com/thisaislan/just-images/raw/main/images/scriptables/runtime_play_mode.png\"  width=\"500\" \u003e \n  \u003cbr\u003e\n\u003c/div\u003e\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\n\nAs ScriptableSettings the runtime data can be changed freely during gameplay without any persistence concerns. The system automatically handles:\n\n    Automatic Reset: Runtime data resets to default values on every run in the Unity Editor\n\n    Zero Persistence: Changes made during runtime are never saved automatically\n\n    Isolated Modifications: Runtime changes don't affect the original editor-configured values\n\n    Clean State: Every play session starts with fresh, default data\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\nRuntime features include:\n\n    Real-time data modification capabilities\n\n    Visual feedback for data changes\n\n    Reset functionality for testing\n\n    Clean display of current runtime values\n\n    Method to reset data when necessary\n    \n    Method to print data (Editor only)\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\n### Creating Scriptable Reactive\n\nScriptable Reactives are observable data containers that automatically notify listeners when their values change, enabling reactive programming patterns throughout on the project.\n\n\nIt is possible to create Scriptable Reactives using the asset menu by right-clicking and selecting:\nCreate \u003e Scriptables \u003e Reactives\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\nThe following pre-made types are available:\n\n  - BooleanScriptableReactive\n  - ColorScriptableReactive\n  - DoubleScriptableReactive\n  - FloatScriptableReactive\n  - GameObjectScriptableReactive\n  - IntScriptableReactive\n  - NoParametersScriptableReactive\n  - QuaternionScriptableReactive\n  - StringScriptableReactive\n  - TransformScriptableReactive\n  - Vector2ScriptableReactive\n  - Vector3ScriptableReactive\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\nWhen a instances of these ScriptableObjects is created in the Inspector (Vector2 type):\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\n\n\u003cdiv align=\"center\" style=\"text-align:center;\"\u003e\n  \u003cimg src=\"https://github.com/thisaislan/just-images/raw/main/images/scriptables/reactive.png\"  width=\"500\" \u003e \n  \u003cbr\u003e\n\u003c/div\u003e\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\nIn play mode:\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\n\u003cdiv align=\"center\" style=\"text-align:center;\"\u003e\n  \u003cimg src=\"https://github.com/thisaislan/just-images/raw/main/images/scriptables/reactive_play_mode.png\"  width=\"500\" \u003e \n  \u003cbr\u003e\n\u003c/div\u003e\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\n  It is possible to extend the ScriptableReactive class to create custom reactive types:\n\n```csharp\n[CreateAssetMenu(fileName = \"FooBarScriptableReactive\", menuName = \"FooBar/Reactive\")]\npublic class FooBarScriptableReactive : ScriptableReactive\u003cFooBarScriptableReactive\u003e\n{\n    // Methods here if needed\n}\n```\n\n\u003e Note: Not all types are serializable by default or will be visible in the editor. Ensure the custom type is marked as [System.Serializable] if it's a custom class.\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\nLike ScriptableSettings, Scriptable Reactives handle runtime data intelligently:\n\n    Automatic Reset: Runtime values reset to editor-configured defaults on every play session\n\n    Zero Persistence: Runtime modifications are never automatically saved\n\n    Isolated Modifications: Editor values remain untouched during gameplay\n\n    Clean State: Each play session starts with fresh, predictable data\n\n\u003ch5 style=\"font-size: 1px\" align =\"center\"\u003e\n    \u003cbr\u003e\n\u003c/h5\u003e\n\n\nFeatures include:\n\n    Method to reset data (When possible)\n    \n    Method to print data (Editor only)\n\n    Methods to ensure observability of the data\n\n\u003c/br\u003e\n\n## 📦 Install\n\n1. Copying git url https://github.com/thisaislan/scriptables.git\n\n2. Click on `Window/Package Manager` in Unity Editor\n\n3. Click on add package button `Add package button`\n\n4. Select `Add package from git URL...`\n\n5. Past the url\n\n6. Press `Enter` or clink on the `Add` button\n\n7. Enjoy :satisfied:\n\n\u003c/br\u003e\n\n## 🤝 Support\nPlease submit any queries, bugs or issues, to the [Issues](https://github.com/thisaislan/scriptabes/issues) page on this repository. All feedback is appreciated as it not just helps myself find problems I didn't otherwise see, but also helps improve the project.\n\n\u003c/br\u003e\n\n## 💖 Thanks\nMy friends and family, and you for having come here!\n\n\u003c/br\u003e\n\n## 📄 License\nCopyright (c) 2024-present Aislan Tavares (@thisaislan) and Contributors. Scriptables is free and open-source software licensed under the [MIT License](https://github.com/thisaislan/scriptables/blob/main/LICENSE.md).\n\n\n\u003c!--\n  ko-fi donation button \n --\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003ch4 align=\"center\" style=\"text-align:center;\"\u003e\n  \u003ca href=\"https://ko-fi.com/thisaislan\"\u003e\n    \u003cimg src=\"https://github.com/thisaislan/just-images/raw/main/images/ko-fi/ko-fi_donation_banner.gif\" style=\"width: 460px\"\u003e\n  \u003c/a\u003e\n\u003c/h4\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\n\u003ch4 align=\"center\" style=\"text-align:center;\"\u003e\n  \u003ca href=\"https://github.com/thisaislan/scriptables\"\u003e\n    \u003cimg src=\"https://github.com/thisaislan/just-images/raw/main/images/scriptables/scriptables_all.png\" style=\"width: 100px\"\u003e    \n  \u003c/a\u003e\n\n  Enjoy! ♥️\n\u003c/h4\u003e\n\u003cbr\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthisaislan%2Fscriptables","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthisaislan%2Fscriptables","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthisaislan%2Fscriptables/lists"}