PuerTS(Unity)小白求救! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
sunny1688

PuerTS(Unity)小白求救!

  •  
  •   sunny1688 2023 年 7 月 31 日 2005 次点击
    这是一个创建于 998 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我是 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. 还有其它的问题,暂时问不出来

    请各位大佬指教,谢谢

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

    类似这种绑定功能的组件,然后脚本去遍历里面绑定的好的,存储到 name->value 的 map 中,之后就可以直接调用
    sunny1688
        4
    sunny1688  
    OP
       2023 年 7 月 31 日
    @ggvoking

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

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

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

    3 、能否提供一下 ObjectBingding.cs ,非常感谢
    ggvoking
        5
    ggvoking  
       2023 年 7 月 31 日
    @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
        6
    sunny1688  
    OP
       2023 年 7 月 31 日
    @ggvoking 感谢感谢,我先研究一下
    ggvoking
        7
    ggvoking  
       2023 年 7 月 31 日
    @sunny1688 #6 老铁,解答这么多,来个 github star
    sunny1688
        8
    sunny1688  
    OP
       2023 年 7 月 31 日
    sunny1688
        9
    sunny1688  
    OP
       2023 年 7 月 31 日
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2816 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 11:45 PVG 19:45 LAX 04:45 JFK 07:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86