Skip to the content.

Loxodon Framework(Unity-MVVM)

license release openupm npm

(中文版)

MVVM and Databinding for Unity3d(C# & XLua & ILRuntime)

Developed by Clark

Requires Unity 2018.4 or higher.

LoxodonFramework is a lightweight MVVM (Model-View-ViewModel) framework specifically crafted for Unity3D. It includes data binding and various useful components. The framework’s performance is meticulously optimized, avoiding value type boxing and unboxing, minimizing garbage collection overhead. It utilizes dynamic delegates/static code weaving techniques to ensure comparable performance between data binding and direct invocation, zero garbage collection during UI view updates, and more. Additionally, it has been validated in projects, demonstrating superior performance, stability, and reliability with a clear, extensible architecture. We hope it can contribute to making your game development faster and more effortless.

For tutorials,examples and support,please see the project.You can also discuss the project in the Unity Forums.

The plugin is compatible with MacOSX,Windows,Linux,UWP,WebGL,IOS and Android,and provides all the source code of the project.

If you like this framework or think it is useful, please write a review on AssetStore or give me a STAR or FORK it on Github, thank you!

Tested in Unity 3D on the following platforms:
PC/Mac/Linux
IOS
Android
UWP(window10)
WebGL

Installation

For detailed installation steps, please refer to the installation documentation.

English manual

Key Features:

Notes

Plugins

Quick Start

Create a view and view model of the progress bar.

public class ProgressBarViewModel : ViewModelBase
{
    private string tip;
    private bool enabled;
    private float value;
    public ProgressBarViewModel()
    {
    }

    public string Tip
    {
        get { return this.tip; }
        set { this.Set<string>(ref this.tip, value, nameof(Tip)); }
    }

    public bool Enabled
    {
        get { return this.enabled; }
        set { this.Set<bool>(ref this.enabled, value, nameof(Enabled)); }
    }

    public float Value
    {
        get { return this.value; }
        set { this.Set<float>(ref this.value, value, nameof(Value)); }
    }
}

public class ProgressBarView : UIView
{
    public GameObject progressBar;
    public Text progressTip;
    public Text progressText;
    public Slider progressSlider;

    protected override void Awake()
    {
        var bindingSet = this.CreateBindingSet<ProgressBar, ProgressBarViewModel>();

        bindingSet.Bind(this.progressBar).For(v => v.activeSelf).To(vm => vm.Enabled).OneWay();
        bindingSet.Bind(this.progressTip).For(v => v.text).To(vm => vm.Tip).OneWay();
        bindingSet.Bind(this.progressText).For(v => v.text)
            .ToExpression(vm => string.Format("{0:0.00}%", vm.Value * 100)).OneWay();
        bindingSet.Bind(this.progressSlider).For(v => v.value).To(vm => vm.Value).OneWay();

        bindingSet.Build();
    }
}


IEnumerator Unzip(ProgressBarViewModel progressBar)
{
    progressBar.Tip = "Unziping";
    progressBar.Enabled = true;//Display the progress bar

    for(int i=0;i<30;i++)
    {            
        //TODO:Add unzip code here.

        progressBar.Value = (i/(float)30);            
        yield return null;
    }

    progressBar.Enabled = false;//Hide the progress bar
    progressBar.Tip = "";        
}

Tutorials and Examples

Introduction

Contact Us

Email: yangpc.china@gmail.com
Website: https://vovgou.github.io/loxodon-framework/
QQ Group: 622321589 15034148