公共Mono模块

本文介绍了如何通过公共Mono模块使非继承Mono的类具备开启协程和Update更新的能力,旨在实现对Update逻辑的统一管理。

作用:让没有继承Mono的类可以开启协程,可以Update更新,统一管理Update

public class MonoController : MonoBehaviour {
    private event UnityAction updateEvent;

    void Start() {
        DontDestroyOnLoad(this.gameObject);
    }

    void Update() {
        if (updateEvent != null)
            updateEvent();
    }

    // 给外部提供的添加帧更新事件的函数
    public void AddUpdateListener(UnityAction fun) {
        updateEvent += fun;
    }

    // 给外部提供的删除帧更新事件的函数
    public void RemoveUpdateListener(UnityAction fun) {
        updateEvent -= fun;
    }
}


// -----------------------------------------------------
public class MonoMgr : BaseManager<MonoMgr> {
    private MonoController controller;

    public MonoMgr() {
        // 保证了MonoController对象的唯一性
        GameObject obj = new GameObject("MonoController");
        controller = obj.AddComponent<MonoController>();
    }    

    public void AddUpdateListener(UnityAction fun) {
        controller.AddUpdateLis
03-22
### Mono 的定义与功能 Mono 是一个开源的 .NET Framework 实现,它遵循 C# 和公共语言基础结构 (CLI) 的 ECMA 标准[^1]。该项目提供了完整的开发工具链,包括编译器、运行时环境以及类库支持。 #### 主要组成部分 - **C# 编译器**: 支持按照 ECMA 标准编写的应用程序代码转换为目标文件。 - **兼容运行时**: 提供了一个与 Microsoft Common Language Runtime (CLR) 兼容的执行环境。 - **类库集合**: 不仅包含了微软的标准库(如 ADO.NET 和 ASP.NET),还有额外扩展的功能模块和第三方组件。 #### 跨平台能力 作为第三方实现者, Mono 特别强调其跨操作系统的能力, 它可以被嵌入至不同类型的软件产品内部以便于分发部署的同时保持应用的一致性和稳定性[^2]. 此外值得注意的是尽管大部分核心语法行为在这两个平台上表现一致但是仍然存在一些细微差异可能影响特定场景下的互操作性或者移植过程中的调整需求. ```go // Example of using Go to implement basic operations similar conceptually found within an LSM Tree structure. package main import ( "fmt" ) type Node struct { key int value string } func insert(node *Node, key int, val string){ if node == nil{ new_node := &Node{key:key,value:val} fmt.Println("Inserted new element:",new_node.key,new_node.value) }else if key < (*node).key { // Simplified logic; actual implementation would require more details about balancing etc. fmt.Printf("Would attempt insertion on left side but stubbed out here.\n") } else if key >(*node).key{ fmt.Printf("Would try adding onto the right subtree instead...\n"); } else { fmt.Printf("Key already exists updating its associated data %s->%s\n",(*node).value,val); (*node).value=val; } } func main() { root:=&Node{} insert(root,5,"Five") insert(root,3,"Three") insert(root,7,"Seven") insert(root,5,"New Five") } ``` 上面展示了一段用Go语言模拟LSM树基本操作的例子[^3],虽然这并非直接关联到Mono本身的技术细节上,但它展示了如何利用其他编程语言来构建高效的数据存储解决方案——这也是现代开发者经常面临的挑战之一,在选择合适技术栈时候需要考虑的因素。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值