Unity 从零开始的框架搭建1-1 unity中对象调用的三种方式的优缺点分析【干货】

news2024/10/9 5:29:45

该文章专栏是向QFrameWork作者凉鞋老师学习总结得来,吃水不忘打井人,不胜感激

Unity 框架搭建学习笔记1-1,前一个1代表凉鞋的第一季教程,后一个1代表该季第一篇我的文章

 unity中对象调用的三种方式

  • 方法调用,例如:A 调用 B 的 SayHello 方法
  • 委托或者回调,例如:界面监听子按钮的点击事件
  • 消息或事件,例如:服务器像客户端发送通知

举例分析

提前准备

我的场景中有如下内容,一个panel,其下有button,text组件,一个Sphere

panel1身上有一个脚本,还没写任何代码

小球身上有一个脚本写了下面的方法

想要实现的效果: 

 

方法调用

在panel身上的脚本中获取到小球组件,在游戏开始时候可以触发一次

private void Start() {
     transform.Find("Sphere").GetComponent<Sphere>().SphereFun();
 }

优点是很简单

缺点也很明显:耦合度高

耦合度为什么高?

我有十个小球,那UI就需要多个去持有小球的对象,然后调用其中的方法,想想就很恐怖

那我换个思路呢,我让箭头反过来,所有小球持有一个UI控件不就好了?

直接的委托或者回调 

C# & Unity 面向对象补全计划 之 委托-CSDN博客

委托或者回调,就是直接反过来,让所有小球持有一个UI控件

自然用到了按钮的委托方法

Unity UGUI 之Button_unity button-CSDN博客

在Sphere脚本中写如下内容

   public Button button;
   // Start is called before the first frame update
   void Start()
   {
       button.onClick.AddListener(SphereFun);     
   }

或者直接拖拽到按钮下

耦合度是低了,但是这个时候又出现问题了,现在一个函数还好,等函数和按钮多了,我需要一个一个加?

基于事件的发布-订阅模式

C# & Unity 面向对象补全计划 之 事件-CSDN博客

[干货] [非基础警告] Unity 发布-订阅模式下的事件中心设计-CSDN博客

我们需要一个船新的脚本,叫做EventCenter,提供了事件注册,执行,注销的方法

public class EventCent : MonoBehaviour
{
    private static Action mOnEventTrigger;

    /// <summary>
    /// 注册事件
    /// </summary>
    public static void Register(Action onEvent) {
        mOnEventTrigger += onEvent;
    }

    /// <summary>
    /// 注销事件
    /// </summary>
    /// <param name="onEvent"></param>
    public static void UnRegister(Action onEvent) {
        mOnEventTrigger -= onEvent;
    }

    /// <summary>
    /// 触发事件
    /// </summary>
    public static void Trigger() {
        mOnEventTrigger?.Invoke();
    }
}

小球的脚本中直接注册方法 

public class Sphere : MonoBehaviour
{
   
    // Start is called before the first frame update
    void Start()
    {
        EventCenter.Register(SphereFun);
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    public void SphereFun()
        {
        Debug.Log("摇晃了一次");
        this.transform.DOPunchPosition(new Vector3(1,0,0),0.5f,10,0.5f);  
    }
}

在 panel1的脚本中直接写执行方法

public class PanelScripts : MonoBehaviour
{   
    private void Start() {
        transform.Find("SphereCtrl").GetComponent<Button>().onClick.AddListener(EventCenter.Trigger);        
    }   
}

 

优点:对于小球和UI来说直接0耦合

但是缺点也很明显:如果这个系统复杂起来,维护会很麻烦,开销也很大

总结

因为跟前文所讲的内容大差不差,所以我直接用Ai总结了

1. 方法调用

示例:A 调用 B 的 SayHello 方法

优点

  • 简单直接:调用方法非常直观,代码易于理解和维护。
  • 高效:直接调用方法,性能较高。

缺点

  • 耦合度高:对象A需要知道对象B的具体实现,增加了代码的耦合度。
  • 灵活性差:如果对象B的实现发生变化,需要修改对象A的代码。

2. 委托或者回调

示例:界面监听子按钮的点击事件

优点

  • 解耦合:通过委托或回调机制,调用者和被调用者之间的耦合度降低。
  • 灵活性高:可以动态地分配和更改回调方法,适应不同的需求。

缺点

  • 复杂度增加:代码逻辑变得复杂,特别是在处理多个回调时。
  • 调试困难:由于回调是异步的,调试和跟踪问题可能比较困难。

3. 消息或事件

示例:服务器向客户端发送通知

优点

  • 高度解耦:消息或事件机制使得发送方和接收方完全解耦,适用于分布式系统。
  • 扩展性强:可以方便地添加新的消息处理者,而无需修改现有代码。

缺点

  • 性能开销:消息传递通常比直接方法调用有更高的性能开销。
  • 复杂度高:需要设计和维护消息或事件系统,增加了系统的复杂性。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2198118.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕业设计 基于Python的智能停车系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

对高危漏洞“Docker Engine API is accessible without authentication”的修复

一.背景 之前文章maven项目容器化运行之1-基于1Panel软件将docker镜像构建能力分享给局域网_1panel 构建镜像-CSDN博客将1Panel软件的Doocker端口给到了局域网&#xff0c;安全组兄弟扫描认为是高危漏洞&#xff0c;可能导致攻击者获取对Docker主机的完全控制权。 二.修复的建…

单兵可背负履带式全地形无人车技术详解

单兵可背负履带式全地形无人车是一种专为复杂环境和多样化任务设计的智能装备&#xff0c;具备出色的地面适应性、越野性能以及灵活的操控性。以下是对其技术的详细解析&#xff1a; 一、驱动技术 履带式驱动&#xff1a;采用履带式驱动技术&#xff0c;通过履带与地面的广泛…

动手学深度学习9.3. 深度循环神经网络-笔记练习(PyTorch)

本节课程地址&#xff1a;58 深层循环神经网络【动手学深度学习v2】_哔哩哔哩_bilibili 本节教材地址&#xff1a;9.3. 深度循环神经网络 — 动手学深度学习 2.0.0 documentation (d2l.ai) 本节开源代码&#xff1a;...>d2l-zh>pytorch>chapter_multilayer-perceptr…

计算机毕业设计 基于Flask+vue的博客系统的设计与实现 Python毕业设计 Python毕业设计选题 Flask框架 Vue【附源码+安装调试】

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

数据结构-4.5.KMP算法(旧版上)-朴素模式匹配算法的优化

朴素模式匹配算法最坏的情况&#xff1a; 一.实例&#xff1a; 第一轮匹配失败&#xff0c;开始下一轮的匹配&#xff1a; 不断的操作&#xff0c;最终匹配成功&#xff1a; 如上述图片所述&#xff0c;朴素模式匹配算法会导致时间开销增加&#xff0c; 优化思路&#xff1a;主…

Java:数据结构-List的介绍 ArrayList和顺序表(1)

一 List的介绍 1.什么是List&#xff1f; List是一个接口&#xff0c;继承于Collection。 Collection也是一个接口 Lterable也是一个接口&#xff0c;表示实现该接口的类是可以逐个元素遍历的类。 2.List的使用 List是一个接口&#xff0c;不能被实例化&#xff0c;ArrayL…

falcon调研的CSIG

CSIG (Congestion Signaling&#xff09; C是Congestion, SIG是 Signaling的简写&#xff0c;的机制&#xff1a; 本质是带内遥测 沿着L2一路可以实现更新,原文&#xff1a;This summarizedinformation is collected over L2 CSIG-tags in a compare-and-replace manner acro…

谢希仁计算机网络 (四)—— 网络层

计算机网络&#xff08;四&#xff09;—— 网络层&#xff08;1、2&#xff09;&#xff1a;网络层概述、网络层提供的两种服务 计算机网络&#xff08;四&#xff09;—— 网络层&#xff08;1、2&#xff09;&#xff1a;网络层概述、网络层提供的两种服务_以下属于网络层范…

基于PHP+uniapp的民宿预订系统的微信小程序设计与实现 ea9i3

目录 项目介绍技术栈和环境说明具体实现截图php技术介绍文件解析微信开发者工具HBuilderXuniapp开发技术简介解决的思路性能/安全/负载方面数据访问方式PHP核心代码部分展示代码目录结构解析系统测试详细视频演示源码获取 项目介绍 总体上看&#xff0c;Android的民宿预订系统…

企业安全运行与维护(Enterprise Security Operation and Maintenance)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

.locked勒索病毒:数据安全的新威胁

导言 在数字时代&#xff0c;数据已成为企业和个人的核心资产&#xff0c;其价值无可估量。然而&#xff0c;随着网络技术的飞速发展&#xff0c;一种名为“.locked勒索病毒”的恶意软件悄然兴起&#xff0c;对全球范围内的数据安全构成了严重威胁。这种病毒以其独特的加密方式…

【RAG论文精读4】RAG论文综述1(2312.10997)-第2部分

收录于我的专栏&#xff1a;AI修炼之路 第1部分&#xff1a;【RAG论文精读3】RAG论文综述1&#xff08;2312.10997&#xff09;-第1部分 二、RAG概览 RAG研究范式不断演变&#xff0c;可以为三个阶段&#xff1a;原始RAG、进阶RAG和模块化RAG。 2.1 原始RAG Naive RAG&#xf…

Spring Boot快速入门:HelloWorld示例

Spring Boot是一个非常流行&#xff0c;受欢迎的框架&#xff0c;它不仅常用于构建传统的单体式MVC应用程序&#xff0c;同时也非常适合用于搭建微服务架构。对于 Web 应用程序&#xff0c;Spring Boot 提供了用于创建 REST API、处理 HTTP 请求和使用 Thymeleaf 等模板引擎呈现…

QD1-P1 HTML、CSS与JS三者之间的关系

今天开始学习前端基础&#xff0c;新建专题《前端学习笔记1》保存前端基础学习笔记。 专题文章命名以qd1开头。 源课程 视频教程&#xff1a;【Web前端-最通俗易懂HTML、CSS与JS合集 1天速成】 up&#xff1a;遥遥温柔乡 在B站随便搜索了一个前端课程&#xff0c;共91节&am…

美畅物联丨视频汇聚从“设”开始:海康威视摄像机设置详解

在运用畅联云平台进行视频汇聚与监控管理时&#xff0c;海康威视的安防摄像机凭借其卓越的性能与广泛的应用兼容性&#xff0c;成为了众多用户的首选产品。海康威视摄像机参数设置与调试对于实现高效的安防监控至关重要。今天&#xff0c;让我们一同深入学习海康摄像机的参数设…

【Unity实战篇】 接入百度翻译,实现文本自动翻译功能

前言【Unity实战篇】 接入百度自动翻译,实现文本自动翻译功能一、获取百度翻译开发平台的APPID和密钥二、Unity中接入自动翻译功能三、Unity中实现自动翻译文本Text功能总结前言 日常在做项目的过程中,游戏本地化几乎已经成为必不可少的一步。本篇文章将演示怎样在Unity中接入…

【万字长文】Word2Vec计算详解(三)

【万字长文】Word2Vec计算详解&#xff08;三&#xff09; 写在前面 第三部分介绍Word2Vec模型的两种优化方案。 【万字长文】Word2Vec计算详解&#xff08;一&#xff09;markdown行 9000 【万字长文】Word2Vec计算详解&#xff08;二&#xff09;markdown行 12000 【万字长文…

数据结构与算法篇(刷题篇 - 树)

目录 1. 二叉树的前序遍历&#xff08;简单&#xff09; 1.1. 题目描述 1.2. 解题思路 方法一&#xff1a;递归&#xff08;推荐使用&#xff09; 方法二&#xff1a;非递归&#xff08;扩展思路&#xff09; 2. 二叉树的中序遍历&#xff08;中等&#xff09; 2.1. 题目…

[简单实践]Noisy Print - 自制基于加性噪声模型的简易降噪器

NoisyPrint 最近在学习的过程中&#xff0c;突然想起一个在Adobe Audition中用过的功能。 为什么会想到这个功能呢&#xff0c;因为在我使用DeepFilter的过程中&#xff0c;我发现对于一些低信噪比的信号来说&#xff0c;DeepFilter很容易出现过拟合现象&#xff0c;导致音源…