Bootstrap

在VS Code中基于TypeScript使用Vue.js搭建Babylon.js的开发环境

搭建思路

  1. 首先,我需要考虑如何创建一个Vue项目并集成TypeScript。现在Vue 3默认支持TypeScript了,第一步是用Vue CLI创建一个新项目,选择TypeScript作为语言。然后,安装Babylon.js的核心包,可能还需要一些额外的库,比如babylonjs-loaders,用于加载模型之类的资源。
  2. 接下来,需要配置TypeScript,确保它能识别Babylon.js的类型定义。Babylon.js本身是用TypeScript写的,所以它的npm包已经包含了类型声明文件,不需要额外安装@types/babylonjs。不过需要确认用户安装的是正确版本的Babylon.js,比如最新的稳定版。
  3. 然后,在Vue组件中,如何初始化Babylon.js的场景。通常Babylon.js需要一个canvas元素来渲染,所以在Vue的模板里需要添加一个canvas元素,并设置ref以便在组件中访问。然后在mounted生命周期钩子中创建引擎和场景,因为这时DOM已经加载完成,可以获取到canvas元素。
  4. 还需要考虑WebGL的兼容性,比如在组件销毁时销毁引擎,防止内存泄漏。此外,处理窗口大小变化时,调整引擎的大小,这样场景可以自适应窗口变化。
  5. 另外,需要在开发过程中调试,所以VS Code的配置,比如推荐的插件,比如Volar、ESLint、Babylon.js Snippets 等,这些插件能提升开发体验。还有可能需要配置调试启动文件,以便在VS Code中直接调试应用。
  6. 还有,项目结构方面,最好将Babylon.js相关的代码放在单独的组件中,或者作为工具类封装,以便复用。比如创建一个SceneComponent.vue,专门处理3D场景的初始化和渲染。
  7. 测试方面,需要运行dev服务器,检查是否有错误,确保场景正确渲染。如果遇到问题,比如无法找到模块,可能需要检查TypeScript的配置,确保模块解析正确,或者Babylon.js的导入方式是否正确,比如使用import * as BABYLON from 'babylonjs'或者按需导入具体模块。
  8. 还有可能遇到构建问题,比如生产环境下Babylon.js的某些功能需要额外配置,比如Webpack的别名设置,或者需要处理静态资源路径。不过Vue CLI已经处理了大部分配置,可能不需要太多调整。

        总之,步骤大概是:创建Vue+TS项目,安装Babylon.js依赖,配置TypeScript,编写Vue组件初始化Babylon场景,处理生命周期和窗口调整,安装VS Code插件,配置调试。最后测试运行,确保一切正常。

具体步骤:

1. 环境准备

安装 Node.js
安装 VS Code
  • 下载 VS Code 并安装

  • 推荐插件:

    • Volar:是 Vue 3 开发中不可或缺的工具,尤其是对于使用 TypeScript 的项目。它提供了强大的类型支持、代码补全和错误检查功能,能够显著提升开发效率和代码质量。

    • ESLint:是 VS Code 开发中必不可少的工具,尤其适合以下场景:

      1. 需要统一团队代码风格。

      2. 希望实时发现代码潜在错误。

      3. 通过合理配置 ESLint + Prettier,可以大幅提升代码可读性、减少低级错误,并让代码审查更加高效。

      4. 使用 TypeScript、Vue、React 等现代前端技术栈。

    • Babylon.js Snippets (可选):能显著提升 Babylon.js 开发效率,尤其适合以下场景:

      1. 快速搭建 3D 场景原型。

      2. 减少 API 查阅时间。

      3. 统一团队代码风格(通过共享片段)。

                如果你是 Babylon.js 开发者,强烈推荐安装此插件,并熟悉其常用代码片段的关键字!

2. 创建 Vue 3 + TypeScript 项目

# 使用 Vue CLI 创建项目
npm install -g @vue/cli
vue create my-babylon-app

# 选择配置:
# - TypeScript
# - Vue 3.x
# - 其他按需勾选(如 ESLint)

cd my-babylon-app

 3. 安装 Babylon.js 依赖

npm install babylonjs @babylonjs/core @babylonjs/inspector
# 或使用完整包
npm install babylonjs --save

4. 配置 TypeScript 

 在 tsconfig.json 中添加 Babylon.js 类型支持:

{
  "compilerOptions": {
    "types": ["babylonjs"],
    "moduleResolution": "node",
    "esModuleInterop": true
  }
}

5. 创建 Vue 组件

        新建 src/components/BabylonScene.vue 

<template>
  <canvas ref="canvas" class="full-screen"></canvas>
</template>

<script lang="ts">
import { defineComponent, onMounted, onUnmounted, ref } from 'vue';
import { Engine, Scene, ArcRotateCamera, Vector3, HemisphericLight, MeshBuilder } from '@babylonjs/core';

export default defineComponent({
  name: 'BabylonScene',
  setup() {
    const canvas = ref<HTMLCanvasElement | null>(null);

    let engine: Engine;
    let scene: Scene;

    const createScene = () => {
      if (!canvas.value) return;

      // 初始化引擎和场景
      engine = new Engine(canvas.value, true);
      scene = new Scene(engine);

      // 添加相机
      const camera = new ArcRotateCamera(
        'camera',
        Math.PI / 2,
        Math.PI / 4,
        10,
        Vector3.Zero(),
        scene
      );
      camera.attachControl(canvas.value, true);

      // 添加光源
      new HemisphericLight('light', new Vector3(1, 1, 0), scene);

      // 添加一个立方体
      MeshBuilder.CreateBox('box', {}, scene);

      // 渲染循环
      engine.runRenderLoop(() => {
        scene.render();
      });

      // 窗口大小自适应
      window.addEventListener('resize', () => {
        engine.resize();
      });
    };

    onMounted(createScene);
    onUnmounted(() => {
      engine.dispose(); // 清理资源
    });

    return { canvas };
  },
});
</script>

<style scoped>
.full-screen {
  width: 100%;
  height: 100vh;
}
</style>

 6. 在 App.vue 中使用组件

<template>
  <BabylonScene />
</template>

<script lang="ts">
import { defineComponent } from 'vue';
import BabylonScene from './components/BabylonScene.vue';

export default defineComponent({
  components: {
    BabylonScene,
  },
});
</script>

 7. 运行开发服务器

npm run serve

        访问 http://localhost:8080 查看 3D 场景。 

8. 调试配置 (VS Code) 

        创建 .vscode/launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "chrome",
      "request": "launch",
      "name": "Launch Chrome",
      "url": "http://localhost:8080",
      "webRoot": "${workspaceFolder}/src"
    }
  ]
}

9. 构建生产版本 

npm run build

常见问题解决 

  1. 类型错误:确保 @babylonjs/core 版本与 TypeScript 兼容。

  2. Canvas 未正确绑定:通过 ref 确保 DOM 加载完成后再初始化 Babylon。

  3. 性能优化:使用 engine.setHardwareScalingLevel(0.5) 适配高分辨率设备。

;