前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#脚本实践(六): 脚本相对于C++的优势

C#脚本实践(六): 脚本相对于C++的优势

作者头像
逍遥剑客
发布2018-05-23 16:28:36
1.5K0
发布2018-05-23 16:28:36
举报
  • 在实际使用脚本之前, 根本不知道为什么要用脚本, 直到我膝盖中了一箭
  • 在之前我也问过很多人, 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#脚本实践(五): 调试器

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2012年01月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档