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框架可供使用,由于它们有着响应式设计.跨浏览器兼容.相对轻量级等特点,这些框架在开发中都十分 ...
随机推荐
- C# 应用程序域
在.NET中,每个应用程序域都是一个独立的执行环境,有自己的安全边界和上下文.当使用AppDomain.ExecuteAssembly方法在一个新的应用程序域中执行一个程序集时,这个程序集将会在新的应 ...
- numpy.ndarray.transpose用法理解
numpy.ndarray.transpose方法对于高维数组来讲,略微有点不太好理解.下面给出我自己对该方法的理解. 对于一个高维数组,transpose((i,j,k))可以这样理解:选取原数组的 ...
- odoo14里面开发一个简单的action.client 的tag 模板例子
1.js模板 web_template.js odoo.define('web', function (require) { "use strict"; var core = r ...
- Java中判断某一字符串是否包含数字、字母和中文
在Java中判断某一字符串是否为纯英文.纯数字.英文和数字的组合等时,通常使用正则str.matches匹配,告诉这个字符串是否与给定的正则表达式匹配. 各种字符的unicode编码的范围 ...
- iStore实现 SmartDNS + AdGuard Home IP优选+广告屏蔽
iStore实现 SmartDNS + AdGuard Home IP优选+广告屏蔽 参考自openwrt 官方版 安装配置 AdGuard Home + smartdns 告别广告烦扰 教程 软路由 ...
- 当我们在聊「开源大数据调度系统Taier」的数据开发功能时,到底在讨论什么?
原文链接:当我们在聊「开源大数据调度系统Taier」的数据开发功能时,到底在讨论什么? 课件获取:关注公众号__ "数栈研习社",后台私信 "Taier"__ ...
- Web前端入门第 74 问:JavaScript 事件冒泡与事件捕获
在讨论冒泡和捕获之前,先看这么一段代码: <style> .bd { border: 1px solid #000; padding: 8px; } </style> < ...
- VLFeat库实现KD-Tree算法
VLFeat库实现KD-Tree算法 K-D树(K-Dimensional Tree,即K维二叉树),K=1时,即是一棵普通的二叉树.常被用于高维空间中的搜索,比如范围搜索和最近邻搜索.考虑这样一种情 ...
- C# 自定义控件一些特性标识,重写WinForm 控件,重写控件
https://blog.csdn.net/cxu123321/article/details/104812099https://blog.csdn.net/biyusr/article/detail ...
- C# LoggingHelp 自定义记录日志帮助类
public class LoggingHelper { /// <summary> /// 获取文件路径 /// </summary ...