Unity Dots UI 通信

日期:2023-8-1

中午一个粉丝留言问,Ui 如何通信呢?

回家洗完澡 想起来了,我写一下。

首先,通信是通过事件的形式,然后通过外观模式来设计。

事件涉及到注册,那么如何拿到被注册的对象呢?

我们ECS中的S,是指System,一般继承自SystemBase、ISystem

如何在外部,拿到控制器呢?

先写一个概念(博主自己的命名,不是官方),

外部,我们称为Mono,内部我们称为ECS

首先,

1,我们建立ECS的外观类,

ECS_Facade,书写如下

重点啊,继承自SystemBase

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.Entities;

public partial class ECS_Facade : SystemBase
{
	public void GamePause()
	{
		Debug.Log("ECS Pause");
		// EntityManager logic
	}
	public void GameRestart()
	{
		Debug.Log("ECS Restart");
		// EntityManager logic
	}

	protected override void OnUpdate()
	{
		
	}
}

2,我们建立Mono的外观类

Mono_Facade

using UnityEngine;
using Unity.Entities;
using System;

public class Mono_Facade : MonoBehaviour
{
    public Action GamePause;
	public Action GameRestart;
	// Start is called before the first frame update
	void Start()
    {
		ECS_Facade ecsFacade =  World.DefaultGameObjectInjectionWorld.GetExistingSystemManaged<ECS_Facade>() ;

        GamePause  = ecsFacade.GamePause;
		GameRestart = ecsFacade.GameRestart;
	}

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.P))
        {
            GamePause?.Invoke();
		}
		if (Input.GetKeyDown(KeyCode.R))
		{
			GameRestart?.Invoke();
		}
	}
}

3,细节备注

ECS中的System,运行在一个World的概念中,

所以,通过 World.GetExistingSystemManaged 获取 System

我们再看下,为什么非要继承自 SystemBase,

一看泛型约束,以及System的继承,便懂了吧?

 

4,作者的话

我每篇博客,开头第一件事,写日期。

Dots是一个更新很快的体系,我也推荐大家用较新的版本 去学习、开发。

在2022.3 LTS 版本中,Unity推出了 Dots1.0 ,才算是正式版,

不要再去学 0.5 pre 什么的开发中版本了,功能不稳定,概念、API 也都在变。

Dots1.0 也提供了更人性化的Bake系统、更方便的编辑器工具。

猜你喜欢

转载自blog.csdn.net/qq_35623058/article/details/132052951