{"id":21358873,"url":"https://github.com/gameframex/com.gameframex.unity.coroutine","last_synced_at":"2026-05-28T07:03:29.635Z","repository":{"id":232376704,"uuid":"784187865","full_name":"GameFrameX/com.gameframex.unity.coroutine","owner":"GameFrameX","description":null,"archived":false,"fork":false,"pushed_at":"2024-07-23T10:19:10.000Z","size":16,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-22T18:51:08.232Z","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":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GameFrameX.png","metadata":{"files":{"readme":"README.md","changelog":null,"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}},"created_at":"2024-04-09T11:09:13.000Z","updated_at":"2024-07-23T10:19:13.000Z","dependencies_parsed_at":"2024-04-09T14:39:09.716Z","dependency_job_id":"892bbfda-c450-4bcc-a9be-57064f0fa23c","html_url":"https://github.com/GameFrameX/com.gameframex.unity.coroutine","commit_stats":null,"previous_names":["alianblank/com.alianblank.gameframex.unity.coroutine","gameframex/com.gameframex.unity.coroutine"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GameFrameX%2Fcom.gameframex.unity.coroutine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GameFrameX%2Fcom.gameframex.unity.coroutine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GameFrameX%2Fcom.gameframex.unity.coroutine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GameFrameX%2Fcom.gameframex.unity.coroutine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GameFrameX","download_url":"https://codeload.github.com/GameFrameX/com.gameframex.unity.coroutine/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243830950,"owners_count":20354856,"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-22T05:22:43.251Z","updated_at":"2026-05-28T07:03:29.615Z","avatar_url":"https://github.com/GameFrameX.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"https://download.alianblank.com/gameframex/gameframex_logo_320.png\" alt=\"Game Frame X Logo\" width=\"160\" /\u003e\n\n# Game Frame X Coroutine\n\n[![GitHub release](https://img.shields.io/github/v/release/GameFrameX/com.gameframex.unity.coroutine?style=flat-square)](https://github.com/GameFrameX/com.gameframex.unity.coroutine/releases)\n[![License](https://img.shields.io/github/license/GameFrameX/com.gameframex.unity.coroutine?style=flat-square)](https://github.com/GameFrameX/com.gameframex.unity.coroutine/blob/main/LICENSE.md)\n[![Documentation](https://img.shields.io/badge/Documentation-Online-blue?style=flat-square)](https://gameframex.doc.alianblank.com)\n\n**All-in-One Solution for Indie Game Development · Empowering Indie Developers' Dreams**\n\n[Documentation](https://gameframex.doc.alianblank.com) · [Quick Start](#quick-start) · [QQ Group](https://qm.qq.com/q/5s5e1e6e6e)\n\n**Language**: **English** | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [한국어](README.ko.md)\n\n\n\u003c/div\u003e\n\n---\n\n## Project Overview\n\nGame Frame X Coroutine is a Unity coroutine management package based on the GameFrameX framework, extending Unity's built-in coroutine management functionality.\n\n**Coroutine Component** - Provides interfaces that extend Unity's built-in coroutine management capabilities.\n\n## Features\n\n1. **Start Coroutine**: Use `StartCoroutine(IEnumerator enumerator)` to start a coroutine. Iterators and Unity coroutine objects are stored in a concurrent dictionary for easy access and management.\n\n2. **Stop Coroutine**: Stop individual coroutines via `StopCoroutine(IEnumerator enumerator)` or `StopCoroutine(UnityEngine.Coroutine coroutine)`. These methods ensure coroutines are removed from both Unity and the internal dictionary, preventing memory leaks.\n\n3. **Stop All Coroutines**: Stop all running coroutines via `StopAllCoroutines()`. This method ensures clean stopping of all coroutines and clears the internal tracking dictionary.\n\n4. **End of Frame Callback**: The `WaitForEndOfFrameFinish(System.Action callback)` method allows executing a callback after the current frame's rendering is complete.\n\n## Quick Start\n\n### System Requirements\n\n- Unity 2017.1 or higher\n\n### Installation\n\nChoose one of the following methods:\n\n1. Add the following to the `dependencies` section in your project's `manifest.json`:\n   ```json\n   {\"com.gameframex.unity.coroutine\": \"https://github.com/AlianBlank/com.gameframex.unity.coroutine.git\"}\n   ```\n\n2. Use `Git URL` in Unity's Package Manager:\n   ```\n   https://github.com/AlianBlank/com.gameframex.unity.coroutine.git\n   ```\n\n3. Download the repository and place it in your Unity project's `Packages` directory. It will be loaded automatically.\n\n## Usage Examples\n\n### Start a Coroutine\n\n```csharp\nIEnumerator YourCoroutine()\n{\n    // Coroutine execution content\n    yield return null;\n}\n\nCoroutineComponent coroutineComponent = gameObject.AddComponent\u003cCoroutineComponent\u003e();\ncoroutineComponent.StartCoroutine(YourCoroutine());\n```\n\n### Stop a Coroutine\n\n```csharp\nIEnumerator yourCoroutine = YourCoroutine();\ncoroutineComponent.StopCoroutine(yourCoroutine);\n```\n\n### Stop All Coroutines\n\n```csharp\ncoroutineComponent.StopAllCoroutines();\n```\n\n### End of Frame Callback\n\n```csharp\nvoid YourCallback()\n{\n    // Callback execution content\n}\n\ncoroutineComponent.WaitForEndOfFrameFinish(YourCallback);\n```\n\nNote: When adding `CoroutineComponent` to a GameObject, ensure there are no other components of the same type in your scene, as the class uses the `[DisallowMultipleComponent]` attribute.\n\n## Documentation \u0026 Resources\n\n- Documentation: https://gameframex.doc.alianblank.com\n- Repository: https://github.com/GameFrameX/com.gameframex.unity.coroutine\n- Issues: https://github.com/GameFrameX/com.gameframex.unity.coroutine/issues\n\n## License\n\nSee [LICENSE](LICENSE.md) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgameframex%2Fcom.gameframex.unity.coroutine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgameframex%2Fcom.gameframex.unity.coroutine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgameframex%2Fcom.gameframex.unity.coroutine/lists"}