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系统、更方便的编辑器工具。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Unity DOTS(DOTS: Data-Oriented Technology Stack)是Unity的一种数据导向技术堆栈,它旨在提高游戏性能和可扩展性。它基于实体组件系统(Entity-Component-System,ECS)的概念,其中游戏对象被拆分为实体(Entity)和组件(Component),并通过系统(System)进行处理。 在Unity DOTS中,可以使用实体组件系统来管理和处理游戏对象。通过将游戏对象转换为实体和组件的形式,可以实现高效的数据处理和并行计算。例如,在创建实体时,可以使用GameObjectConversionUtility.ConvertGameObjectHierarchy函数将GameObject转换为Entity,并使用IConvertGameObjectToEntity接口进行自定义转换。然后,可以使用系统(System)对实体和组件进行处理,例如旋转方块事件。 Unity DOTS的优势包括更高的性能,更好的可扩展性和更方便的并行计算。通过采用数据导向的设计,可以减少内存访问和数据处理的开销,从而提高游戏的帧率和响应性。 总而言之,Unity DOTS是一种数据导向的技术堆栈,通过实体组件系统和并行计算来提高游戏性能和可扩展性。它可以通过转换游戏对象为实体和组件的形式,并使用系统进行处理来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [UnityDots技术入门](https://blog.csdn.net/m0_37920739/article/details/108181541)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Unity DOTS简明教程](https://blog.csdn.net/mango9126/article/details/105219215)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高远呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值