Unity组件式思想框架 非常好用
改良了几代版本
组件式设计思想
using System;
using System.Collections.Generic;
using UnityEngine; public class Entity
{
public static Dictionary<Type, object> compDic = new Dictionary<Type, object>(); /// <summary>
/// 添加组件
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static T AddComp<T>() where T : new()
{
Type type = typeof (T);
T t = (T)Activator.CreateInstance(type); if (!compDic.ContainsKey(type))
{
compDic.Add(type, t);
}
else
{
Debug.LogError("不能重复添加组件");
} return t;
} /// <summary>
/// 添加挂在场景中的MonoBehaviour组件脚本
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static T AddMonoComp<T>() where T : MonoBehaviour
{
Type type = typeof (T);
T t = UnityEngine.Object.FindObjectOfType<T>();
if (t == null)
{
GameObject go = new GameObject(typeof(T).ToString());
t = go.AddComponent<T>();
}
if (!compDic.ContainsKey(type))
{
compDic.Add(type, t);
}
else
{
Debug.LogError("不能重复添加组件");
} return t;
} /// <summary>
/// 获取组件
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static T GetComp<T>()
{
Type type = typeof (T);
try
{
return (T)compDic[type];
}
catch (Exception e)
{
Debug.LogError(e);
throw;
}
}
}
using System;
using System.Collections.Generic;
using UnityEngine; public class EntityMono : MonoBehaviour
{
public Dictionary<Type, object> compDic = new Dictionary<Type, object>(); /// <summary>
/// 添加组件
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public T AddComp<T>() where T : new()
{
Type type = typeof (T);
T t = (T)Activator.CreateInstance(type); if (!compDic.ContainsKey(type))
{
compDic.Add(type, t);
}
else
{
Debug.LogError("不能重复添加组件");
} return t;
} /// <summary>
/// 添加挂在场景中的MonoBehaviour组件脚本
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public T AddMonoComp<T>() where T : MonoBehaviour
{
Type type = typeof (T);
T t = UnityEngine.Object.FindObjectOfType<T>();
if (t == null)
{
GameObject go = new GameObject(typeof(T).ToString());
t = go.AddComponent<T>();
}
if (!compDic.ContainsKey(type))
{
compDic.Add(type, t);
}
else
{
Debug.LogError("不能重复添加组件");
} return t;
} /// <summary>
/// 获取组件
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public T GetComp<T>()
{
Type type = typeof (T);
try
{
return (T)compDic[type];
}
catch (Exception e)
{
Debug.LogError(e);
throw;
}
}
}
实例

Unity组件式思想框架 非常好用的更多相关文章
- Unity3d&C#分布式游戏服务器ET框架介绍-组件式设计
前几天写了<开源分享 Unity3d客户端与C#分布式服务端游戏框架>,受到很多人关注,QQ群几天就加了80多个人.开源这个框架的主要目的也是分享自己设计ET的一些想法,所以我准备写一系列 ...
- 基于layui的框架模版,采用模块化设计,接口分离,组件化思想
代码地址如下:http://www.demodashi.com/demo/13362.html 1. 准备工作 编辑器vscode,需要安装liveServer插件在前端开启静态服务器 或者使用hbu ...
- Agile.Net 组件式开发平台 - 平台系统介绍
平台介绍 Agile.Net 组件式开发平台是一款针对企业级产品的开发框架,平台架构基于SOA服务体系,多层组件式架构打造.平台提供企业应用开发所需的诸如ORM.IOC.WCF.EBS.SOA等分布式 ...
- 分布式流式处理框架:storm简介 + Storm术语解释
简介: Storm是一个免费开源.分布式.高容错的实时计算系统.它与其他大数据解决方案的不同之处在于它的处理方式.Hadoop 在本质上是一个批处理系统,数据被引入 Hadoop 文件系统 (HDFS ...
- Agile.Net 组件式开发平台 - 组件开发示例
所谓组件式开发平台,它所有的功能模块都是以组件的形式扩展的,下面我来演示一个简单的组件开发例程. Agile.Net开发管理平台项目,已经托管在开源中国码云平台(http://git.oschina. ...
- 基于TypeScript的FineUIMvc组件式开发(开头篇)
了解FineUIMvc的都知道,FineUIMvc中采用了大量的IFrame框架,对于IFrame的优缺点网上也有很多的讨论,这里我要说它的一个优点“有助于隔离代码逻辑”,这也是FineUIMvc官网 ...
- 王者荣耀是怎样炼成的(三)unity组件与脚本
转载请注明出处:http://www.cnblogs.com/yuxiuyan/p/7565345.html 上回书说到了unity的基本操作.这回我们来侃侃unity中的组件与脚本. 目录结构 一. ...
- Storm:分布式流式计算框架
Storm是一个分布式的.高容错的实时计算系统.Storm适用的场景: Storm可以用来用来处理源源不断的消息,并将处理之后的结果保存到持久化介质中. 由于Storm的处理组件都是分布式的,而且处理 ...
- 流式处理框架storm浅析(下篇)
本文来自网易云社区 作者:汪建伟 举个栗子 1 实现的目标 设计一个系统,来实现对一个文本里面的单词出现的频率进行统计. 2 设计Topology结构: 这是一个简单的例子,topology也非常简单 ...
- 16个最佳响应式HTML5框架分享
HTML5框架可以快速构建响应式网站,它们帮助程序员减少编码工作,减少冗余的代码.如今有很多免费的HTML5框架可供使用,由于它们有着响应式设计.跨浏览器兼容.相对轻量级等特点,这些框架在开发中都十分 ...
随机推荐
- 【工具】Vscode翻译插件推荐(不用谷歌翻译api、支持短句英汉互译、支持查词、支持自动补全、不需要浏览器)
2024/04/24说明:这篇暂时修改为粉丝可见,因为正在冲粉丝量,等到我弄完了粉丝量的要求,我就改回来!不方便看到全文的小伙伴不好意思!! 需求: 1)偶尔需要查英文生词: 2)有时候想不起来中文对 ...
- 操作系统:linux -- 虚拟文件系统如何管理文件
本节来瞧下Linux是如何管理文件,也验证下Linux那句口号:一切皆文件 为此,我们需要首先搞清楚什么是 VFS,接着理清为了实现 VFS 所用到的数据结构,然后看看一个文件的打开.读写.关闭的过程 ...
- np.random总结
import numpy as np (1)np.random.random_sample help(np.random.random_sample) Help on built-in functio ...
- Win32汇编学习笔记02.RadAsm和联合编译
https://bpsend.net/thread-151-1-1.html 汇编使用资源 汇编使用资源的方式和C的一样,也是把资源文件 rc 编译成 res 再链接进去,汇编没有自己的资源编辑器,需 ...
- consul在netcore中发现服务和运行状况检查
在这篇文章中,我们将快速了解什么是服务发现,使用consul实现一个基本的服务基础设施:使用asp.net核心mvc框架,并使用dns client.net实现基于dns的客户端服务发现. Servi ...
- JAVAFx将后台报错信息导出到前台,方便用户联系技术人员
Alert alert = new Alert(Alert.AlertType.ERROR);alert.setTitle("错误");alert.setHeaderText(&q ...
- python实现小时划分
1.要实现图表如下图 2.后台的数据结构 说明:将每个小时按10分钟为一个时间间隔,分成6段,00.10.20.30.40.50然后将每个时间段组成如下数据:{'time': '22:30', 's ...
- MCP Server On FC 之旅第四站: 长连接闲置计费最高降低87%成本的技术内幕
函数计算( FC )是阿里云事件驱动的全托管计算服务, 使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码或镜像.函数计算为您准备好计算资源,弹性地.可靠地运行任务,并提供日志查询.性 ...
- Java 线程中断相关方法:interrupt() isInterrupted() interrupted()
interrupt() 方法只是改变中断状态而已,它不会中断一个正在运行的线程.如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,此时调用该线程的i ...
- PHP中的多线程与异步编程常见误区
本文由 ChatMoney团队出品 在PHP开发中,多线程和异步编程是提高应用性能和响应速度的重要手段.然而,这些技术也带来了许多挑战和陷阱,如共享状态冲突.死锁.超时.资源泄漏以及调试困难等.本文将 ...