Skip to the content.

Loxodon Framework(Unity-MVVM)

license release openupm npm

(English)

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

开发者 Clark

要求Unity 2018.4 或者更高版本

LoxodonFramework是一个轻量级的MVVM(Model-View-ViewModel)框架,它是专门为Unity3D游戏开发设计的,参考了WPF和Android的MVVM设计,它提供了视图和视图模型的数据绑定、本地化、一个简单的对象容器、配置文件组件、线程工具组件、应用上下文和玩家上下文,异步线程和协程的任务组件等基本组件,同时还提供了一个UI视图的框架。所有代码都基于面向对象面向接口的思路设计,几乎所有功能都可以自定义。而且在数据绑定部分进行了性能优化,避免值类型装箱拆箱,最小化垃圾回收的开销,使用动态委托/静态织入技术确保数据绑定和直接调用有相当的性能,0GC更新UI视图等等,它支持绑定到UGUI、UIToolkit和FairyGUI控件,同时也很容易扩展对其他UI控件的支持。此外,它已经在项目中得到验证(UWA评分SSS级,可在战斗中完全关闭GC,在6、7前手机都保证60FPS),性能优越,稳定可靠,架构清晰,可灵活扩展。 我们希望它能够帮助您更快、更轻松地开发游戏。

本框架使用C#语言开发,同时也支持使用XLua或者ILRuntime来开发,如果项目需要热更新,那么只要安装了XLua或者ILRuntime插件,则可以完全使用Lua或者ILRuntime来开发游戏。对于新立项的项目,建议使用HybridCLR来做热更新。

这个插件兼容 MacOSX,Windows,Linux,UWP,IOS and Android,WebGL等等,并且完全开源。

如果你喜欢这个框架或者觉得它对你来说是有用的,请帮我在AssetStore上写一个评论或者在Github上给一颗星,更多人的参与才是开源作者工作的动力,谢谢!

已测试的平台:
PC/Mac/Linux
IOS
Android
UWP(window10)
WebGL

安装

自Loxodon.Framework 2.0版本开始,保留了原有的 .unitypackage包发布方式,同时添加了UPM发布方式,此版本要求Unity 2018.4.2及以上版本,框架的目录结构和API都进行了一些调整,同时引入了async/await、Task等新特性,升级前请先查看下文的升级注意事项。

安装注意:在中国区下载的Unity版本屏蔽了第三方仓库,会导致UPM包安装失败,咨询了Unity中国相关人员说是马上会放开,如果UPM方式安装失败请使用.unitypackage文件安装或者使用非中国区的Unity版本

1.x.x版本升级到2.0注意事项

从1.x.x版本升级到2.0版本前,请先删除老版本的所有文件,按下面的安装步骤安装新版本。2.0版本的教程和示例代码默认不会自动导入,如需要请手动导入到项目中。

Loxodon.Framework.XLua和Loxodon.Framework.Bundle因为依赖问题仍然使用传统方式发布。

不兼容的改变:

详细安装过程请参阅安装文档

中文文档

关键功能:

注意:

插件与集成(可选)

快速开始

创建一个进度条的视图和视图模型,并将视图中的UI控件和视图模型绑定,修改视图模型ProgressBarViewModel中的属性,视图UI界面将会自动改变。

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 = "";        
}

教程和示例

介绍

联系方式

邮箱: yangpc.china@gmail.com
网站: https://vovgou.github.io/loxodon-framework/
QQ群: 622321589 15034148