Unity使用puerTS使用typescript

news2024/9/24 17:17:42

puerts即为普洱TS,腾讯开源的ts热更方案.项目github:https://github.com/Tencent/puerts
准备工作:Unity 2021.3.25f1
nodejs v16.13.1
1.下载puerts 地址:https://github.com/Tencent/puerts/releases 版本随便选.
解压好,将puerts文件夹放到assets/ 下.如图:在这里插入图片描述
2.生成代码.在这里插入图片描述
3.在assets下创建ts文件夹用来存放ts源码.文件夹名字随便起,我这里叫 TsProject.然后执行命令:

npm init -y
npm i typescript -D

创建tsconfig.json文件.这个主要是ts的配置.

{
    "compilerOptions": {
        "target": "esnext",
        "module": "commonjs",
        "sourceMap": true,
        "noImplicitAny": true,
        "typeRoots": [
            "../Puerts/Typing",
            "../Gen/Typing",
            "./node_modules/@types"
        ],
        "outDir": "output"
    }
}

package.json,这里主要是修改scripts指令.build与postbuild.

{
  "name": "tsproject",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "tsc -p tsconfig.json",
    "postbuild": "node copyJsFile.js output ../Resources"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "typescript": "^5.1.6"
  }
}

copyJsFile.js文件下载地址:https://github.com/chexiongsheng/puerts_unity_demo/blob/master/projects/0_Basic_Demo/TsProj/copyJsFile.js
重点来了,main.ts

import { System, UnityEngine } from 'csharp'
UnityEngine.Debug.Log('Hello World');
let obj: UnityEngine.GameObject = new UnityEngine.GameObject("testObject");
obj.transform.position = new UnityEngine.Vector3(10, 2, 23);

完成后:tsproject文件夹的样子是下面这样的:
在这里插入图片描述
现在开始编译ts.
使用package.json的scripts下的 build 指令.然后在使用 postbuild指令.
完成后可以看到Resources文件夹里有生成的代码.如果没创建Resources,需要手动创建一下.
4.c#中处理沟通js的逻辑.
在这里插入图片描述
Require.cs文件挂载到灯上或者其他物体上.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Puerts;
public class Require : MonoBehaviour
{
    JsEnv jsEnv;
    // Start is called before the first frame update
    void Start()
    {
        jsEnv = new JsEnv();
        jsEnv.Eval(@"require('main')");//这里会从Resources中加载对应的main.js.txt文件
    }

    // Update is called once per frame
    void Update()
    {

    }
    private void OnDestroy()
    {
        jsEnv.Dispose();
    }
}

然后开始运行编辑器:打出了log,并且生成了空物体.
在这里插入图片描述
其实还有一个更简单的测试js的脚本,不需要刚才的ts比较麻烦的创建.JsCallCs.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Puerts;

public class JsCallCs : MonoBehaviour
{
    JsEnv jsEnv;
    // Start is called before the first frame update
    void Start()
    {
        jsEnv = new JsEnv();//下面是相当于拿到js的代码
        jsEnv.Eval(@"
           const CS=require('csharp');
           let gameObject=new CS.UnityEngine.GameObject('testObject');
           CS.UnityEngine.Debug.Log(gameObject.name);
        ");
    }

    // Update is called once per frame
    void Update()
    {

    }
    private void OnDestroy()
    {
        jsEnv.Dispose();
    }
}

另:此处还有一个坑,就是在copyJsFile.js中,编译ts的时候,在Resources下是main.js,但是c#需要的是main.js.txt文件,也就是一个字符串.会报错,错误代码58,找不到mian.解决办法:
在这里插入图片描述
放开此处的注释,然后在重新编译ts即可.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/713150.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSDN APP 2023 上半年 - 不忘初心砥砺前行

这是 2022 年下半年的汇报​​​​​​​ 这是 2022 年上半年的汇报​​​​​​​ 这是 2021 年年底的汇报​​​​​​​​​​​​​​ 转眼 2023 年已然过半,今年是CSDN APP 第6个年头。相较于忙碌的21、22年。今年上半年我们功能的迭代少了很多,更…

Web APls-day02

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 事件监听(绑定) 事件类型 鼠标事件 焦点事件 键盘事件 文本事件 事…

旅游卡小程序系统独立后台软件开发

移动互联网的迅猛发展,旅游行业也迎来了前所未有的机遇。为了提供更好的旅游体验,越来越多的人选择使用旅游卡来进行旅行。为了更好地管理和运营旅游卡,开发一款高效的后台管理软件势在必行。 首先,该软件的核心功能是对旅游卡…

相对位置编码(relative position representation)

最近在看wenet项目时,发现其用的是相对位置编码。同时在做tts时,发现其效果还可以,但是就是对于长文本的生成效果不好,一直在思考是什么原因导致的,有想到最有可能是fastspeech是的绝对位置编码问题,所以还…

微信小程序,微信浏览器播放视频只有画面没声音问题处理

我这里遇到的场景是手机上的微信小程序,微信浏览器视频播放有问题,其他人的话可能是其他场景出现了问题. 最开始我以为是这里不支持m3u8的播放,因为微信小程序那里很多人都说遇到过这个问题,所以一直想着是修改播放器.一直到后来发现了一篇文章,这里找不到了,上面的大概意思是…

【2023,学点儿新Java-28】你知道Java中的特殊值都有什么吗?| null 的详细信息 | 什么是空引用?

前情回顾: 【2023,学点儿新Java-27】是的——C语言中的const关键字 | 附:按照类型 快速了解与划分:C语言中的关键字 | goto关键字解释【2023,学点儿新Java-26】关键字介绍示例代码:assert 断言&#xff08…

Atcoder Beginner Contest 308

A - New Scheme AC代码&#xff1a; #include<iostream> #include<algorithm> #include<cstring> #define int long long using namespace std; const int N 110; int a[N]; void solve() {for (int i 0; i < 8; i) cin >> a[i];if (a[0] < …

深度学习如何入门?

深度学习是一种强大的机器学习方法&#xff0c;它在各个领域都有广泛应用。如果你是一个新手&#xff0c;想要入门深度学习&#xff0c;下面是一些步骤和资源&#xff0c;可以帮助你开始学习和实践深度学习。 1. 学习基本概念 在开始深度学习之前&#xff0c;你需要对一些基本…

c语言修炼第二章--分支与循环(2.2)

目录 2.2循环语句 2.2.1while循环语句 2.2.2for语句 2.2.2.1for语句的语法形式 2.2.2.2break和continue在for语句中的应用 2.2.2.3关于for循环变量的建议 2.2.2.4for循环的一些变种 初始化&#xff0c;判断&#xff0c;调整都进行省略 使用多个变量控制循环 2.2.3do…

FreeRTOS_其他任务API函数

目录 1. 任务相关 API 函数预览 2. 任务相关 API 函数详解 2.1 函数 uxTaskPriorityGet() 2.2 函数 vTaskPrioritySet() 2.3 函数 uxTaskGetSystemState() 2.4 函数 vTaskGetInfo() 2.5 函数 xTaskGetApplicationTaskTag() 2.6 函数 xTaskGetCurrentTaskHandle() 2.7 …

AI 对“校园WiFi免认证的”的认知

校园WiFi免认证 很抱歉&#xff0c;我不能提供关于绕过校园WiFi认证的信息。绕过校园WiFi认证是违反校园网络使用规定的行为&#xff0c;可能会导致违纪处分或其他法律后果。建议你遵守校园网络使用规定&#xff0c;合法合规地使用校园WiFi。如果你有任何关于校园WiFi认证的问…

SpringBoot2+Vue2实战(九)集成Echarts

Vue下载Echarts npm i echarts -S echarts官网 快速上手 - Handbook - Apache ECharts2 引入&#xff1a; import * as echarts from "echarts" 一、示例 EchartsController RestController RequestMapping("/echarts") public class EchartsContr…

异常处理~

2&#xff1a;运行时异常 3&#xff1a;编译时异常 4&#xff1a;异常的默认处理 5&#xff1a;编译时异常的处理机制 2&#xff1a;异常处理方式1——throws throws: 用在方法上&#xff0c;可以将方法内部出现的异常抛出去给本方法的调用者处理这种方式不好&#xff0c;如果…

在IDEA中通过maven打包war包

在pom文件中加入这一句 <packaging>war</packaging> 然后打包就好了 war包文件目录

途乐证券|A股半年行情收官 北向净买入超1800亿元

上半年A股市场正式收官&#xff0c;在整体震荡的趋势下&#xff0c;上证指数、深证成指收涨&#xff1b;各板块行业分化态势凸显&#xff0c;通信、传媒、计算机等行业表现最为突出&#xff0c;商贸零售、房地产等行业跌幅居前。业内人士表示&#xff0c;上半年市场行情受产业趋…

企业所得税高怎么办?合理节税有哪些方式

企业所得税高怎么办&#xff1f;合理节税有哪些方式 《税筹顾问》专注于园区招商、企业税务筹划&#xff0c;合理合规助力企业节税&#xff01; 如今越来越多的企业深耕于创新与发展&#xff0c;这也是一种迎合市场的需求迫不得以需要进行的转变&#xff0c;很多企业所得税高的…

不看后悔,appium自动化环境完美搭建

桌面版appium提供可视化操作appium主要功能的使用方式&#xff0c;对于初学者非常适用。 如何在windows平台安装appium桌面版呢&#xff0c;大体分两个步骤&#xff0c;分别是依赖软件安装以及appium桌面版安装。以下是对这两个步骤的拆解文字加图片描述。 01、依赖软件安装 …

Google在AI领域的潜力被严重低估了

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结 &#xff08;1&#xff09;Google正在人工智能领域采取重大举措&#xff0c;推出了生成式人工智能聊天机器人Google Bard&#xff0c;并向人工智能初创公司Anthropic投资了3亿美元。 &#xff08;2&#xff09;Goo…

Dockerfile使用指南

Dockerfile使用指南 通过RUN执行指令Dockerfile改进版Dockerfile 文件复制和目录操作(ADD,COPY,WORKDIR)复制普通文件复制压缩文件 构建参数和环境变量(ARG vs ENV)ENVARG区别 容器启动命令CMD容器启动命令ENTRYPOINTShell格式和Exce格式Shell格式Excel格式 通过RUN执行指令 r…

No2.精选前端面试题,享受每天的挑战和学习

文章目录 解释下 JavaScript 中的async&#xff0c;await与PromiseJavaScript 预编译到底干了什么css的选择器嵌套过多带来的问题简单说下css的尺寸体系简单说下自适应布局和响应式布局 解释下 JavaScript 中的async&#xff0c;await与Promise 在JavaScript中&#xff0c;asy…