Tencent / puerts

PUER(普洱) Typescript. Let's write your game in UE or Unity with TypeScript.
Other
5.01k stars 699 forks source link

[UE] Bug: 使用继承引擎类的方式,ReceiveBeginPlay 获取不到初始化jsenv的数据。 #1758

Closed pheyahu closed 3 months ago

pheyahu commented 3 months ago

前置阅读 | Pre-reading

Puer的版本 | Puer Version

master

UE的版本 | UE Version

5.4.1

发生在哪个平台 | Platform

Editor(win)

错误信息 | Error Message

使用继承引擎类的方式,复写gamemode ReceiveBeginPlay方法,想获取之前初始化的数据,是 undefined. 求问如何处理这种情况。感觉是继承的方式重新创建了fjsenv。访问不了之前在gameinstance中初始化的fjsenv

问题重现 | Bug reproduce

使用继承引擎类的方式,复写gamemode ReceiveBeginPlay方法,想获取之前初始化的数据,是 undefined. 求问如何处理这种情况。

chexiongsheng commented 3 months ago

你概念上搞混了。 JsEnv是一个虚拟机,多个虚拟机间相互隔离,和你nodejs启动了多个进程一样。 继承引擎类功能会自己启动一个虚拟机,和你在gameinstance启动的虚拟机不是一个虚拟机。

pheyahu commented 3 months ago

有没有办法解决这种情况呢?能在游戏中只存在一个虚拟机么?在很多情况下是需要actor创建完成后通知脚本层做一些逻辑的。

chexiongsheng commented 3 months ago

有没有办法解决这种情况呢?能在游戏中只存在一个虚拟机么?在很多情况下是需要actor创建完成后通知脚本层做一些逻辑的。

什么叫解决?你不启动多个不就只有一个了吗? 你用node a.js启动一个进程,node b.js启动一个进程,然后问为啥a.js的变量在b.js那访问不了?你别启动两个,把逻辑都加载到一个进程,或者两个进程间通过ipc交流。

chexiongsheng commented 3 months ago

demo中gameinstance启动jsenv这是示例,不是必要的,正如helloworld示例程序不是让你在每个程序都打印一下helloworld。

继承引擎类功能也可以不开,不开就没有虚拟机。

chexiongsheng commented 3 months ago

仔细看文档最新的提交内容。

pheyahu commented 3 months ago

好的,我大概知道了,还以为必须要初始化一个虚拟机。感谢!