PuerTS(Unity)小白求救!

286 天前
 sunny1688

我是 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 的话并不支持这种方式,我有一些疑问:

  1. js 端只能用GameObject.Find去查找物体然后和 ts 脚本关联吗?因为无法直接用编辑器拖入的方式和代码完成绑定

  2. main.mjs 应该如何去派发各种逻辑的处理,比如有时候场景跳转了

  3. 还有其它的问题,暂时问不出来

请各位大佬指教,谢谢

1286 次点击
所在节点    程序员
9 条回复
dcoder
286 天前
用 Unity 就老实用 C#, 最好不要搞第三方的 JS/Lua 那种动态更新, 除非这个 JS/Lua 是你自己写的.
真的要用 JS, 就用 https://phaser.io/
ggvoking
286 天前
作为游戏行业摸爬滚打多年的老鸟回答一下你,首先如何做代码热更,更推荐 HybridCLR ,这个是趋势。C#开发效率可比什么 lua 、js 高多了,而且舒服很多。你的问题我大概回答一下。
1. 一般来说不会在脚本中大量 Find ,因为效率很低。都是会在 C#侧做个通用的 Binding 绑定组件,把需要代码调用 Object 和组件挂上去,然后在脚本语言中直接遍历这个 Bingding 中已经绑定 Object 列表,存入 map 中,之后直接调用
2. 没懂你的意思。场景跳转了,有 SceneManager 的 event api 可以使用。
ggvoking
286 天前

类似这种绑定功能的组件,然后脚本去遍历里面绑定的好的,存储到 name->value 的 map 中,之后就可以直接调用
sunny1688
286 天前
@ggvoking

非常感谢!我还有一些问题,

1 、C#的 `ObjectBingding.cs` 那是如何与 js 相关联的呢? js 端是不是也要先 Find 某个物体,然后 AddComponent<ObjectBingding>() 呀?

2 、每个脚本需要的物体都不一样(有的要 Button 、有的要 GameObject ,有的要 AudioClip ),那在编辑器拖入物体的时候有这么多类型吗?

3 、能否提供一下 ObjectBingding.cs ,非常感谢
ggvoking
286 天前
@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
sunny1688
286 天前
@ggvoking 感谢感谢,我先研究一下
ggvoking
286 天前
@sunny1688 #6 老铁,解答这么多,来个 github star
sunny1688
286 天前
sunny1688
286 天前

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/961098

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX