{"id":16208024,"url":"https://github.com/iam1337/extdebug","last_synced_at":"2025-09-11T23:08:29.219Z","repository":{"id":45110836,"uuid":"394382065","full_name":"Iam1337/extDebug","owner":"Iam1337","description":"Simple debug menu for Unity.","archived":false,"fork":false,"pushed_at":"2024-03-12T14:23:11.000Z","size":698,"stargazers_count":28,"open_issues_count":1,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-17T05:05:23.774Z","etag":null,"topics":["csharp","unity","unity3d"],"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/Iam1337.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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-08-09T17:29:25.000Z","updated_at":"2025-03-03T03:08:43.000Z","dependencies_parsed_at":"2024-03-12T15:56:00.339Z","dependency_job_id":null,"html_url":"https://github.com/Iam1337/extDebug","commit_stats":null,"previous_names":[],"tags_count":90,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Iam1337%2FextDebug","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Iam1337%2FextDebug/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Iam1337%2FextDebug/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Iam1337%2FextDebug/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Iam1337","download_url":"https://codeload.github.com/Iam1337/extDebug/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244389666,"owners_count":20444979,"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":["csharp","unity","unity3d"],"created_at":"2024-10-10T10:15:08.044Z","updated_at":"2025-03-19T08:30:40.249Z","avatar_url":"https://github.com/Iam1337.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# extDebug - Debug Tools for Unity\n\nCreated by [iam1337](https://github.com/iam1337) and [hww](https://github.com/hww)\n\n![](https://img.shields.io/badge/unity-2021.1%20or%20later-green.svg)\n[![⚙ Build and Release](https://github.com/Iam1337/extDebug/actions/workflows/ci.yml/badge.svg)](https://github.com/Iam1337/extDebug/actions/workflows/ci.yml)\n[![openupm](https://img.shields.io/npm/v/com.iam1337.extdebug?label=openupm\u0026registry_uri=https://package.openupm.com)](https://openupm.com/packages/com.iam1337.extdebug/)\n[![](https://img.shields.io/github/license/iam1337/extDebug.svg)](https://github.com/Iam1337/extDebug/blob/master/LICENSE)\n[![semantic-release: angular](https://img.shields.io/badge/semantic--release-angular-e10079?logo=semantic-release)](https://github.com/semantic-release/semantic-release)\n\n\n### Table of Contents\n- [Introduction](#introduction)\n- [Installation](#installation)\n- [extDebug.Menu](#extdebugmenu---debug-menu)\n- [extDebug.Notifications](#extdebugnotifications---debug-notifications)\n- [Extensions](#extensions)\n- [Author Contacts](#author-contacts)\n\n## Introduction\n\nextDebug are tools for easy development and testing of games on Unity. Supported platforms are PC, Mac and Linux / iOS / tvOS / Android / Universal Windows Platform (UWP) and other.\n\n### Features:\n\n- **Debug Menu**\u003cbr\u003e\nAllows you to add a debug menu in game, with many different functions.\n- **Debug Notifications**\u003cbr\u003e\nAllows you to show a debug notification in game.\n- **Analytics Heatmaps** (Work in progress)\u003cbr\u003e\nTODO: Description\n\n**And also:**\n\n- TODO\n\n**And much more**\n\n## Installation\n**Old school**\n\nJust copy the [Assets/extDebug](Assets/extDebug) folder into your Assets directory within your Unity project, or [download latest extDebug.unitypackage](https://github.com/iam1337/extDebug/releases).\n\n**OpenUPM**\n\nVia [openupm-cli](https://github.com/openupm/openupm-cli):\u003cbr\u003e\n```\nopenupm add com.iam1337.extdebug\n```\n\nOr if you don't have it, add the scoped registry to manifest.json with the desired dependency semantic version:\n```\n\"scopedRegistries\": [\n\t{\n\t\t\"name\": \"package.openupm.com\",\n\t\t\"url\": \"https://package.openupm.com\",\n\t\t\"scopes\": [\n\t\t\t\"com.iam1337.extdebug\",\n\t\t]\n\t}\n],\n\"dependencies\": {\n\t\"com.iam1337.extdebug\": \"1.15.0\"\n}\n```\n\n**Package Manager**\n\nProject supports Unity Package Manager. To install the project as a Git package do the following:\n\n1. In Unity, open **Window \u003e Package Manager**.\n2. Press the **+** button, choose **\"Add package from git URL...\"**\n3. Enter \"https://github.com/iam1337/extDebug.git#upm\" and press Add.\n\n## extDebug.Menu - Debug Menu\n\nIt is easy to use, lightweight library initially forked from [hww/varp_debug_menu](https://github.com/hww/varp_debug_menu) but deeply modifyed. The library allows you to add a debug menu in game, with many different functions.\n\n### Features:\n\n- Changing values: numeric values, booleans, strings, enums, flags and other\n- Store and restore default values\n- Invoke actions\n- Dynamic generation\n\n### Examples:\n![extDebug Menu Root](Documentation/Images/extDebug-Menu-Root.png)\n![extDebug Menu Sub](Documentation/Images/extDebug-Menu-Sub.png)\n\n**Values**\u003cbr\u003e\n```C#\nstring _string;\nbyte _uint8;\nUInt16 _uint16; // ushort\nUInt32 _uint32; // uint\nUInt64 _uint64; // ulong\nsbyte _int8;\nInt16 _int16; // short\nInt32 _int32; // int\nInt64 _int64; // long\nfloat _float;\nbool _bool;\nVector2 _vector2;\nVector3 _vector3;\nVector4 _vector4;\nQuaternion _quaternion;\nColor _color;\nVector2Int _vector2Int;\nVector3Int _vector3Int;\n\nDM.Add(\"Values/String\", () =\u003e _string);\nDM.Add(\"Values/UInt8\", () =\u003e _uint8, v =\u003e _uint8 = v);\nDM.Add(\"Values/UInt16\", () =\u003e _uint16, v =\u003e _uint16 = v);\nDM.Add(\"Values/UInt32\", () =\u003e _uint32, v =\u003e _uint32 = v);\nDM.Add(\"Values/UInt64\", () =\u003e _uint64, v =\u003e _uint64 = v);\nDM.Add(\"Values/Int8\", () =\u003e _int8, v =\u003e _int8 = v);\nDM.Add(\"Values/Int16\", () =\u003e _int16, v =\u003e _int16 = v);\nDM.Add(\"Values/Int32\", () =\u003e _int32, v =\u003e _int32 = v);\nDM.Add(\"Values/Int64\", () =\u003e _int64, v =\u003e _int64 = v);\nDM.Add(\"Values/Float\", () =\u003e _float, v =\u003e _float = v);\nDM.Add(\"Values/Bool\", () =\u003e _bool, v =\u003e _bool = v);\nDM.Add(\"Values/Vector 2\", () =\u003e _vector2, v =\u003e _vector2 = v, order: 14).SetPrecision(2);\nDM.Add(\"Values/Vector 3\", () =\u003e _vector3, v =\u003e _vector3 = v, order: 15).SetPrecision(2);\nDM.Add(\"Values/Vector 4\", () =\u003e _vector4, v =\u003e _vector4 = v, order: 16).SetPrecision(2);\nDM.Add(\"Values/Quaternion\", () =\u003e _quaternion, v =\u003e _quaternion = v, order: 17).SetPrecision(2);\nDM.Add(\"Values/Color\", () =\u003e _color, v =\u003e _color = v, order: 18).SetPrecision(2);\nDM.Add(\"Values/Vector 2 Int\", () =\u003e _vector2Int, v =\u003e _vector2Int = v, order: 19);\nDM.Add(\"Values/Vector 3 Int\", () =\u003e _vector3Int, v =\u003e _vector3Int = v, order: 20);\n```\n\n**Enums and Flags**\u003cbr\u003e\n```C#\nenum ExampleEnums\n{\n\tOne,\n\tTwo,\n\tThree\n}\n\nExampleEnums _enum;\n\n[Flags]\nenum ExampleFlags\n{\n\tOne = 1 \u003c\u003c 0,\n\tTwo = 1 \u003c\u003c 1,\n\tThree = 1 \u003c\u003c 2,\n}\n\nExampleFlags _flags;\n\nDM.Add(\"Values/Enum\", () =\u003e _enum, v =\u003e _enum = v);\nDM.Add(\"Values/Flags\", () =\u003e _flags, v =\u003e _flags = v);\n```\n\n**Actions**\u003cbr\u003e\n```C#\nDM.Add(\"Debug/Action\", action =\u003e Debug.Log(\"Hello World\"));\nDM.Add(\"Debug/Action 2\", action =\u003e Debug.Log(\"Hello World\"), \"Action description\"); // Action with description\n```\n\n**Branches**\u003cbr\u003e\n```C#\nDM.Add(\"Example/Branch 1\");\nDM.Add(\"Example/Branch 2\", \"Branch description\");\n\n// Another way to add menu item in specific branch \nvar branch = DM.Add(\"Example/Branch 3\");\nDM.Add(branch, \"Action\", action =\u003e Debug.Log(\"Hello World\"));\n```\n\n**Variants**\u003cbr\u003e\n```C#\nstring _string = \"Variant 2\";\nstring[] _stringVariants = new string[] { \"Variant 1\", \"Variant 2\", \"Variant 3\" };\n\n\n// You can pre-define lists of values and select the ones you need from them.\nDM.Add(\"Simple Menus/String Variants\", () =\u003e _string, v =\u003e _string = v, _stringVariants, order: 1);\n```\n\n### Keyboard Shortcuts:\n\n**Shared**\n- `Q` - Show or hide menu without closing it\n\n**When the menu is open:**\n- `W`, `S` - Moving through the menu\n- `A`, `D` - Change value, invoke action, open/close branch\n- `R` - Reset value to default\n- `E` - Close current branch branch\n\n**When the menu is closed:**\n- `Shift+A`, `Shift+D` - Change value, invoke action if menu is closed\n- `Shift+R` - Reset value to default even if menu is closed\n\nTo change the default keyboard shortcuts, you need to create a class inherited from the [IDMInput](https://github.com/Iam1337/extDebug/blob/main/Assets/extDebug/Scripts/Menu/IDMInput.cs) interface, and set its instance to `DM.Input`.\n\n### Rendering\n\nTo change the default IMGUI render, you need to create a class inherited from the [IDMRender](https://github.com/Iam1337/extDebug/blob/main/Assets/extDebug/Scripts/Menu/IDMRender.cs) interface, and set its instance to `DM.Render`.\n\n## extDebug.Notifications - Debug Notifications\n\nIt is easy to use, in-game notification system. Based on [Garry's Mod notification](https://github.com/Facepunch/garrysmod/blob/master/garrysmod/lua/includes/modules/notification.lua) system.\n\n### Examples:\n\n**Simple notification**\u003cbr\u003e\n```C#\n// Show notification for five seconds\nDN.Notify(\"Simple notification\", 5f); \n```\n\n**Context notification**\u003cbr\u003e\nCalling a method with the same context allows you to declare infinite notifications. Also, the last call to the method with the new parameters and the same context will overwrite the parameters of the previous notification.\n```C#\n// Create simple context\nobject _context = new object();\n\n// Show infinity notification\nDN.Notify(_context, \"Infinity notification\", -1f);\n\n// Hide infinity notification\nDN.Kill(_context);\n```\n\n### Rendering\n\nTo change the default IMGUI render, you need to create a class inherited from the [IDNRender](https://github.com/Iam1337/extDebug/blob/main/Assets/extDebug/Scripts/Notifications/IDNRender.cs) interface, and set its instance to `DN.Render`.\n\n## Extensions\n\nList of useful repositories to help make extDebug easier to use:\n\n- [extDebug.UGUI](https://github.com/Iam1337/extDebug.UGUI) - Extension to support Unity UI and TextMeshPro in extDebug\n\n\n## Author Contacts\n\\\u003e [telegram.me/iam1337](http://telegram.me/iam1337) \u003cbr\u003e\n\\\u003e [ext@iron-wall.org](mailto:ext@iron-wall.org)\n\n## License\nThis project is under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiam1337%2Fextdebug","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiam1337%2Fextdebug","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiam1337%2Fextdebug/lists"}