当前位置: 首页 > news >正文

【Unity实战】给Unity的类添加新功能

有时候我们希望给Unity中的一些类(比如Transform、GameObject)添加一些新的功能,但是又不想修改原始的类。这时候我们可以使用扩展方法来实现这个需求。

扩展方法的使用

扩展方法是C#中的一种特殊方法,可以让我们给已有的类添加新的方法,而无需修改原始类的定义。在Unity中,我们可以使用扩展方法给Transform、GameObject等类添加新的功能。

示例代码

using UnityEngine;public static class TransformUtil
{public static string GetPath(this Transform current){if (current.parent == null)return current.gameObject.scene.name + "/" + current.name;return current.parent.GetPath() + "/" + current.name;}
}

上面的示例代码定义了一个扩展方法 GetPath,用来获取Transform在场景中的层级路径。现在,你可以在任何地方通过 yourTransform.GetPath() 来获取这个路径字符串了。

我们再看一个示例:

using System.Collections.Generic;public static class ArrayExtensions
{public static bool HasAnyValidData<T>(this T[] array){if (array == null) return false;foreach (var item in array)if (!EqualityComparer<T>.Default.Equals(item, default))return true;return false;}public static bool AllElementsAreValid<T>(this T[] array){if (array == null) return false;foreach (var item in array)if (EqualityComparer<T>.Default.Equals(item, default))return false;return true;}
}

以上示例代码扩展了Array,主要校验一个array是否包含有效的数据。使用方法很简单,yourArray.HasAnyValidData()

希望这个小技巧能够帮助到各位,Happy programming!🚀

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Android笔试面试题AI答之线程Handler、Thread(3)
  • 基于 Kafka 的经验:AutoMQ 和 MinIO 如何解决成本和弹性挑战
  • 使用redis缓存文章浏览量
  • PHP中如何处理字符串
  • thinkphp8开发的广告联盟网站系统源码
  • C#:通用方法总结—第11集
  • SSM大学生就业咨询管理系统-计算机毕业设计源码79442
  • “网络身份证”来了,淘宝、微信、小红书等已上线试点版功能
  • TCP为什么需要四次挥手?
  • 软件测试经理工作日常随记【7】-接口+UI自动化(多端集成测试)
  • 利用Qt实现调用文字大模型的API,文心一言、通义千问、豆包、GPT、Gemini、Claude。
  • Python Beautiful Soup介绍
  • js逻辑或(||)和且()
  • 在Jira中使用AI
  • 【Mind+】掌控板入门教程02 趣味相框
  • [case10]使用RSQL实现端到端的动态查询
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Apache的基本使用
  • canvas 高仿 Apple Watch 表盘
  • Golang-长连接-状态推送
  • HTTP请求重发
  • iOS 系统授权开发
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • redis学习笔记(三):列表、集合、有序集合
  • REST架构的思考
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 工程优化暨babel升级小记
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 使用API自动生成工具优化前端工作流
  • 突破自己的技术思维
  • 栈实现走出迷宫(C++)
  • Spring第一个helloWorld
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • ## 基础知识
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (3)STL算法之搜索
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (回溯) LeetCode 131. 分割回文串
  • (剑指Offer)面试题34:丑数
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (转)程序员技术练级攻略
  • (转载)深入super,看Python如何解决钻石继承难题
  • .Net Remoting常用部署结构
  • .Net Web窗口页属性
  • .net 后台导出excel ,word
  • .Net 基于MiniExcel的导入功能接口示例
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .netcore 获取appsettings
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter