[0]Laya3中怎么访问预制体内部的节点

 我开发了一个预制体,命名为Title,其结构如图,只有2个节点
 
 
1.png

 
 
然后,我在Scene中使用这个Title预制体,Scene的结构如图
 
 
2.png


 
现在我打算在Scene中用代码访问Title预制体中的Label节点。
 
 
我想请问下,官方有什么办法直接访问预制体中的节点吗?
 
 
我能想到的方案就是,在Runtime或者Script中,通过遍历查找节点,方案代码如下:
function getComponentByName(node: Laya.Node, name: string): Laya.Node {
const children: Laya.Node = (node as any)._children;
for(let i = 0; i < children.length; i++) {
if (children.name === name) {
return children;
}
const found = getComponentByName(children, name);
if (found) {
return found;
}
}
return null;
}
export class Runtime extends RuntimeBase {
onAwake(): void {
const node = getComponentByName(this, 'label') as Laya.Label;
node.text = 'Runtime';
console.log(node);
}
}
export class Script extends Laya.Script {
onAwake(): void {
const node = getComponentByName(this.owner, 'label') as Laya.Label;
node.text = 'Script';
console.log(node);
}
}
[i][i] [/i][/i]
麻烦解答一下,感谢!!
已邀请:

Laya_Fred

赞同来自:

您好,除了自己封装遍历方法来查找物体之外,您也可以使用runtime的方式来管理预制体内的节点,可以参考这个文档 UI继承类,在场景中可以拿到预制体的脚本或者runtime来直接获取到预制体内的节点内容;或者您也可以通过在场景中加载脚本的方式,声明脚本的可挂载属性也就是使用自定义的脚本组件(ECS组件系统),这样可以在场景内拖拽预制体内的属性来获取到,可以参考这个文档 自定义脚本组件

ystrdy

赞同来自:

总算想通了!!!特意来回复以下,记录一下方案
 
在预制体中,如下操作
 
第一步,给预制体中需要访问的元素定义变量
 
1.png


第二步,给预制体添加Runtime

2.png

在场景中使用时,给预制体定义变量

3.png

 
当需要访问预制体中的元素时,分两种情况
 
一、在Runtime中访问

4.png

 
二、在Script中访问

5.png

 
在Script中访问需要注意的一点是,要记得声明owner的类型
 

要回复问题请先

商务合作
商务合作