{#modCpPic#} 这是什么饥荒种东西mod

美食网站系统插件标签和默认模版对照表
[帮助主题]
美食网站系统插件标签和默认模版对照表插件默认模版是指未在后台设置某个插件调用哪个插件模版(tpl_)时,系统默认调用的模版文件;当后台设置了自定义调用插件模版文件时,默认模版的设置无效。
[栏目菜单]脚注栏目菜单
{#modBottomMenu#}
tpl_btmenu.htm
[全站插件]网页脚注信息
{#modButtomInfo#}
[全站插件]社区文章分类
{#modCommentClass#}
tpl_comment_class.htm
[全站插件]评论发布表单
{#modCommentForm#}
tpl_comment.htm
[全站插件]社区最新文章
{#modCommentList#}
tpl_commentlist.htm
[模块插件]社区文章发布表单
{#modCommentListForm#}
tpl_comment.htm
[模块插件]社区文章检索
{#modCommentQuery#}
tpl_comment_query.htm
[模块插件]本类推荐餐馆
{#modCompanyCatTj#}
tpl_companylist.htm
[全站插件]餐馆分类列表
{#modCompanyClassAll#}
tpl_mainclass1.htm
[模块插件]餐馆下一级分类
{#modCompanyClassFc#}
tpl_classfc.htm
[模块插件]餐馆相关评论
{#modCompanyCommentList#}
tpl_commentlist1.htm
[全站插件]最新餐馆评论
{#modCompanyCommentListAll#}
tpl_commentlist.htm
[全站插件]餐馆+菜组合推荐
{#modCompanyFoodTj#}
tpl_companyfood.htm
[模块插件]餐馆图片检索
{#modCompanyLicQuery#}
tpl_zsquery.htm
[全站插件]最新餐馆
{#modCompanyList#}
tpl_companylist.htm
[模块插件]餐馆主页左侧菜单
{#modCompanyMenu#}
tpl_companymenu.htm
[全站插件]最新餐馆图片
{#modCompanyPic#}
tpl_companypic.htm
[全站插件]餐馆图片推荐
{#modCompanyPicTj#}
tpl_companypic.htm
[模块插件]餐馆主页最新美食图片
{#modCompanyProdPic#}
tpl_prodpic.htm
[模块插件]餐馆主页菜式检索
{#modCompanyProdQuery#}
tpl_prodquery.htm
[模块插件]餐馆分类检索
{#modCompanyQuery#}
tpl_companyquery.htm
[全站插件]餐馆组合搜索
{#modCompanySearchForm#}
tpl_companysearchform.htm
[模块插件]餐馆主页信息检索
{#modCompanySellQuery#}
tpl_infoquery.htm
[全站插件]推荐餐馆
{#modCompanyTj#}
tpl_companylist.htm
[全站插件]推荐餐馆
{#modCompanyTotal#}
[模块插件]餐馆主页最新餐厅图片
{#modCompanyZsPic#}
tpl_zspic.htm
[全站插件]图文一级分类
{#modCpClass#}
tpl_class.htm
[模块插件]图文下一级分类
{#modCpClassFc#}
tpl_class.htm
[全站插件]最新图文评论
{#modCpCommentList#}
tpl_commentlist.htm
[全站插件]最新图文评论
{#modCpCommentRel#}
tpl_commentlist.htm
[模块插件]图文频道相关下载
{#modCpDownRel#}
tpl_list.htm
[栏目菜单]图文大类菜单
{#modCpMenu#}
tpl_classmenu.htm
[栏目菜单]图文分类菜单
{#modCpMenuAll#}
tpl_classmenu.htm
[模块插件]图文频道相关文章
{#modCpNewsRel#}
tpl_list.htm
[全站插件]图文频道最新图片
{#modCpPic#}
tpl_cppic.htm
[全站插件]图文频道热门图片
{#modCpPicHot#}
tpl_cppic.htm
[全站插件]图文频道推荐图片
{#modCpPicRec#}
tpl_cppic.htm
[模块插件]图文频道同专题图片
{#modCpPicRel#}
tpl_cppic.htm
[模块插件]图文频道本类图片
{#modCpPicSameCat#}
tpl_cppic.htm
[模块插件]图文参数列表
{#modCpProp#}
tpl_cpprop.htm
[模块插件]图文内容检索
{#modCpQuery#}
tpl_cpquery1.htm
[全站插件]图文树型分类
{#modCpTreeClass#}
[全站插件]图文二级分类
{#modCpTwoClass#}
tpl_twoclass1.htm
[全站插件]下载一级分类
{#modDownClass#}
tpl_class.htm
[模块插件]下载下一级分类
{#modDownClassFc#}
tpl_class.htm
[全站插件]最新下载评论
{#modDownCommentList#}
tpl_commentlist.htm
[全站插件]最新下载评论
{#modDownCommentRel#}
tpl_commentlist.htm
[模块插件]下载频道相关图文
{#modDownCpPicRel#}
tpl_cppic.htm
[全站插件]热门下载
{#modDownHot#}
tpl_list.htm
[全站插件]最新下载
{#modDownList#}
tpl_list.htm
[栏目菜单]下载大类菜单
{#modDownMenu#}
tpl_classmenu.htm
[栏目菜单]下载分类菜单
{#modDownMenuAll#}
tpl_classmenu.htm
[模块插件]下载频道相关文章
{#modDownNewsRel#}
tpl_list.htm
[模块插件]下载参数列表
{#modDownProp#}
tpl_downprop.htm
[模块插件]下载翻页检索
{#modDownQuery#}
tpl_downquery.htm
[全站插件]推荐下载
{#modDownRec#}
tpl_list.htm
[模块插件]同专题相关下载
{#modDownRel#}
tpl_list.htm
[模块插件]本类最新下载
{#modDownSameCat#}
tpl_list.htm
[模块插件]本类热门下载
{#modDownSameCatHot#}
tpl_list.htm
[模块插件]本类推荐下载
{#modDownSameCatRec#}
tpl_list.htm
[全站插件]下载树形分类
{#modDownTreeClass#}
[全站插件]下载二级分类
{#modDownTwoClass#}
tpl_twoclass1.htm
[全站插件]自由编辑区域
{#modEdit#}
[全站插件]美食图名组合推荐
{#modFoodTj#}
tpl_foodtj.htm
[模块插件]自定表单
{#modForm#}
[模块插件]活动评论发布表单
{#modHdCommentForm#}
tpl_hdcomment.htm
[模块插件]活动相关评论
{#modHdCommentList#}
tpl_commentlist1.htm
[全站插件]最新活动列表
{#modHdList#}
tpl_hdlist.htm
[全站插件]最新活动图片
{#modHdPic#}
tpl_hdpic.htm
[模块插件]活动聚会检索
{#modHdQuery#}
tpl_hdquery.htm
[全站插件]餐馆组合搜索(横式)
{#modIndexSearchForm#}
tpl_indexsearchform.htm
[全站插件]图片友情链接
{#modLinkPic#}
tpl_link.htm
[全站插件]文字友情链接
{#modLinkText#}
tpl_link.htm
[全站插件]会员登录表单
{#modLoginForm#}
tpl_login1.htm
[广告插件]网站标志
{#modLogo#}
[栏目菜单]横式频道主菜单
{#modMainMenu#}
tpl_menu.htm
[栏目菜单]竖式频道主菜单
{#modMainMenuV#}
tpl_menuv.htm
[模块插件]会员功能菜单
{#modMemberMenu#}
[模块插件]最新会员公告
{#modMemberNotice#}
tpl_list.htm
[模块插件]最新会员公告
{#modMsn#}
[全站插件]类别导航条
{#modNavPath#}
tpl_navpath.htm
[全站插件]文章一级分类
{#modNewsClass#}
tpl_class.htm
[模块插件]文章下一级分类
{#modNewsClassFc#}
tpl_class.htm
[全站插件]最新文章评论
{#modNewsCommentList#}
tpl_commentlist.htm
[全站插件]最新文章评论
{#modNewsCommentRel#}
tpl_commentlist.htm
[模块插件]文章频道相关图文
{#modNewsCpPicRel#}
tpl_cppic.htm
[模块插件]文章频道相关下载
{#modNewsDownRel#}
tpl_list.htm
[全站插件]热门文章
{#modNewsHot#}
tpl_list.htm
[全站插件]最新文章
{#modNewsList#}
tpl_list.htm
[栏目菜单]文章大类菜单
{#modNewsMenu#}
tpl_classmenu.htm
[栏目菜单]文章分类菜单
{#modNewsMenuAll#}
tpl_classmenu.htm
[全站插件]最新文章图片
{#modNewsPic#}
tpl_newspic.htm
[全站插件]热门文章图片
{#modNewsPicHot#}
tpl_newspic.htm
[全站插件]推荐文章图片
{#modNewsPicRec#}
tpl_newspic.htm
[模块插件]同专题文章图片
{#modNewsPicRel#}
tpl_newspic.htm
[模块插件]本类最新文章图片
{#modNewsPicSameCat#}
tpl_newspic.htm
[模块插件]文章翻页检索
{#modNewsQuery#}
tpl_newsquery.htm
[全站插件]推荐文章
{#modNewsRec#}
tpl_list.htm
[模块插件]同专题相关文章
{#modNewsRel#}
tpl_list.htm
[模块插件]同作者相关文章
{#modNewsSameAuthor#}
tpl_list.htm
[模块插件]本类最新文章
{#modNewsSameCat#}
tpl_list.htm
[模块插件]本类热门文章
{#modNewsSameCatHot#}
tpl_list.htm
[模块插件]本类推荐文章
{#modNewsSameCatRec#}
tpl_list.htm
[全站插件]文章树形分类
{#modNewsTreeClass#}
[全站插件]文章二级分类
{#modNewsTwoClass#}
tpl_twoclass1.htm
[全站插件]美食分类列表
{#modProdClassAll#}
tpl_mainclass1.htm
[模块插件]美食检索下一级分类
{#modProdClassFc#}
tpl_classfc.htm
[模块插件]美食相关评论
{#modProdCommentList#}
tpl_commentlist1.htm
[全站插件]最新美食评论
{#modProdCommentListAll#}
tpl_commentlist.htm
[全站插件]最新美食图片
{#modProdPic#}
tpl_prodpic.htm
[模块插件]本类推荐美食图片
{#modProdPicCatTj#}
tpl_prodpic.htm
[全站插件]推荐美食图片
{#modProdPicTj#}
tpl_prodpic.htm
[模块插件]美食分类检索
{#modProdQuery#}
tpl_prodquery.htm
[全站插件]美食组合搜索
{#modProdSearchForm#}
tpl_prodsearchform.htm
[全站插件]美食组合搜索
{#modProdTotal#}
[模块插件]站内搜索结果
{#modSearch#}
tpl_search.htm
[栏目菜单]横式二级栏目菜单
{#modSecondMenu#}
tpl_smenu.htm
[栏目菜单]所有二级栏目菜单
{#modSecondMenuAll#}
tpl_smenu.htm
[栏目菜单]竖式二级栏目菜单
{#modSecondMenuV#}
tpl_smenuv.htm
[模块插件]本类推荐餐饮信息
{#modSellCatTj#}
tpl_infoList.htm
[全站插件]餐饮信息分类列表
{#modSellClassAll#}
tpl_mainclass1.htm
[模块插件]餐饮信息下一级分类
{#modSellClassFc#}
tpl_classfc.htm
[模块插件]信息相关评论
{#modSellCommentList#}
tpl_commentlist1.htm
[全站插件]最新信息评论
{#modSellCommentListAll#}
tpl_commentlist.htm
[全站插件]最新餐饮信息
{#modSellList#}
tpl_infolist.htm
[模块插件]餐饮信息检索
{#modSellQuery#}
tpl_infoquery.htm
[全站插件]餐饮信息组合搜索
{#modSellSearchForm#}
tpl_infosearchform.htm
[全站插件]推荐餐饮信息
{#modSellTj#}
tpl_infolist.htm
[全站插件]推荐餐饮信息
{#modSellTotal#}
[全站插件]访问统计
{#modShowCount#}&&&&&&&&&&&&&&&&&&
posts - 137,comments - 593,trackbacks - 45
1. ModBus的 Client/Server模型2. 数据包格式及MBAP header (MODBUS Application Protocol header)3. 大小端转换4. 事务标识和缓冲清理5. 示例代码 & 0. MODBUS MESSAGING ON TCP/IP IMPLEMENTATION GUIDE &&& 下载地址: & 1. ModBus的 Client/Server模型 & &&& Client与Server之间有两种通讯方式:一种是TCP/IP,另一种是通过串口(Serial Port),本文重点介绍第一种通讯方式。第二种方式留了接口,暂时还没有实现。 & 2. 数据包格式及MBAP header (MODBUS Application Protocol header)
&&& 2.1 数据包格式
&&& 数据交换过程中,数据包的格式由三部分组成:协议头 + 功能码 + 数据(请求或接受的数据)。&&& 这里主要用到下列两个功能码(十进制):&&& 3: 读取寄存器中的值(Read Multiple Register)&&& 16: 往寄存器中写值(Write Multiple Register) & && 2.2 MBAP header &&&
&&& 协议头具体包括下列4个字段:(1) Transaction Identifier:事务ID标识,Client每发送一个Request数据包的时候,需要带上该标识;当Server响应该请求的时候,会把该标识复制到Response中;这样客户端就可以进行容错判断,防止数据包发串了。(2) Protocal Identifier:协议标识,ModBus协议中,该值为0;(3) Length:整个数据包中,从当个前这个字节之后开始计算,后续数据量的大小(按byte计算)。(4) Unit Identifier:-_- & 3. 大小端转换 &&& ModBus使用Big-Endian表示地址和数据项。因此在发送或者接受数据的过程中,需要对数据进行转换。 3.1 判断大小端
&&& 对于整数1,在两种机器上有两种不同的标示方式,如上图所示;因此,我们可以用&操作符来取其地址,再转换成指向byte的指针(byte*),最后再取该指针的值;若得到的byte值为1,则为Little-Endian,否则为Big-Endian。
int tester = 1;
bool littleEndian = (*(byte*)(&tester)) == (byte)1;
3.2 整数/浮点数转换成Byte数组
&&& .Net提供了现成的API,可以BitConverter.GetBytes(value)和BitConverter.ToXXOO(Byte[] data)来进行转换。下面的代码对该转换进行了封装,加入了Little-Endian转Big-Endian的处理(以int为例):
1: public class ValueHelper //Big-Endian可以直接转换
public virtual Byte[] GetBytes(int value)
return BitConverter.GetBytes(value);
public virtual int GetInt(byte[] data)
return BitConverter.ToInt32(data, 0);
13: internal class LittleEndianValueHelper : ValueHelper //Little-Endian,转换时需要做翻转处理。
public override Byte[] GetBytes(int value)
return this.Reverse(BitConverter.GetBytes(value));
public virtual int GetInt(byte[] data)
return BitConverter.ToInt32(this.Reverse(data), 0);
private Byte[] Reverse(Byte[] data)
Array.Reverse(data);
4. 事务标识和缓冲处理
&&& 4.1 Transaction Identifier
&&& 上面2.2节中提到,Client每发送一个Request数据包的时候,需要带上一个标识;当Server响应该请求的时候,会把该标识复制到Response中,返回给Client。这样Client就可以用来判断数据包有没有发串。在程序中,可以可以用一个变量及记录该标识:
1: private byte dataIndex = 0;
3: protected byte CurrentDataIndex
get { return this.dataI }
8: protected byte NextDataIndex()
return ++this.dataI
&& 每次Client发送数据的时候,调用NextDataIndex()来取得事务标识;接着当Client读取Server的返回值的时候,需要判断数据包中的数据标识是否与发送时的标志一致;如果一致,则认为数据包有效;否则丢掉无效的数据包。
&&& 4.2 缓冲处理
&&& 上节中提到,如果Client接收到的响应数据包中的标识,与发送给Server的数据标识不一致,则认为Server返回的数据包无效,并丢弃该数据包。
&&& 如果只考虑正常情况,即数据木有差错,Client每次发送请求后,其请求包里面包含需要读取的寄存器数量,能算出从Server返回的数据两大小,这样就能确定读完Server返回的所有缓冲区中的数据;每次交互后,Socket缓冲区中都为空,则整个过程没有问题。但是问题是:如果Server端出错,或者数据串包等异常情况下,Client不能确定Server返回的数据包(占用的缓冲区)有多大;如果缓冲区中的数据没有读完,下次再从缓冲区中接着读的时候,数据包必然是不正确的,而且会错误会一直延续到后续的读取操作中。
&&& 因此,每次读取数据时,要么全部读完缓冲区中的数据,要么读到错误的时候,就必须清楚缓冲区中剩余的数据。网上搜了半天,木有找到Windows下如何清理Socket缓冲区的。有篇文章倒是提到一个狠招,每次读完数据后,直接把Socket给咔嚓掉;然后下次需要读取或发送数据的时候,再重新建立Socket连接。
&&& 回过头再来看,其实,在Client与Server进行交互的过程中,Server每次返回的数据量都不大,也就一个MBAP Header + 几十个寄存器的值。因此,另一个处理方式,就是每次读取尽可能多的数据(多过缓冲区中的数据量),多读的内容,再忽略掉。暂时这么处理,期待有更好的解决方法。
5.1 类图结构:
5.2 使用示例
(1) 写入数据:
1: this.Wrapper.Send(Encoding.ASCII.GetBytes(this.tbxSendText.Text.Trim()));
3: public override void Send(byte[] data)
//[0]:填充0,清掉剩余的寄存器
if (data.Length & 60)
var input =
data = new Byte[60];
Array.Copy(input, data, input.Length);
this.Connect();
List&byte& values = new List&byte&(255);
//[1].Write Header:MODBUS Application Protocol header
values.AddRange(ValueHelper.Instance.GetBytes(this.NextDataIndex()));//1~2.(Transaction Identifier)
values.AddRange(new Byte[] { 0, 0 });//3~4:Protocol Identifier,0 = MODBUS protocol
values.AddRange(ValueHelper.Instance.GetBytes((byte)(data.Length + 7)));//5~6:后续的Byte数量
values.Add(0);//7:Unit Identifier:This field is used for intra-system routing purpose.
values.Add((byte)FunctionCode.Write);//8.Function Code : 16 (Write Multiple Register)
values.AddRange(ValueHelper.Instance.GetBytes(StartingAddress));//9~10.起始地址
values.AddRange(ValueHelper.Instance.GetBytes((short)(data.Length / 2)));//11~12.寄存器数量
values.Add((byte)data.Length);//13.数据的Byte数量
//[2].增加数据
values.AddRange(data);//14~End:需要发送的数据
//[3].写数据
this.socketWrapper.Write(values.ToArray());
//[4].防止连续读写引起前台UI线程阻塞
Application.DoEvents();
//[5].读取Response: 写完后会返回12个byte的结果
byte[] responseHeader = this.socketWrapper.Read(12);
(2) 读取数据:
1: this.tbxReceiveText.Text = Encoding.ASCII.GetString(this.Wrapper.Receive());
public override byte[] Receive()
this.Connect();
List&byte& sendData = new List&byte&(255);
//[1].Send
sendData.AddRange(ValueHelper.Instance.GetBytes(this.NextDataIndex()));//1~2.(Transaction Identifier)
sendData.AddRange(new Byte[] { 0, 0 });//3~4:Protocol Identifier,0 = MODBUS protocol
sendData.AddRange(ValueHelper.Instance.GetBytes((short)6));//5~6:后续的Byte数量(针对读请求,后续为6个byte)
sendData.Add(0);//7:Unit Identifier:This field is used for intra-system routing purpose.
sendData.Add((byte)FunctionCode.Read);//8.Function Code : 3 (Read Multiple Register)
sendData.AddRange(ValueHelper.Instance.GetBytes(StartingAddress));//9~10.起始地址
sendData.AddRange(ValueHelper.Instance.GetBytes((short)30));//11~12.需要读取的寄存器数量
this.socketWrapper.Write(sendData.ToArray()); //发送读请求
//[2].防止连续读写引起前台UI线程阻塞
Application.DoEvents();
//[3].读取Response Header : 完后会返回8个byte的Response Header
byte[] receiveData = this.socketWrapper.Read(256);//缓冲区中的数据总量不超过256byte,一次读256byte,防止残余数据影响下次读取
short identifier = (short)((((short)receiveData[0]) && 8) + receiveData[1]);
//[4].读取返回数据:根据ResponseHeader,读取后续的数据
if (identifier != this.CurrentDataIndex) //请求的数据标识与返回的标识不一致,则丢掉数据包
return new Byte[0];
byte length = receiveData[8];//最后一个字节,记录寄存器中数据的Byte数
byte[] result = new byte[length];
Array.Copy(receiveData, 9, result, 0, length);
(3) 测试发送和读取:
ModBus-TCP Client Tool(可以从网上下载,用来测试)中,可以点击“Edit Values”,修改寄存器中的值;然后再在测试程序中,点击“接收”,可以解析到修改后的值。这里只是测试发送和接收字符串,如果需要处理复杂的数字/字符串组合啥的,就需要自己定义数据格式和解析方式了。
5.3 代码下载
阅读(...) 评论()1662人阅读
Unity(76)
作为源生的C#程序员,可能已经非常了解委托(delegate)、行动(Action)以及C#的事件了,不过作为一个半道转C#的程序员而言,这些东西可能还是有些陌生的,虽然委托并非是C#独创,亦非是首创,C++的函数指针就完全类似于委托的功能,但很多东西没有委托的话实现起来还是很伤脑筋的。
本文主要介绍委托与unity协程之间组合开发的便利,实质上也是对平常的学习和工作中学到的东西做个记录。
定义委托:public delegate void MyDelegate(int
&&&&&&&&&&&&&&&&//定义一个委托MyDelegate,如同定义一个类一样,此时的委托没有经过实例化是无法使用的,而他的实例化必须接收一个返回值和参数都与他等同的函数,此处的委托MyDelegate只能接收返回值为void,参数为一个int的函数
实例化委托:MyDelegate&_MyDelegate=new&MyDelegate(TestMod);
&&&&&&&&&&&&&&&&//以TestMod函数实例化一个MyDelegate类型的委托_MyDelegate,此处TestMod函数的定义就应如下:
&&&&&&&&&&&&&&&&&&&&&&&&public void&TestMod(int
&&&&&&&&&&&&&&&&//之后调用_MyDelegate(100)时就完全等同于调用TestMod(100)
定义协程:public IEnumerator MyCoroutine(){
&&&&&&&&&&&&&&&&//定义一个协程MyCoroutine,不同于定义类或委托,此时的协程是可以直接使用的,Unity的每一个执行周期里都会包含属于协程的那一部分,只要是场景中属于激活状态的物体(active为true),如同update那般,Unity在渲染的每一帧都会去查找该物体上是否存在协程部分的代码,若存在则加入该物体协程的执行周期,协程部分的代码会如同update那样被Unity每帧执行,当然不同于update的是,大部分协程内部不存在延时的话,一次执行之后便会跳出了,而且既然是处于Unity规定的生命周期里的模块,协程如同update一样当他们所在的物体属于未激活的话(active为false),该物体上所有脚本中包含的协程代码都是不会被执行的。
使用协程:StartCoroutine(MyCoroutine());
& & & & & & & & //使用StartCoroutine函数将协程MyCoroutine加入此脚本所在物体的协程执行周期内,如果在渲染的下一帧此物体依旧是处于激活状态的话,那么协程MyCoroutine中的代码便会得到Unity执行。
三、委托+协程
其实网上关于这个的例子很多,我在这里只是做个比较系统的归纳。
还记得Unity的Invoke(&test&,2)吗(延时2秒后执行函数test)?不得不说这是个很大的坑,test函数不能赋予参数不说,还必须得是在当前类里面的方法,而对于延时执行等控制时间轴的操作,这在任何一个项目中肯定都是不可少的,索性有协程,我们完全可以替换掉Invoke的作用。
我们可以自己写一个延时控制器:
/// &summary&
/// 延时执行
/// &/summary&
/// &param name=&action&&执行的委托&/param&
/// &param name=&delaySeconds&&延时等待的秒数&/param&
public IEnumerator DelayToInvokeDo(Action action, float delaySeconds)
yield return new WaitForSeconds(delaySeconds);
/// &summary&
/// 使用例子
/// &/summary&
StartCoroutine(DelayToInvokeDo(delegate() {
task.SetActive(true);
task.transform.position = Vector3.
task.transform.rotation = Quaternion.Euler(Vector3.zero);
task.doSomethings();
我们可以看到这里的例子是在1.5秒之后执行一个匿名委托,该委托的内容是将游戏物体task激活,并设置其位置与旋转属性,然后可以做更多的事情。
不过好像有些缺陷,task这个变量是哪里来的?Unity能否识别?事实上无论task是本类的全局静态变量还是普通单例变量,甚至只是一个与此部分协程代码处在同一域中的局部变量,加入到协程执行周期以后,短期内他是不会被释放的,也就不用担心Unity在后续执行到task的SetActive的时候会报空引用的错了。
只不过我们确实可以将之完善一下,或许我想更好的控制task。
/// &summary&
/// 延时执行
/// &/summary&
/// &param name=&action&&执行的委托&/param&
/// &param name=&obj&&委托的参数&/param&
/// &param name=&delaySeconds&&延时等待的秒数&/param&
public IEnumerator DelayToInvokeDo(Action&GameObject& action, GameObject obj,float delaySeconds)
yield return new WaitForSeconds(delaySeconds);
action(obj);
/// &summary&
/// 使用例子
/// &/summary&
StartCoroutine(DelayToInvokeDo(delegate(GameObject task) {
task.SetActive(true);
task.transform.position = Vector3.
task.transform.rotation = Quaternion.Euler(Vector3.zero);
task.doSomethings();
},GameObject.Find(&task1&),1.5f));
1.5秒之后执行一个匿名委托,该委托的内容是将游戏物体task激活,并设置其位置与旋转属性,然后可以做更多的事情,这里的task是我们从场景中获取的name为task1的物体,将之作为参数传入了委托中。
后续你可能需要更多的参数,更多的种类,不过那只需要在此基础上扩展就可以了,最后将协程DelayToInvokeDo放在一个全局脚本内,定义一个该脚本的静态变量,那么就可以在项目的任何位置加入这个协程了。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:215253次
积分:3324
积分:3324
排名:第9421名
原创:102篇
评论:302条
新建学习讨论群,有问题可直接加群。
验证CSDN即可
文章:12篇
阅读:27103
阅读:31886
(1)(3)(5)(2)(4)(3)(7)(4)(4)(10)(5)(8)(10)(3)(4)(8)(4)(4)(2)(1)(1)(6)(5)(4)(2)-------欢迎您来访四川成都心理咨询中心,让我们一起关注心理健康,呵护心灵,共建谐和美好心家园。中心箴言:战胜自我,拥抱健康,从心开始--------
{#modMainMenu#}
2016热点心闻:||成都剩男调查|||“|
{#lanLogin#}
{#modLoginForm#}
{#lanColGuide#}
{#modSecondMenuV#}
{#modCpPic-4#}
视频|文章|书籍
{#modDownHot#}
{#modNewsClass#}
{#modNewsHot#}
{#modLinkPic#}
{#lanSiteSearch#}
{#lanArtical#} {#lanPic#} {#lanDownload#} {#lanBBS#}
{#modEdit#}
{#modNewsList#}
{#modNewsList-10#}
{#modNewsList-11#}
{#modNewsList-12#}
{#modNewsList-13#}
{#modNewsList-14#}
{#modNewsList-15#}
{#modEdit-19#}
{#modCpPic#}
{#modEdit-20#}
{#modNewsList-21#}
{#modNewsList-22#}
{#modNewsList-23#}
{#modNewsList-25#}
{#modNewsList-27#}
{#modNewsList-24#}
{#modNewsList-26#}
{#modNewsList-28#}
{#modBottomMenu#}
{#modButtomInfo#}
{#modShowCount#}}

我要回帖

更多关于 我的世界卖东西的mod 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信