我是 unity 小白,最近也在学 PuerTS ,用 ts 开发游戏( c#端只提供一些工具类给 js 使用),但我不知道如何在 js 那边把整个流程跑起来,我说一下目前的理解
1 、C#端启动 JsEnv (全局一个即可),cs 文件:Launcher.cs ,env = new JsEnv();
2 、使用 env.ExecuteModule("main.mjs");执行 js 脚本(入口文件)
3 、由于 main.mjs
属于 js 端的入口文件,所以 c#端的 env 也只会执行一次 env.ExecuteModule ,后续所有的游戏逻辑都在main.mjs
入口文件分发和驱动
备注:我不清楚这种使用 PuerTS 的流程是否正确,如果不正确的话,请大佬指点迷津,小弟十分感激。
如果使用 c#开发,可以直接在 c#脚本中定义成员属性,然后在 unity 编辑器中拖入相关物体就完成了绑定,然后 c#中可以直接使用,那 js 的话并不支持这种方式,我有一些疑问:
js 端只能用GameObject.Find
去查找物体然后和 ts 脚本关联吗?因为无法直接用编辑器拖入的方式和代码完成绑定
main.mjs
应该如何去派发各种逻辑的处理,比如有时候场景跳转了
还有其它的问题,暂时问不出来
请各位大佬指教,谢谢
1
dcoder 2023-07-31 09:48:49 +08:00
用 Unity 就老实用 C#, 最好不要搞第三方的 JS/Lua 那种动态更新, 除非这个 JS/Lua 是你自己写的.
真的要用 JS, 就用 https://phaser.io/ |
2
ggvoking 2023-07-31 09:53:56 +08:00
作为游戏行业摸爬滚打多年的老鸟回答一下你,首先如何做代码热更,更推荐 HybridCLR ,这个是趋势。C#开发效率可比什么 lua 、js 高多了,而且舒服很多。你的问题我大概回答一下。
1. 一般来说不会在脚本中大量 Find ,因为效率很低。都是会在 C#侧做个通用的 Binding 绑定组件,把需要代码调用 Object 和组件挂上去,然后在脚本语言中直接遍历这个 Bingding 中已经绑定 Object 列表,存入 map 中,之后直接调用 2. 没懂你的意思。场景跳转了,有 SceneManager 的 event api 可以使用。 |
3
ggvoking 2023-07-31 10:02:48 +08:00
|
4
sunny1688 OP @ggvoking
非常感谢!我还有一些问题, 1 、C#的 `ObjectBingding.cs` 那是如何与 js 相关联的呢? js 端是不是也要先 Find 某个物体,然后 AddComponent<ObjectBingding>() 呀? 2 、每个脚本需要的物体都不一样(有的要 Button 、有的要 GameObject ,有的要 AudioClip ),那在编辑器拖入物体的时候有这么多类型吗? 3 、能否提供一下 ObjectBingding.cs ,非常感谢 |
5
ggvoking 2023-07-31 10:26:55 +08:00
@sunny1688
1. 如果是场景中的,就那 Find 吧,一般也就这一次 Find ;如果是 Instantiate ,可以直接 GetComponent 。 2. 可以看到到我这个 ObjectBinding 是支持的,上面图示中 image -> ExImage ,buttonall -> ExButton ,其实就是序列化的时候也记一下类型。然后做编辑器面板的时候,用 EditorGUILayout.ObjectField ,传入指定的类型 3. 我的开源项目里面有,但是这个是针对 HyBridCLR 做的,C#热更用的生成代码的模式生成到 UI 代码中,如果是脚本语言使用,你需要按我跟你说的,读取绑定列表到脚本语言的 map 中去。 runtime 代码: https://github.com/821869798/unifantasy/tree/main/Assets/Scripts/UniFantasy/UniFan.Core/Runtime/UICore/Binding editor 代码: https://github.com/821869798/unifantasy/tree/main/Assets/Scripts/UniFantasy/UniFan.Core/Editor/UICore/Binding C#使用的示例代码: https://github.com/821869798/unifantasy/blob/main/Assets/Scripts/HotCode/Runtime/Tester/UILogin.cs |
8
sunny1688 OP |