Unity UI开发新体验:Puerts+TypeScript操作UGUI

Unity UI开发新体验:Puerts+TypeScript操作UGUI

【免费下载链接】puerts PUER(普洱) Typescript. Let's write your game in UE or Unity with TypeScript. 【免费下载链接】puerts 项目地址: https://gitcode.com/GitHub_Trending/pu/puerts

你还在为Unity UGUI开发中的C#冗长代码而烦恼吗?还在忍受频繁编译带来的效率损耗吗?本文将带你体验Puerts+TypeScript组合带来的UI开发革新,通过简洁的TypeScript代码高效操作UGUI,让界面开发像搭积木一样轻松。读完本文,你将掌握从环境搭建到事件绑定的完整流程,学会用TypeScript创建响应式UI界面。

环境准备与安装

Puerts提供多种安装方式,国内用户推荐使用OpenUPM或手动下载安装包。通过OpenUPM安装只需执行以下命令:

openupm add com.tencent.puerts.core

若网络受限,可从官方Releases下载最新版本,解压后将Puerts文件夹放入Unity项目的Assets目录。安装完成后,在Unity编辑器菜单中会出现PuerTS选项,用于生成TypeScript声明文件。

Puerts菜单

核心配置与初始化

TypeScript环境配置

首先需要创建tsconfig.json文件,配置TypeScript编译选项:

{
  "compilerOptions": {
    "target": "esnext",
    "module": "es2016",
    "sourceMap": true,
    "typeRoots": [
      "Assets/Puerts/Typing",
      "Assets/Gen/Typing"
    ],
    "outDir": "Assets/Resources/Scripts"
  }
}

通过PuerTS->Generate index.d.ts生成C# API的TypeScript声明文件,使UGUI组件获得类型提示。

JS环境初始化

在C#脚本中创建Puerts运行环境,建议使用TSLoader简化TypeScript加载流程:

using Puerts;
using UnityEngine;

public class UIEnv : MonoBehaviour
{
    private JsEnv jsEnv;

    void Start()
    {
        // 初始化JS环境,指定调试端口8080
        jsEnv = new JsEnv(new TSLoader(), 8080);
        // 执行UI入口模块
        jsEnv.ExecuteModule("ui/main.mjs");
    }

    void Update()
    {
        jsEnv.Tick(); // 驱动JS事件循环
    }

    void OnDestroy()
    {
        jsEnv.Dispose(); // 释放资源
    }
}

UGUI元素操作基础

获取UI组件

通过TypeScript可以直观地获取并操作UGUI元素,以下是获取Button和Text组件的示例:

import { GameObject } from 'UnityEngine';
import { Button } from 'UnityEngine.UI';
import { Text } from 'UnityEngine.UI';

// 获取UI元素
const btn = GameObject.Find('Canvas/Button').GetComponent(Button);
const text = GameObject.Find('Canvas/Text').GetComponent(Text);

// 修改文本内容
text.text = 'Hello Puerts!';

属性动态修改

使用TypeScript可以轻松实现UI属性的动态修改,如颜色、尺寸和位置:

// 修改按钮颜色
btn.image.color = new CS.UnityEngine.Color(1, 0.5, 0.5);

// 设置文本字体大小
text.fontSize = 24;

// 移动UI元素
const rect = text.rectTransform;
rect.anchoredPosition = new CS.UnityEngine.Vector2(100, 50);

事件绑定与响应

按钮点击事件

Puerts支持将TypeScript函数直接绑定到UGUI事件,实现交互逻辑:

// 绑定按钮点击事件
btn.onClick.AddListener(() => {
    text.text = 'Button Clicked!';
    // 按钮点击后的动画效果
    CS.UnityEngine.UI.ButtonExtension.PlayClickEffect(btn);
});

输入框文本变化

监听InputField的文本变化事件,实时响应用户输入:

import { InputField } from 'UnityEngine.UI';

const input = GameObject.Find('Canvas/InputField').GetComponent(InputField);

input.onValueChanged.AddListener((value: string) => {
    text.text = `Input: ${value}`;
});

高级应用:响应式UI

结合TypeScript的类和模块系统,可以构建模块化的响应式UI组件:

// ui/components/ScoreDisplay.ts
export class ScoreDisplay {
    private text: Text;
    private score = 0;

    constructor(textObj: GameObject) {
        this.text = textObj.GetComponent(Text);
        this.updateDisplay();
    }

    add(points: number) {
        this.score += points;
        this.updateDisplay();
    }

    private updateDisplay() {
        this.text.text = `Score: ${this.score}`;
        // 添加数字变化动画
        this.text.GetComponent(CS.UnityEngine.UI.TextAnimation).Play();
    }
}

// 在主模块中使用
import { ScoreDisplay } from './components/ScoreDisplay';

const scoreText = GameObject.Find('Canvas/ScoreText');
const scoreDisplay = new ScoreDisplay(scoreText);
scoreDisplay.add(100); // 增加分数并更新显示

调试与性能优化

VSCode调试配置

Puerts支持VSCode断点调试TypeScript代码,需在Unity中开启调试端口:

// 等待调试器连接(开发环境)
async void Start()
{
    jsEnv = new JsEnv(new TSLoader(), 8080);
    await jsEnv.WaitDebuggerAsync(); // 等待VSCode连接
    jsEnv.ExecuteModule("ui/main.mjs");
}

在VSCode中创建.vscode/launch.json配置:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Attach Puerts",
            "type": "node",
            "request": "attach",
            "port": 8080,
            "sourceMaps": true,
            "outFiles": ["${workspaceFolder}/Assets/Resources/Scripts/**/*.js"]
        }
    ]
}

性能优化建议

  1. 对象缓存:避免频繁调用GameObject.Find,缓存常用UI组件引用
  2. 批处理更新:UI属性修改集中进行,减少跨引擎调用开销
  3. 事件委托:复杂UI使用事件总线模式,避免多层嵌套回调

性能优化设置

工程实践与最佳实践

目录结构推荐

Assets/
├── Resources/
│   └── Scripts/
│       ├── ui/
│       │   ├── main.mjs
│       │   └── components/
│       └── utils/
└── Puerts/
    └── Typing/  // 类型声明文件

常见问题解决

  • DllNotFoundException:确保Puerts插件平台设置正确,参考FAQ
  • 类型提示缺失:重新生成TypeScript声明文件,检查tsconfig.json配置
  • 事件绑定失败:确认C#委托类型已通过JsEnv.UsingActionUsingFunc声明

总结与扩展

通过Puerts+TypeScript的组合,我们可以用更简洁的代码实现复杂的UI交互逻辑,享受TypeScript带来的类型安全和开发效率提升。这种开发模式特别适合快速迭代的UI原型开发和需要频繁调整的界面逻辑。

未来可以进一步探索:

  • 结合React/Vue思想构建声明式UI框架
  • 使用状态管理库(如MobX)管理复杂UI状态
  • 开发自定义UGUI组件的TypeScript装饰器

Puerts生态持续发展,更多功能可参考官方文档:

立即尝试Puerts+TypeScript开发Unity UI,体验前所未有的开发流畅度!

【免费下载链接】puerts PUER(普洱) Typescript. Let's write your game in UE or Unity with TypeScript. 【免费下载链接】puerts 项目地址: https://gitcode.com/GitHub_Trending/pu/puerts

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值