Merge remote-tracking branch 'origin/master'

This commit is contained in:
2025-07-22 18:18:28 +08:00
6 changed files with 110 additions and 2 deletions

View File

@@ -1 +1 @@
{"DebugView":{"DebugView":{"internalLink":{"count":1,"lastUpdated":1749700323505}}},"XXXXX之后点击回车。注XXXXX为模拟器端口号请参考打开的模拟器问题诊断内展示端口号或MuMu多开器12内的adb端口后再输入。":{"XXXXX之后点击回车。注XXXXX为模拟器端口号请参考打开的模拟器问题诊断内展示端口号或MuMu多开器12内的adb端口后再输入。":{"currentFile":{"count":1,"lastUpdated":1750142832492}}},"\\Users\\loujiajie\\desktop\\log.txt":{"\\Users\\loujiajie\\desktop\\log.txt":{"currentFile":{"count":1,"lastUpdated":1750143148509}}},"相关线程安全变量:":{"相关线程安全变量:":{"currentFile":{"count":1,"lastUpdated":1750853529118}}},"UBodySetup":{"UBodySetup":{"currentFile":{"count":1,"lastUpdated":1750994347070}}},"Android常用命令":{"Android常用命令":{"internalLink":{"count":1,"lastUpdated":1751942017728}}}}
{"相关线程安全变量:":{"相关线程安全变量:":{"currentFile":{"count":1,"lastUpdated":1750853529118}}},"UBodySetup":{"UBodySetup":{"currentFile":{"count":1,"lastUpdated":1750994347070}}},"Android常用命令":{"Android常用命令":{"internalLink":{"count":1,"lastUpdated":1751942017728}}},"issues":{"issues":{"currentFile":{"count":1,"lastUpdated":1752993735430}}}}

View File

@@ -0,0 +1,96 @@
---
title: 未命名
date: 2025-07-20 11:39:10
excerpt:
tags:
rating: ⭐
---
# 相关资料
- 官方文档:https://puerts.github.io/docs/puerts/unreal/manual
- 调试指南:https://puerts.github.io/docs/puerts/unreal/vscode_debug
- 脚本调用引擎API:https://puerts.github.io/docs/puerts/unreal/script_call_uclass
- 更多用法可以参考Puerts Demo https://puerts.github.io/docs/puerts/unreal/demos
- 尤其推荐***QuickStart.ts***:https://github.com/chexiongsheng/puerts_unreal_demo/blob/master/TypeScript/QuickStart.ts
- FAQ https://github.com/Tencent/puerts/blob/master/doc/unreal/zhcn/faq.md
- 哪里可以找到答案:
- https://github.com/Tencent/puerts/issues
- https://github.com/Tencent/puerts/discussions
# QuickStart
## Setup
1. 安装Nodejs v22.17.1。
2. 通过安装全局typeScrpit模块。
```bash
npm install -g typescript
```
3. 安装VSCode插件
![[Puerts_VSCode_TS.png]]
## Puerts Project Setup(跳过)
1. 下载Puerts插件:https://github.com/Tencent/puerts/releases
1. 可选版本有Nodejs一般情况下使用这个可使用NPM添加其他的库、V8纯净环境以及Quickjs包体小适合手机
2. 编译插件。
3. 进入插件目录`Plugins\Puerts`执行`node enable_puerts_module.js`
4. 在项目根目录下执行`npm init`并且添加。之后重新生成一次VS解决方案并且执行`npm install`。其中Mocha是必须安装的否则会出现找到编译后的js文件。
```json
"dependencies": {
"@types/mocha": "^10.0.10"
}
```
5. 打开工程,在引擎中点击 ue.d.ts 该功能用于生成项目、引擎符号信息生成之后就能找到相关符号了。如果想在ts文件中调用新增的蓝图&C++方法也需要点击ue.d.ts才能找到对应符号。可以阅读该文了解详细信息 https://puerts.github.io/docs/puerts/unreal/script_call_uclass
![[Puerts_UE_D_TS.png]]
6. 在`ProjectSettings - Packaging - Additional Not-Asset Directories to Package`中添加`Content/javaScript`。
# 调试方法
具体可以参考:
- Puerts Inspector指南在UE4和Unity里调试Javascript:https://zhuanlan.zhihu.com/p/359598262
调试器的选择有:
1. 在Chrome输入`devtools://devtools/bundled/inspector.html?v8only=true&ws=127.0.0.1:8080`。
2. 在Chrome输入`chrome://inspect`点击Configure...输入IP&Port后点击Inspect。
3. 使用VSCode进行调试。
1. 在`Launch Program`处点击`add Configuration`。
2. 选择`Node.js: Attach`。
3. 设置端口。
4. 点击绿色箭头即可调试。
***以下有2种添加调试入口的方式一般选择第二种勾选后启动游戏会处于冻结状态需要调试器VSCode、Chrome连上才能继续运行。如果没有设置好调试器可以打开Config\DefaultPuerts.ini把WaitDebugger改为False来跳过***
**添加调试入口方式1:自创建虚拟机模式下调试配置**
创建FJsEnv传入调试端口
```c++
//8080是调试端口 GameScript = MakeShared<puerts::FJsEnv>(std::make_unique<puerts::DefaultJSModuleLoader>(TEXT("JavaScript")), std::make_shared<puerts::FDefaultLogger>(), 8080);
```
阻塞等待调试器链接
```c++
GameScript = MakeShared<puerts::FJsEnv>(std::make_unique<puerts::DefaultJSModuleLoader>(TEXT("JavaScript")), std::make_shared<puerts::FDefaultLogger>(), 8080);
GameScript->WaitDebugger();
GameScript->Start("QuickStart", Arguments);
```
**添加调试入口方式2自动绑定模式下调试配置**
1. 菜单上选择`Edit->ProjectSettings`,打开设置页面后在`Plugins -> Puerts Setting`页面中开启调试以及设置端口。
# 开发方法
## 继承引擎类功能
类似c++的继承式开发方法。
https://puerts.github.io/docs/puerts/unreal/uclass_extends
## 蓝图mixin
一般用于给蓝图添加一些TS逻辑。
https://puerts.github.io/docs/puerts/unreal/mixin
## 直接运行脚本
通过在c++对应类中GameMode、GameInstance等调用执行脚本的函数来调用指定名称的脚本。
```c++
GameScript = MakeShared<puerts::FJsEnv>(std::make_unique<puerts::DefaultJSModuleLoader>(TEXT("JavaScript")), std::make_shared<puerts::FDefaultLogger>(), 8080);
GameScript->Start("QuickStart", Arguments);
```
可以参考:https://github.com/chexiongsheng/puerts_unreal_demo/blob/master/TypeScript/QuickStart.ts·
# NEPY的问题
NEPY插件有好几个痛点
1. 通过自动生成C++代码进行符号导出所以每次使用脚本调用新的引擎类都会产生c++编译我支援的项目中每次都会产生1000+的编译任务,相当影响团队的开发效率。
2. Python是弱类型语言编码时容易写出bug或者卡壳。
3. NEPY针对蓝图的支持比较糟糕Puerts提供了mix蓝图方案。
4. NEPY的资料太少遇到问题大概率只能自己解决。Puerts的资料相对较多有bug或者问题都可以在github向作者提问。

View File

@@ -50,7 +50,7 @@ tsc xxx.ts
1. 将对应版本的Puerts放入插件目录。比如puerts_nodejs的`puerts_nodejs\puerts_nodejs\Puerts`直接放到插件目录即可。
2. 编译插件。
3. 进入插件目录`Plugins\Puerts`执行`node enable_puerts_module.js`
4. 在项目根目录下执行`npm init`并且添加。之后重新生成一次VS解决方案并且执行`npm install`
4. 在项目根目录下执行`npm init`并且添加。之后重新生成一次VS解决方案并且执行`npm install`其中Mocha是必须安装的否则会出现找到编译后的js文件。
```json
"dependencies": {
"@types/react": "^15.6.6",

View File

@@ -294,6 +294,12 @@ docker run -d --restart=always --privileged=true --name=gitea \
-p 8888:3000 \
-v /home/gitea:/data \
gitea/gitea:latest
docker run -d --restart=always --privileged=true --name=gitea \
-p 822:22 \
-p 8888:3000 \
-v /root/docker/gitea:/data \
gitea/gitea:latest
```
https://blog.csdn.net/weixin_44415928/article/details/131700249

BIN
08-Assets/Images/ImageBag/Puerts/Puerts_UE_D_TS.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
08-Assets/Images/ImageBag/Puerts/Puerts_VSCode_TS.png (Stored with Git LFS) Normal file

Binary file not shown.