2.6.4 • Published 4 months ago

com.vovgou.loxodon-framework-uitoolkit v2.6.4

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

npm.io

Loxodon Framework UIToolkit

license release openupm npm

Developed by Clark

Requires Unity 2021.3 or higher.

此插件扩展了Loxodon.Framework框架针对UIToolkit的支持,增加UIToolkitWindow窗口,对UIToolkit的控件可以进行数据绑定,也支持UIToolkit和UGUI的界面混用。

安装

从OpenUPM安装

OpenUPM 中提供了很多的Unity插件,自动管理依赖,推荐从OpenUPM仓库安装本插件.

命令行方式安装,要求 nodejs's npm and openupm-cli, 如果没有安装nodejs命令行环境请先安装nodejs。

# Install openupm-cli,please ignore if it is already installed.
npm install -g openupm-cli

#Go to the root directory of your project
cd F:/workspace/New Unity Project

#Install loxodon-framework-uitoolkit
openupm add com.vovgou.loxodon-framework-uitoolkit

通过修改 Packages/manifest.json 文件安装插件(推荐)

在Unity项目的Packages目录中找到manifest.json 文件,增加第三方仓库 "https://package.openupm.com"或者"https://registry.npmjs.org"到配置文件中,然后增加"com.vovgou.loxodon-framework-uitoolkit" 到dependencies节点下,Unity会自动下载插件,使用这种方式安装也相当方便,且省去了安装nodejs和openm-cli客户端的麻烦。

{
  "dependencies": {
    ...
    "com.unity.modules.xr": "1.0.0",
    "com.vovgou.loxodon-framework-uitoolkit": "2.4.0"
  },
  "scopedRegistries": [
    {
      "name": "package.openupm.com",
      "url": "https://package.openupm.com",
      "scopes": [
        "com.vovgou",
        "com.openupm"
      ]
    }
  ]
}

通过 *.unitypackage 安装

从框架的发布地址下载 Loxodon.Framework.unitypackage 和 Loxodon.Framework.UIToolkit.unitypackage, 导入到项目中即可.

English manual

快速开始

创建一个UIToolkit的窗口,将UIElements的控件和ViewModel的属性绑定。

注意:点击事件请绑定到clickable属性上,控件的值请绑定到value属性。

public class Window1 : UIToolkitWindow
{
    private IUIViewLocator locator;
    protected override void OnCreate(IBundle bundle)
    {            
        this.locator = Context.GetApplicationContext().GetService<IUIViewLocator>();

		WindowViewMode viewModel = new WindowViewMode();
        var bindingSet = this.CreateBindingSet(viewModel);
        bindingSet.Bind(this.Q<Button>("openDialog")).For(v => v.clickable).To(vm => vm.DialogClick);
        bindingSet.Bind(this.Q<Button>("openWindow")).For(v => v.clickable).To(vm => vm.WindowClick);
		bindingSet.Bind(this.Q<Toggle>("toggle")).For(v => v.value).To(vm => vm.Toggle);
        bindingSet.Bind(this.Q<TextField>("username")).For(v => v.value, v => v.RegisterValueChangedCallback).To(vm => vm.Name);
        bindingSet.Bind().For(v => v.OnOpenDialogWindow).To(vm => vm.OpenDialogRequest);
        bindingSet.Bind().For(v => v.OnOpenWindow).To(vm => vm.OpenWindowRequest);

        //如果是分子视图来开发,UIToolkit的子视图没法挂脚本,可以通过绑定集的ScopeKey来管理子视图的绑定
        //bindingSet.Bind().For(v => v.OnOpenWindow).To(vm => vm.OpenWindowRequest).WithScopeKey("xxSubView");

        bindingSet.Build();

        this.Q<Button>("close").clicked += () => this.Dismiss();
    }

    protected void OnOpenDialogWindow(object sender, InteractionEventArgs args)
    {
        var callback = args.Callback;
        AlertDialog.ShowMessage("测试", "标题", "OK", r =>
        {
            callback?.Invoke();
        });
    }

    protected void OnOpenWindow(object sender, InteractionEventArgs args)
    {
        IWindow window = locator.LoadWindow<IWindow>(this.WindowManager, "UI/Window2");
        window.Create();
        window.Show();
    }
}


public class WindowViewMode : ViewModelBase
{
	private string name;
	private bool toggle = true;
    private SimpleCommand dialogCommand;
    private SimpleCommand windowCommand;
    private InteractionRequest openDialogRequest;
    private InteractionRequest openWindowRequest;

    public WindowViewMode()
    {
        this.openDialogRequest = new InteractionRequest(this);
        this.openWindowRequest = new InteractionRequest(this);
        this.dialogCommand = new SimpleCommand(() =>
        {
            this.dialogCommand.Enabled = false;
            this.openDialogRequest.Raise(() =>
            {
                this.dialogCommand.Enabled = true;
            });
        });
        this.windowCommand = new SimpleCommand(() =>
        {
            this.openWindowRequest.Raise();
        });
    }

	public string Name
    {
        get { return this.name; }
        set { this.Set<string>(ref name, value); }
    }

	public bool Toggle
    {
        get { return this.toggle; }
        set { this.Set<bool>(ref toggle, value); }
    }

    public IInteractionRequest OpenDialogRequest
    {
        get { return this.openDialogRequest; }
    }

    public IInteractionRequest OpenWindowRequest
    {
        get { return this.openWindowRequest; }
    }

    public ICommand DialogClick
    {
        get { return this.dialogCommand; }
    }

    public ICommand WindowClick
    {
        get { return this.windowCommand; }
    }

    public void OnClick()
    {
        Debug.LogFormat("Button OnClick");
    }
}

联系我们

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

2.6.4

4 months ago

2.6.3

4 months ago

2.6.2

5 months ago

2.6.0

10 months ago

2.5.6

1 year ago

2.5.5

1 year ago

2.5.0

2 years ago

2.4.7

2 years ago

2.4.8

2 years ago

2.4.6

2 years ago

2.4.5

2 years ago

2.4.3

2 years ago

2.4.2

2 years ago

2.4.1

2 years ago

2.4.0

2 years ago