Code Monkey home page Code Monkey logo

csreactive's Introduction

UnityVue

此库是本人接下来时间的开发维护重点,原名:CSReactive

Unity纯C#版的VUE,运行时高效,运行时0GC。

FEATURES

实现了几乎所有VUE特性,自行简单封装后可以无缝对接FGUI、UGUI、UTK等几乎所有UI方案

  • 支持全平台
  • 运行时无GC
  • 递归代理
  • 数据变化时,对相关作用域做脏标记。当前帧的LateUpdate,对脏作用域进行刷新。
  • 支持List、Array等数组成员
  • 可自定义更新时机 : LateUpdate(post) & Immediate(sync)
  • 代理函数: Reactive & Ref
  • 绑定函数: Watch & Compute & WatchEffect & Bind
  • MonoBehaviour响应式

其他功能

  • 数据可视化调试 (支持OdinInspector)
  • 作用域可视化调试
  • 出现循环读写情况时,控制台会输出警告
  • 响应式GameObject和组件
  • 作用域可以与任意一个引用类型绑定,同生命周期

限制

  • 数据源暂不支持字典、集合等其他容器,可以自行实现后提PR

INSTALL

PackageManager下用git url安装:https://github.com/labbbirder/CSReactive.git

QUICK START

添加命名空间

using BBBirder.UnityVue;

定义一个类型

using BBBirder.UnityVue;
using Sirenix.OdinInspector;
partial class CubeData : IDataProxy
{
    [ShowInInspector]
    public float Length { get; set; } = 1;
    [ShowInInspector]
    public float Width { get; set; } = 1;
    [ShowInInspector]
    public float Height { get; set; } = 1;

    [ShowInInspector]
    public float Sum { get; set; }

    [ShowInInspector]
    public float Area { get; set; }

    [ShowInInspector]
    public float Volume { get; set; }
}

实现响应式

using UnityEngine;

[ExecuteAlways]
partial class CubeData : MonoBehaviour
{

    void Awake()
    {
        CSReactive.Reactive(this);

        this.WatchEffect(() =>
        {
            var halfArea = (Length * Width) + (Width * Height) + (Length * Height);
            Area = halfArea * 2;
        });

        this.WatchEffect(() =>
        {
            Volume = Length * Width * Height;
        });

        this.Compute(() => Length + Width + Height, v => Sum = v);
    }
}

NOTES

DynamicExpresso

DynamicExpresso.dll并非官方原版,不要盲目更新它。此程序集在官方的基础上做了一些改动,已使其支持WebGL

DynamicExpresso可以用在响应式组件或GameObject上,如:在Inspector下,给一个Component的字段赋字符串表达式

ConditionalWeakTable

如果此特性可用,为性能和内存最优解。但经测试和检阅资料发现主流Unity版本对此特性支持不佳(包括IL2CPP和MONO),因此使用临时方案实现,代价是较多的内存分配(创建数据代理时)。

csreactive's People

Contributors

labbbirder avatar

Stargazers

 avatar Yoones Khoshghadam avatar 哈雷不灰心 avatar Colby Weinman avatar Package avatar cuco avatar  avatar  avatar Fallever avatar Emmanuel Kuhic avatar  avatar MichaelO avatar  avatar  avatar  avatar  avatar xh avatar Yann Gu avatar tallship avatar luzhou avatar  avatar  avatar  avatar FILA avatar  avatar Sindre Sorhus avatar MiKiNuo avatar  avatar  avatar D.Hu avatar Token2019 avatar  avatar  avatar 皮皮 PiPi avatar 热心市民黄先生 avatar Ken avatar  avatar Ziwen Zhao avatar  avatar Ahmed Al-Mohammed avatar Ana Lopez avatar 九号技师 avatar Vicky Sha avatar Hang Seng avatar Ricky Yin avatar  avatar Tyler Morita avatar wei_zh37 avatar  avatar  avatar 上海一女子 avatar  avatar Zen Obsidian avatar 幻城 avatar  avatar ChaosDev avatar Severn avatar Louis avatar wufazhuxiao avatar well.james avatar  avatar  avatar Joe avatar  avatar 诗远 avatar Bad Zhang avatar HHHHHHHHHHHHHHHHHHHHHCS avatar 桐乐 avatar  avatar 空白咯 avatar 夜莺 avatar  avatar  avatar Grievous_Rain avatar

Watchers

夜莺 avatar MiKiNuo avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.