Call the engine API and project script

In the plugin a special script file (scene script) can be declared, the script and the script in the project (assets directory script) has the same environment, this script can call the engine API and other projects Script to achieve:

  • Traverse the nodes in the scene to get or change the data
  • Call the other scripts in the project to complete the job

Register the scene script

First in the package.json add scene-script field, the value of the field is a script file path, relative to the expansion package directory:

{
    "name": "my-plugin-name",
    "scene-script": "scene-walker.js"
}

The path will point to packages/foobar/scene-walker.js. Next, it is necessary to write a scene script.

Write the scene script

Scene-walker.js needs to be defined in such a way:

Module.exports = {
    'get-canvas-children': function (event) {
        Var canvas = cc.find ('Canvas');
        Editor.log ('children length:' + canvas.children.length);

        If (event.reply) {
            Event.reply (null, canvas.children.length);
        }
    }
};

Notice the scene script consists of one or more IPC message listening methods. After receiving the corresponding IPC message, the methods and properties that are declared in the engine and the user component script in the function body can be used.

Send a message from the extension package to the scene script

Next, in the main process and the rendering process of the extension package program, use the following interface to send a message to the scene-walker.js (assuming the extension package name is foobar):

Editor.Scene.callSceneScript ('foobar', 'get-canvas-children', function (err, length) {
    Console.log (`get-canvas-children callback: length - $ {length}`);
});

In order to get in the expansion package to the scene of the Canvas root node how many child nodes, of course, can also be used to scene nodes for more inquiries and operations.

When calling a message, callSceneScript accepts the same parameter input as the other IPC message sending interface, or specify more pass and timeout times. For more information, see IPC Workflow.

Note: because communication is based on the underlying IPC implementation of Electron, remember that the transmitted data cannot contain native objects, otherwise it can cause process crashes or memory explosion. It is recommended to only transfer pure JSON objects.

Reference modules and plugin scripts in scene scripts

In addition to getting a specific node in the scene script via cc.find and manipulating the node and mounted components, we can also refer to the non-component modules in the project, or access the plug-in scripts through global variables.

Reference module

//MyModule.js
Module.exports = {
    Init: function () {
        // do initialization work
    }
}

//scene-walker.js
Module.exports = {
    'Init-module': function (event) {
        Var myModule = cc.require ('MyModule');
        MyModule.init ();
    }
};

Note: to use the same module reference mechanism as the project script, you must use cc.require in the scene script.

Reference plugin script

Directly use window.globalVar to access the global variables and methods declared in the plugin script.

results matching ""

    No results matching ""