JEngine
The solution that allows unity games to update in runtime. 使Unity开发的游戏支持热更新的解决方案。
Top Related Projects
Quick Overview
JEngine is an open-source game framework for Unity, designed to enhance development efficiency and performance. It provides a suite of tools and features to streamline game development, including hot update capabilities, resource management, and various optimization techniques.
Pros
- Supports hot updates, allowing for easy game modifications without rebuilding
- Includes a comprehensive set of tools for resource management and optimization
- Provides cross-platform support for various Unity deployment targets
- Offers detailed documentation and active community support
Cons
- Learning curve may be steep for developers new to the framework
- Some features may be overkill for smaller projects or simpler games
- Dependency on Unity engine limits its use to Unity-based projects
- Regular updates may require occasional adjustments to existing projects
Code Examples
- Initializing JEngine:
using JEngine.Core;
public class GameEntry : MonoBehaviour
{
private void Start()
{
GameManager.Initialize();
}
}
- Loading a hot-updateable scene:
using JEngine.Core;
public class SceneLoader
{
public static async void LoadScene(string sceneName)
{
await GameManager.LoadSceneAsync(sceneName);
}
}
- Using JEngine's localization system:
using JEngine.Core;
public class LocalizationExample : MonoBehaviour
{
private void Start()
{
string localizedText = JEngine.Localization.Get("key_example");
Debug.Log(localizedText);
}
}
Getting Started
- Install Unity (2019.4 or later recommended)
- Clone the JEngine repository:
git clone https://github.com/JasonXuDeveloper/JEngine.git
- Open the project in Unity
- Import JEngine into your project:
- Copy the
Assets/Dependencies/JEngine
folder to your project'sAssets
folder
- Copy the
- Initialize JEngine in your game entry script:
using JEngine.Core; public class GameEntry : MonoBehaviour { private void Start() { GameManager.Initialize(); } }
- Explore JEngine's features and documentation to leverage its capabilities in your game development process.
Competitor Comparisons
Provides an efficient allocation free async/await integration for Unity.
Pros of UniTask
- Highly optimized for Unity-specific asynchronous programming
- Extensive documentation and examples for easy integration
- Lightweight and focused solely on async/await functionality
Cons of UniTask
- Limited to Unity environment, not suitable for general C# development
- Steeper learning curve for developers unfamiliar with async programming
- May require additional setup and configuration in Unity projects
Code Comparison
UniTask:
async UniTaskVoid Start()
{
await UniTask.Delay(1000);
Debug.Log("Delayed execution");
}
JEngine:
public void Start()
{
this.Delay(1000, () =>
{
Debug.Log("Delayed execution");
});
}
Summary
UniTask excels in Unity-specific async programming with optimized performance, while JEngine offers a broader framework for game development. UniTask provides a more modern approach to asynchronous operations, but may be more complex for beginners. JEngine, on the other hand, offers a wider range of features beyond just async programming, making it a more comprehensive solution for Unity game development.
Reactive Extensions for Unity
Pros of UniRx
- Robust reactive programming framework for Unity
- Extensive documentation and community support
- Seamless integration with Unity's coroutine system
Cons of UniRx
- Steeper learning curve for developers new to reactive programming
- Can introduce complexity in simpler scenarios
- Potential performance overhead for excessive use of observables
Code Comparison
UniRx example:
Observable.EveryUpdate()
.Where(_ => Input.GetKeyDown(KeyCode.Space))
.Subscribe(_ => Debug.Log("Space key pressed"));
JEngine example:
public class SpaceKeyListener : JBehaviour
{
public override void OnUpdate()
{
if (Input.GetKeyDown(KeyCode.Space))
Debug.Log("Space key pressed");
}
}
Summary
UniRx offers a powerful reactive programming paradigm for Unity, with extensive features and community support. However, it may introduce complexity and have a steeper learning curve. JEngine provides a more traditional approach to Unity development, focusing on performance optimization and ease of use. The choice between the two depends on project requirements and team expertise.
Dependency Injection Framework for Unity3D
Pros of Zenject
- More mature and widely adopted in the Unity community
- Extensive documentation and community support
- Powerful dependency injection system for better code organization
Cons of Zenject
- Steeper learning curve for beginners
- Can introduce complexity in smaller projects
- Requires more setup and configuration
Code Comparison
Zenject:
public class Foo : MonoBehaviour
{
[Inject]
public void Construct(Bar bar, Baz baz)
{
// Dependencies injected automatically
}
}
JEngine:
public class Foo : JBehaviour
{
public void Awake()
{
Bar bar = ClassBind.Bind<Bar>();
Baz baz = ClassBind.Bind<Baz>();
}
}
Summary
Zenject offers a robust dependency injection system with extensive community support, making it ideal for larger projects. However, it may be overkill for smaller games and has a steeper learning curve. JEngine provides a simpler approach to class binding and lifecycle management, which can be more accessible for beginners but may lack some of the advanced features found in Zenject.
Nez is a free 2D focused framework that works with MonoGame and FNA
Pros of Nez
- More comprehensive 2D game framework with built-in systems for physics, rendering, and scene management
- Larger community and more extensive documentation
- Better suited for complex 2D game development with a wider range of features
Cons of Nez
- Steeper learning curve due to its more extensive feature set
- Less focused on performance optimization compared to JEngine
- May be overkill for simpler projects or those primarily targeting mobile platforms
Code Comparison
Nez scene setup:
public class MainScene : Scene
{
public override void Initialize()
{
AddEntity(new Player());
AddRenderer(new DefaultRenderer());
}
}
JEngine scene setup:
public class MainScene : JBehaviour
{
public override void Init()
{
CreateGameObject("Player").AddComponent<Player>();
}
}
Both frameworks offer scene management, but Nez provides a more structured approach with built-in renderers and entity systems, while JEngine focuses on simplicity and performance optimization for mobile platforms.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Documentation »
(The documentation is yet in Chinese and can use Google Translated version from here)
·
ä¸æé¡µé¢ Â»
JENGINE v0.8.0f7
JEngine is an out-of-the-box framework designed for Unity developers. It encapsulates powerful functions. Beginners can also get started quickly and easily create games that can be updated in runtime.
The master
branch is the latest version that the developers think can be used normally and will not have too many problems. It is recommended to use and has the most powerful functions (also it fixes the bugs in the old versions);
The 0.7.x
branch is currently in use by most commercial projects, it is the most popular version in 2022 with various useful and high performance features, this branch will not be updated or maintained any more (this branch has full documentations but few official tutorial videos);
The 0.6.x
branch was used by most commercial projects, it has complete content, sufficient documentation and videos, and will not be updated or maintained any more;
The 0.5.x
branch is being used by some commercial projects, will not be updated or maintained;
The development
branch is the development branch. You are welcome to make changes and PRs in this branch after fork, and you are also welcome to submit issues!
If you think JEngine is helpful to you, please give this framework a Star!
Requirement
- Unity 2020.3.4+
- .net framework 4.x / .net 4.x / net framework
Packages
Different built-in and additional packages for JEngine
Package Name | Description | Type | Link |
---|---|---|---|
JEngine.Core | Supports hot update in runtime. In addition, it provides secure, high performance features. | Built-in | JEngine |
JEngine.AntiCheat | Prevents memory hack (i.e. using GameGuardian to dump and modify memory). | Additional | JEngine.AntiCheat |
JEngine.Localization | Provides multi-lnguage feature in game. | Additional | JEngine.Localization |
JEngine.Misc | Additional miscellaneous features. | Additional | JEngine.Misc |
LitJson | Supports JSON serialization/deserialization (as C# objects or JsonData) | Additional | JEngine.LitJson |
Protobuf-net | Supports protobuf serilization/deserialization | Additional | JEngine.Protobuf-net |
MetaJUI | MetaJUI is a UI framework customized for JEngine. Of course, you can also transplant it to your own engineering projects through simple modifications. | Additional | MetaJUI |
MetaExcelDataTool | MetaExcelDataTool is an Excel table guide tool customized for JEngine. Of course, you can also transplant it to your own project through simple modifications. | Additional | MetaExcelDataTool |
Dependencies
- ILRuntime v2.1.0 - execute C# code in runtime
- YooAssets v1.4.10 - update resource in runtime
- Unity-Reorderable-List v1.0.1 - additional editor inspector tool
Stargazers over time
Contributors
v0.8.0 New Features
- Supported WebGL
- Removed JUI (will be redesigned shortly)
- Optimized LifeCycleMgr performance
- Optimized ThreadMgr features
- Optimized JStream performance
- Optimized JBehaviour performance
- Optimized MonoBehaviour performance
- Optimized FpsMonitor performance
- Optimized CryptoMgr interfaces
- Optimized JBehaviour/ClassBind Object/MonoBehaviour GC
- Optimized GetComponent(s)/FindObject(s)OfType performance
- Switched to YooAsset for asset management module (instead of Bundle Master)
- NEW FEATURE UnsafeMgr which provides unsafe (use for optimization) features
- NEW FEATURE UnmanagedMemoryPool which supports allocating unmanaged memory with pooling
- NEW FEATURE CoroutineMgr which supports executing/stopping coroutines from non-MonoBehaviour class
- NEW STRUCTURE Split JEngine source code to multiple packages
Click here to see the change log
Recommendations
- IFramework - Simple Unity Tools
- QFramework - Your first K.I.S.S Unity 3D Framework.
- TEngine - Unityæ¡æ¶è§£å³æ¹æ¡
- BundleMaster - Unityèµæºå 载大å¸
- Nino - Definitely useful and high performance modules for C# projects, especially for Unity.
Top Related Projects
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot