我只想动态生成图中红框的一个挂点,这个功能能实现吗?

image

我自己来回答吧!欢迎各位继续完善。
image

/**

 * 保留特定的挂点节点。

 * @param skeleton - 要操作的 Spine Skeleton 组件。

 * @param attachmentsToKeep - 要保留的挂点名称数组。

 */

public static preserveSpecificAttachments(skeleton: sp.Skeleton, attachmentsToKeep: string | string[]): cc.Node[] {

    if (typeof attachmentsToKeep === 'string') {

        attachmentsToKeep = [attachmentsToKeep];

    }

    let attachUtil = skeleton["attachUtil"];

    let retainedNodes: cc.Node[] = [];

    if (!skeleton || !attachUtil) {

        console.error("Spine 组件或 attachUtil 不可用");

        return retainedNodes;

    }

    // 动态生成所有挂点

    attachUtil.generateAllAttachedNodes();

    // 获取所有生成的挂点节点数组

    let attachedNodeArray = attachUtil._attachedNodeArray;

    // 删除除了特定挂点之外的所有节点

    attachedNodeArray.forEach((node: cc.Node) => {

        // 获取不含'ATTACHED_NODE:'前缀的节点名称

        let nodeName = node.name.replace('ATTACHED_NODE:', '');

        // 如果节点名称不在保留列表中,则销毁该节点

        if (attachmentsToKeep.includes(nodeName)) {

            node.parent = skeleton.node;

            retainedNodes.push(node);

        } else {

            node.destroy();

        }

    })

    //  不可删除,必须保留。具体原因自测

    // let attachedRootNode = sk.attachUtil._attachedRootNode

    // attachedRootNode.destroy();

    return retainedNodes;

}