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框架可供使用,由于它们有着响应式设计.跨浏览器兼容.相对轻量级等特点,这些框架在开发中都十分 ...
随机推荐
- DrissionPage采集抖音搜索结果详情信息及各视频的评论详情
目前正在做的一个项目,因为涉及到社交媒体的相关数据,在采集douyin数据的时候接触到了DrissionPage这个库,相对于该帖子发布的时间来说,该库的时效性较新,且目前在数据采集领域也属于较为新颖 ...
- jFinal 使用 SolonMCP 开发 MCP(拥抱新潮流)
MCP 官方的 java-sdk 目前只支持 java17+.直接基于 mcp-java-sdk 也比较复杂.使用 SolonMCP,可以基于 java8 开发(像 MVC 的开发风格),且比较简单. ...
- 牛客小白月赛111 E 构造矩形
E 构造矩形 原题链接:https://ac.nowcoder.com/acm/contest/102742/E 思路: 这种询问方案数或者"价值"的题,通常解法要么是维护前缀信息 ...
- TVM: VisitExpr流程分析
TVM源码中涉及到表达式遍历的地方,一般是适用VisitExpr接口进行,这个接口设计TVM的visitor模式,具体分析可参考:TVM:visitor设计模式 基类tvm::relay::ExprF ...
- C#实现SSE通信方式的MCP Server
前面的课程,我们使用MCP Server,用的是网络上魔搭提供的. 下面我们一起来实现,用C#实现自己的MCP Server. MCP Server通信方式支持SSE.Stdio. 下面我们先实现SS ...
- odoo14使用的文件服务器【NFS】
linux系统之间要文件共享实现方式:目前测试系统为Ubuntu20.04LTS 条件:1.保证两个系统都是linux: 2.目前实现是同一个局域网内: 服务端:172.26.1 ...
- 「Trick」常见错误
爆 int 了吗? 爆 long long 了吗? 进行 \(\bmod\) 时有爆掉或负数吗? 数组开大了吗?(\(N,M\) 用反了?) 变量重名了吗? 赋初值了吗? 不要在 printf 或者 ...
- 论文解读:Locating and Editing Factual Associations in GPT(ROME)
本文发表在人工智能顶会NeurIPS上(原文链接),研究了GPT(Generative Pre-trained Transformer)中事实关联的存储和回忆,发现这些关联与局部化.可直接编辑的计 ...
- Function AI 工作流发布:以 AI 重塑企业流程自动化
AI 工作流如何重塑企业自动化流程 在 AI 技术飞速发展的今天,企业的流程自动化方式也正在发生深刻变革.过去,流程自动化往往依赖于人工配置和固定规则,难以适应复杂.多变的业务场景.而如今, 随着 L ...
- window10本地搭建DeepSeek R1(二)
本章介绍在window上部署 DeepSeek R1-8B + Open WebUI :需要安装的有:Ollama,python 3.11,DeepSeek ,Open WebUI. 一:环境:我的w ...