`
- 浏览:
8937623 次
- 性别:
- 来自:
上海
-
- 在实际使用脚本之前, 根本不知道为什么要用脚本, 直到我膝盖中了一箭
- 在之前我也问过很多人, C++写逻辑什么的也行啊, 为什么要引入另一种语言呢? 听得最多的理由是:不用编译
- 的确, C++的编译速度很浪费时间, 但也不是不能接受. 不过, 用过其他语言之后, 再想想, 持这种观点的人都是习惯了慢罢了
- 当然, 还有很多其它原因, 可以参见miloyip的两篇文章: 混合语言的游戏开发系统架构, C++强大背后
- 在用了一段时间C#脚本之后, 暂时总结一下相对C++的优势吧. 其中一些可能C++也能做到, 但是是需要花费一定的代价的. C++无所不能, 但是总有它不擅长的部分
- 反射
- 属性反射
- 这个是非常有用的一个特性. 在做编辑器时跟PropertyGrid结合后, 基本上一个面板搞定所有的参数设置, 可以参考Unity的Inspector面板. 程序可以专注于程序逻辑, 不用在UI上花太多的精力
- 放到脚本里也一样, 逻辑属性的扩充就是加一个成员变量, 策划也不用去配什么表了, 直接所见即所得的编辑实体属性, 还不怕填错, 来回折腾
- 通过方法名字进行调用
- 这可以改变一下编程的思路, 比如发送一个消息到一个对象, 你有叫这个名字的处理函数就执行, 没有就算了, 我通知完我就不管了
- 能过类名创建对象
- 相当于内置了工厂模式, 比较状态机中, 状态的扩充就不用麻烦再去改原有的代码了
- 序列化
- C++在文件保存方面如果不做好设计, 就会面临各种版本兼容问题. C#的序列化是默认就支持的, 我们再也不用去操心数据是保存成ChunkData还是BinaryXML什么的, 直接一个Serialize搞定
- 还有一个比较有用的地方, 就是Save/Load, 比如脚本改了, 先Save, 重新载入脚本, 再Load, 就完成了运行时的更新, 见下面的"热更新"
- 异常处理
- C++虽然有异常处理, 但是很少有人用, 因为它本身就不完善. 把主要的程序逻辑放入脚本后, 相当于运行在一个沙盒里, 做好异常处理可以保证程序不崩溃
- 垃圾回收
- C++写出的代码安全性与稳定性非常依赖程序员的素质, 而脚本可以让你不用关心内存越界, 内存泄露, 非法内存访问等这种隐藏很深的BUG, 节省大量精力去专注于游戏逻辑
- 热更新
- 脚本可以在游戏运行过程中修改, 再重新载入, 游戏会继续按照新的逻辑运行. 这相对于C++的结束->修改->编译->重新运行->还原到指定场合, 可以节省大量的时间
- 另一方面就是方面调试, 因为可以实时更改运行逻辑, 那很多时间相关的逻辑代码就可以方便的屏蔽, 修改, 输出等
- 协程(Coroutine)
- C++里没有这东西, 要改变编程的思维方式需要一段时间的适应, 具体可以参考这篇文章: 用C#中的yield实现Coroutine框架
- 虽然只是语言级别的特性, 实际上并没有改变什么, 但是在做AI/技能什么的写出来的代码能简化太多了!
- 其它都是一些语法糖什么的, 比如delegate, event, lambda, linq等. 程序库很全, 但是一般都依赖引擎底层本身提供的功能
- 人力成本, 想招个好的C++程序员难啊, 想招C#/JS/Lua的逻辑程序员, 就很多了.
- 想到再补
- 工作中接触到很多游戏程序员, 都是C++一路走到死的, 不知道这是C++的幸运, 还是它的悲哀呢?
C#脚本实践(五): 调试器
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
这是mono所需要的所有dll文件,通过这个mono可以实现c#脚本功能,通过c++去调用c#代码,在unity游戏引擎里面就是通过mono实现c#脚本功能的。
事实上如今高性能的脚本都是先编译后运行的,大名鼎鼎的JavaScript V8引擎,号称速度最快的LUA-Jit,以及众所周知的ActionScript。。。预先编译不仅能大幅提高运行速度,更重要的是能够提前发现脚本中显式的错误。 ...
Unity 3d C#和Javascript脚本互相调用 解决方案.
当时研究了一段时间,拿出来给大家分享! google protobuf 生成c++ c#无障碍通信环境配置及脚本
本插件中包含了将proto文件转为C# C++等脚本实体类,方便进行调用。这里用的proto文件是proto2的版本,非proto3版本请注意查看版本在进行下载,里面提供了一些工具类等辅助脚本以及源码。cli-rel-1.0.0、protobuf-...
C#+Socket+实现的淘宝秒杀器(抢拍器) 源码
lua调用c++函数的实例,C++工程里使用LUA脚本,lua脚本调用c++工程的函数
对开发人员的一个常见要求是向脚本语言接口公开 C/C++ 代码,这正是 Simplified Wrapper and Interface Generator (SWIG) 的用武之地。SWIG 允许您向广泛的脚本语言公开 C/C++ 代码,包括 Ruby、Perl、Tcl 和 Python...
看了一个用VC++写的MFC小游戏,感觉很麻烦,就用C#简单写了一个一样的,有游戏背景画面,键盘上下左右控制人物移动。解决了画面中人物移动的闪动问题,对于想学习C# pictureBox 的同学有一定帮助。
C#通过USB连接斑马打印机 实现ZPL打印,可打印中文 文件包括ZPL打印类和fnthex32.DLL 可直接应用于项目
它是主流编译型宿主语言(C/C++/ C#/Java)在脚本领域的自然延伸.也代表着这一领域的顶尖设计水平.CSM是C Sharp Minus的简称,其语法形式大部分取自于微软的c#语言,但也有许多不同.而语义上基本与C/C++相同.CSM脚本语言...
支持传统C++开发及运行的跨平台的Web服务器端环境,建立在Apache平台上,knewcode0.91a版。 测试运行:(测试环境,Windows7) 1、将本目录拷贝到D盘根目录;(如果需要拷贝到其他目录,请自行修改Apache的配置文件...
java,c/c++,php,c#安全编码规范,从代码层面避免被入侵 1 业务安全编码规范 6 1.1 输入验证和数据合法性校验 6 1.1.1 避免SQL注入 6 1.1.2 避免XML注入 6 1.1.3 避免跨站点脚本(XSS) 7 1.1.4 避免跨站请求伪造...
Unity游戏状态脚本控制思考(C++实现如何调用C#) Unity游戏状态脚本控制思考(C++实现如何调用C#)
Unity3D教程:调用C++中DLL文件6) 在unity中创建一个C#脚本,调用我们刚刚生成的dll,在这里我们的DLL名字就叫DLL,所以写的是[DllI
支持传统C++开发及运行的跨平台的Web网站服务器端环境,建立在Apache平台上,knewcode0.92a版。 测试运行:(测试环境,Windows7) 1、将本目录拷贝到D盘根目录;(如果需要拷贝到其他目录,请自行修改Apache的配置...
VC和Unity之间使用socket的TCP协议进行网络通信。以C#作为Unity脚本为例与C++进行通信,所以实质上是C#与C++之间进行socket通信。C#与C++都提供了socket类,这样就使得这两种语言之间可以相互发送并接受消息。
软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备...
c#毕业设计源码Cppcheck GitHub动作 Linux构建状态 Windows构建状态 OSS-模糊 Coverity Scan构建状态 执照 关于名字 该程序的原始名称为“ C ++ check”,但后来更改为“ Cppcheck”。 尽管有名称,Cppcheck还是为C...
c#原始码转Java原始码的 Cling-交互式C ++解释器 主存储库位于 概述 Cling是基于Clang和LLVM编译器基础结构的交互式C ++解释器。 Cling实现了这一概念,以利用快速的应用程序开发。 解释器实现为LLVM和Clang的一个...