55 lines
1.3 KiB
TypeScript
55 lines
1.3 KiB
TypeScript
|
import { _decorator, Component, Node, MeshRenderer, instantiate, CCObject, Prefab, find } from 'cc';
|
||
|
const { ccclass, property } = _decorator;
|
||
|
|
||
|
@ccclass('generate_white_box')
|
||
|
export class generate_white_box extends Component {
|
||
|
@property(Node)
|
||
|
targetRoot: Node | undefined
|
||
|
|
||
|
@property(Node)
|
||
|
temp: Node | undefined
|
||
|
|
||
|
@property
|
||
|
get generate () {
|
||
|
return false
|
||
|
}
|
||
|
set generate (v) {
|
||
|
this.doGenerate()
|
||
|
}
|
||
|
|
||
|
|
||
|
doGenerate () {
|
||
|
if (!this.temp || !this.targetRoot) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
let root = find('root', this.node)
|
||
|
if (!root) {
|
||
|
root = new Node('root')
|
||
|
root.parent = this.node
|
||
|
}
|
||
|
root.removeAllChildren();
|
||
|
|
||
|
let mrs = this.targetRoot.getComponentsInChildren(MeshRenderer);
|
||
|
mrs.forEach(mr => {
|
||
|
if (!mr.model) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
let n = instantiate(this.temp)! as any as Node;
|
||
|
n.name = mr.node.name
|
||
|
|
||
|
let bounds = mr.model!.worldBounds
|
||
|
n.position = bounds.center;
|
||
|
n.setScale(bounds.halfExtents.x * 2, bounds.halfExtents.y * 2, bounds.halfExtents.z * 2)
|
||
|
|
||
|
// n.hideFlags |= CCObject.Flags.DontSave;
|
||
|
n.parent = root;
|
||
|
})
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|