太空工程师吧 关注:36,628贴子:507,118
  • 14回复贴,共1

讲一讲如何用vs写游戏内脚本

只看楼主收藏回复

新入坑。觉得这游戏的脚本真不错,自由度好高。有兴趣要好好研究一下
工欲善其事必先利其器,我们写脚本时如何用vs方便的代码补全和差错功能呢。本贴分享一下我今天的研究成果。
很惊讶这游戏竟然在github上有源码
https://github.com/KeenSoftwareHouse/SpaceEngineers
点击克隆和下载按钮,下载或者克隆源代码。这个源码比较老,很多api没有。所以食用时可能要配合其他的资料
我也不知道新的api哪里找。。。比如Runtime.UpdateFrequency,IMyRadioAntenna.TransmitMessage这些接口源码里就没有,wiki里也没有(有提到,但是没有Scripting_API_Documentation页系统的整理出来)。。十分想知道大佬们是怎么了解最新的api的
下载完成之后,用vs打开sln文件,也就是解决方案文件。打开后大概长这样


IP属地:四川1楼2018-12-29 03:31回复

    别管那个hello world。哈哈
    可以看到这个解决方案由很多项目构成。其中VRage是游戏引擎,不用管它。。。
    我们再打开类视图看一下

    发现我们能够在脚本里面用的接口都在一个叫Sandbox.Common项目下的Sandbox.ModAPI.Ingame里边


    IP属地:四川2楼2018-12-29 03:45
    回复
      那么,我们的Me,Runtime这些是哪来的呢,Main,Save函数又是如何被调用的呢?可以猜测,我们写的代码被封装在了一个类中,然后这个类继承了一个游戏中定义的类,Me,Runtime,main这些函数和属性都是继承而来的
      经过努力的搜索,我在源码中找到了这个类

      看见作者的注释,我们知道这就是要找的了


      IP属地:四川3楼2018-12-29 04:09
      回复
        结论,我们要在vs中写脚本,可以在se的解决方案中新建一个项目
        选c#类库,类的名字为Program,类的命名空间随意。
        添加引用Sandbox.Common和VRage.Game(如果不添加VRage.Game,在调用某些接口时vs会提示你添加上的)
        然后using Sandbox.ModAPI.Ingame;
        再让你的Program类从MyGridProgram类继承
        接着在类里面写想写的代码就可以了
        参考下面两张图




        IP属地:四川4楼2018-12-29 04:19
        回复
          应该是技术贴,顶顶


          IP属地:上海5楼2018-12-29 10:43
          回复
            开源的是陈旧的15年版本,如果只想引用相应的库以自动补全或反射的话,建立项目并且引用 SpaceEngineers\Bin64 下相应dll即可,无需如此麻烦,大部分模组/插件开发者也不是靠原力调试的。


            IP属地:北京6楼2018-12-29 12:44
            收起回复
              该楼层疑似违规已被系统折叠 查看此楼


              IP属地:山西7楼2018-12-29 15:44
              回复
                7楼精神病发作控制不住自己,大家谅解下


                8楼2018-12-29 15:53
                回复
                  官方有个mdk的,直接装vs上就好了


                  IP属地:上海来自Android客户端9楼2018-12-31 02:47
                  回复
                    该楼层疑似违规已被系统折叠 查看此楼


                    IP属地:广东10楼2019-01-07 10:06
                    回复