Cocos Creator:调用引擎 API 和项目脚本

推荐:将NSDT场景编辑器及加入你的3D工具链
3D工具集:NSDT简石数字孪生

调用引擎 API 和项目脚本

在扩展中,您可以定义一个特殊的场景脚本文件,该文件将与项目目录中的脚本位于同一运行时中,具有相同的运行时环境。assets\

在场景脚本中,您可以调用引擎和其他项目脚本,使用此功能,我们可以API

  • 查询并遍历场景中的节点以获取或修改节点数据
  • 调用与节点上的引擎组件相关的函数以完成作业

注册场景脚本

首先,将一个字段添加到 的属性中,其值是相对于扩展包目录的脚本文件的路径。例:scenecontributionspackage.json

{
    "contributions": {
        "scene": {
            "script": "./dist/scene.js"
        }
    }
}

场景脚本模板

在目录中创建一个 new 并编写以下代码。scene.tssrc

export function load() {};
export function unload() {};
export const methods = { };

load- 加载模块时触发的函数

unload- 卸载模块时触发的函数

methods- 模块内部定义的可用于响应外部消息的方法

调用引擎接口

接下来,我们将演示场景脚本如何通过旋转主摄像机来调用引擎 API。

为了调用引擎 API,我们需要在开头添加引擎脚本的搜索路径并编写相应的代码,最终看起来像这样scene.ts

import { join } from 'path';
module.paths.push(join(Editor.App.path, 'node_modules'));

export function load() {};

export function unload() {};

export const methods = {
    rotateCamera() {
        const { director } = require('cc');
        let mainCamera = director.getScene().getChildByName("Main Camera");
        if(mainCamera){
            let euler = mainCamera.eulerAngles;
            euler.y += 10;
            mainCamera.setRotationFromEuler(euler);
            return true;
        }
        return false;
    },
};

在上面的代码中,我们定义了一个方法,该方法在每次执行时都围绕轴旋转主相机度数。rotateCamera10Y

在其他扩展脚本中,我们可以使用以下代码调用该函数。rotateCamera

const options: ExecuteSceneScriptMethodOptions = {
    name: packageJSON.name,
    method: 'rotateCamera',
    args: []
};

// result: {}
const result = await Editor.Message.request('scene', 'execute-scene-script', options);

的属性定义如下:ExecuteSceneScriptMethodOptions

  • name - 所在扩展的包名称,如果它在此扩展中,则可以使用scene.tspackageJSON.name
  • 方法:中定义的方法scene.ts
  • 参数:参数,可选

由于扩展之间的通信基于Electron的底层跨进程IPC机制,因此传输的数据将被序列化为JSON。因此,传输的数据不得包含本机对象,否则可能会导致进程崩溃或内存峰值。建议只传输纯对象,比如上面代码中的参数和场景脚本方法的返回值。JSONoptions.args

3D建模学习工作室 翻译整理,转载请注明出处

上一篇:Cocos Creator:自定义消息 (mvrlink.com)

下一篇:Cocos Creator:扩展“资源”面板 (mvrlink.com)

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号