UDN上一个小白错误想开去

 

偶然在UDN中看到如下这一段,觉得很无语,这不是死循环么?但鉴于UDN上讲得这么振振有词,觉得还是有必要去Check一下,看是否是UScript的特殊情况;

,UDNTutorial中的死循环

 

Continue

 

Continue命令将会使得当前正在执行的循环跳过此轮循环中的剩余代码并开始下一轮循环。将会判断任何开始或结束条件,如果必要将会退出循环。当该命令和嵌套循环结合使用时,则仅最内部的循环受到这个命令的影响。

让我们看一个在上面的While循环例子中使用Continue命令的示例。

i = 0;

while( i<5 )

{

if(i==3)

continue;

`log(“i is equal to”@i);

i++;

}

正如在前面的示例中所说的,这将会输出每次循环中i的值。但是这次,当i等于3时,将会跳过循环中的代码。循环的最终输出是:

i is equal to 0

i is equal to 1

i is equal to 2

i is equal to 4

您可以看到当i的值等于3时没有输出语句。但是,如果没有Continue命令的话结果将会和之前一样。


具有Continue命令的循环语句的流程。

 

Ⅱ,实践检验

 

相应代码

 

 

结果显而易见

 

到了这里,真相大白了,这应该是Epicd的一个疏忽,估计文档作者太随意了,但遇到问题,就应该解决问题,由于UScript的这个死循环,游戏完全卡死了(我把测试函数在PostBeginPlay()中。

问题来了

1,之前提到过,UVM(Unreal脚本虚拟机),按说它是多线程的,事实不应如此啊?为何主线程会卡死?

2,再遇到这类可能的情况,有无办法防止主线程卡死?

Ⅲ,Answer&Think

先第二个问题,虽然没有意义(实际中不应该出现如此情况),经过若干尝试,初始化函数调用位置?不行,使用latent、但需要Native代码,只有UDK也不行,DLLBing可以一试,但为了一个死循环似乎太蛋疼了,但前一篇中的《Unreal虚拟机相关》是问题的

虽然还有待商榷,但就主线程被卡死这一现象,可以得出结论,目前所知必须从源头制止过长的UScriptFunction,UDN中也做过说明,UScript的执行最要是为消息响应而生,需要大量执行的,Native的C++代码无疑是最佳选择,而且UScript的天然优势决定了你无须为切换,或者数据交换方面多虑;

Ⅳ,一些总结

 

也正好,看了逍遥剑客前辈的一篇《关于游戏引擎结构上的思考 》也是感悟颇多,也不禁想了下UE的相关特性,对目前的学习做一个小结,UE的特性优点到底在哪里?为何要如此大规模地采用UScript,而其机制到底算什么类型的脚本?

目前对UE的理解还属于比较粗浅的状态,就目前的代码阅读来看,UE的优点我认为主要在以下两点(底层抽象,跨平台,ToolBench,渲染,预处理等尽人皆知,就不再多提):

1,UObject,UActor,Kismet,Matinee,一整套体系,实现了组件,反射,序列化,一步步实现了强大的脚本、动画的视化编辑,便利的存储,及游戏模块的积木式灵活搭建。

2,Material,Animation,PhysX的完善整合,及配套的工具链;

其它还有什么?No,这些已经足够组成一个强大引擎的必备元素了!

究其一切,其中UScript功不可没,问题回到第一个,我的答案是

1,从性能,及相互调用的方便的设计道路,UScript的本质便是穿着Java外衣的C++(+自行组装)代码,所以剔除Unreal虚拟机的概念,其实不妥;

2,欲知详情,从本质来看:

编译:https://udn.epicgames.com/Three/UnrealScriptByteCode

二进制代码:https://udn.epicgames.com/Three/UnrealScriptByteCode

执行:https://udn.epicgames.com/Three/UnrealScriptByteCode

Ⅴ,UE架构体系

 

最后,通过流程图总结了下,如何在UE的基础上建立一个完整的MMO游戏,左右两边分别代表零散的数据与MMO大概的功能模块,在UnrealEngine的整合下有机的结合,当然,这里只是一个初略的统计,Editor,工具链,游戏流程,状态都未涉及,只是做一个大概的抽象,本文将继续慢慢完善~

转载于:https://www.cnblogs.com/Zephyroal/archive/2012/03/02/2377725.html

由UDN上一个小白错误想开去相关推荐

  1. 如何跨行学习前端?一个小白的跨行之路~

    如何跨行学习前端?一个小白的跨行之路~ 此篇文章讲述了一个小白跨行学习前端过程遇到的问题,以及是如何解决的.希望此篇文章能够帮助到更多的人. 前端小白该如何入门?(先给大家分享**干货**最后在讲故事 ...

  2. 要努力去写上一个大大的“屌”字

    2012年9月25日 星期二 18点45分,开始写第一篇csdn博客. 就在整整一年前,我满十八岁:整整一年前,我踏进了一所不起眼的大学.大概半年前,我加入学校的ACM队,从此踏上不归路. 呵呵,其实 ...

  3. python成功爬取拉勾网——初识反爬(一个小白真实的爬取路程,内容有点小多)

    python成功爬取拉勾网(一个小白的心里路程) 最开始想爬取拉钩是因为半年前上python实验课的时候,老师给了两个任务,一个时爬取糗百的笑话内容,另一个时爬取拉勾网的职位信息,当时因为课时紧张的缘 ...

  4. 史上最小白之CNN 以及 TextCNN详解

    本小白是一名立志从事NLP的菜鸟,本来只准备写一篇TextCNN来加深自己理解地,但想要了解TextCNN那必然需要了解CNN的原理,写的过程中突然想起了自己在学习时各种看博客的心路历程,看一篇博客要 ...

  5. 11gR2RAC环境DBCA创建一个数据库错误ORA-15055 ORA-15001

    11gR2RAC环境DBCA创建一个数据库错误ORA-15055 ORA-15001 象: 在11gR2 GridInfrastructure和Database软件安装完毕之后,运行DBCA创建数据库 ...

  6. 最全app上传渠道入口 拿去即用

    干货的文章看了很多,很多都是高大上的理论和思想,需要消化许久,也受益颇多.在这我也和大家分享一下我在千机团app上传的过程中的遇到的问题.适合小白,专业的大神请多指教. 1 应用市场的提交入口 这个对 ...

  7. 一个小白的Thingworx成长记录

    一个小白的Thingworx成长记录 这个为开发平台的主界面,在随后的文章中会逐步进行讲解每个部分的功能 Thingworx是什么 对一名开发人员来说,代码是底层,那么Thingworx就是产品,一个 ...

  8. 史上最小白之BM25详解与实现

    史上最小白之BM25详解与实现 原理 BM25算法是一种计算句子与文档相关性的算法,它的原理十分简单:将输入的句子sentence进行分词,然后分别计算句子中每个词word与文档doc的相关度,然后进 ...

  9. 史上最小白之Transformer详解

    1.前言 博客分为上下两篇,您现在阅读的是下篇史上最小白之Transformer详解,在阅读该篇博客之前最好你能够先明白Encoder-Decoder,Attention机制,self-Attenti ...

最新文章

  1. 中国制造2025+互联网+,引领制造业发展
  2. 2018python好找工作吗-2018年为什么要学习Python?Python还有前景吗?
  3. 多线程间通信之AutoResetEvent和ManualResetEvent的原理分析
  4. DIV+CSS笔记(一)
  5. 初次了解node.js
  6. pytorch torch.item()(返回此张量的值作为标准Python数字。 这仅适用于具有一个元素的张量。)
  7. Socket网络通讯开发总结之:Java 与 C进行Socket通讯
  8. flash在影片剪辑里面跳转场景
  9. 一文说尽C++赋值运算符重载函数(operator=)
  10. Jenkins二 安装gitlab及其使用
  11. 基于uCOSII的LCD驱动实验
  12. javascript 处理HTML元素必须避免使用的一种方法
  13. comsol分析时总位移代表什么_基于COMSOL的气动软体执行器仿真
  14. Intel Pin架构
  15. 【面试题】HashMap 面试 21 问
  16. SharePoint PowerShell使用Export-SPWeb和Import-SPWeb指令来导出和导入网站
  17. c语言中转义字符 0,【填空题】在C语言中,用“\\”开头的字符序列称为转义字符, 转义字符‘\\n’的功能是_____; 转义字符‘\\0’的功能是_____;...
  18. python货币转换代码_python将人民币转换大写的脚本代码 | 学步园
  19. vs2012安装出错解决方案
  20. 十大常用机器学习算法总结(持续完善)

热门文章

  1. 分布式系统(Distributed System)资料
  2. 一芯FC1178BC/FC1179主控U盘量产修复指南
  3. 装mdac2.8 注意 安装如何提示 出现致命错误。不支持此操作系统
  4. 树莓派vga转hdmi显示黑屏,闪烁
  5. python构建智能机器人系列博文---借助于python实现QQ,微信消息的自动发送,音乐的自动播放
  6. 2022R2移动式压力容器充装考试模拟100题及答案
  7. java能盗号吗_CVE-2017-8759漏洞新利用:Java Keylogger盗号木马分析
  8. 外包开发APP这些正式流程事项你需要了解,这些坑你必须知道!
  9. 勇芳VFB的Miniblink组件实现文件下载
  10. Spring 注解-包扫描