在一个脚本调用另一个脚本方法为什么不行


按照这个方法,调用另一个UI_Manger脚本里面的inset Number方法,为什么给红色波浪线;

别用find,直接@property一个node,手动拖入,然后使用

也是这样,不明白为什么还不行;我在其他地方也用这个方法是可以调用的,是节点层级问题吗?button是一个预制节点,实例后是UI_Manger的子节点,然后点button调用UI_Manger上的一个方法。

写法问题
@property({ type: Node })
UI_Manger = null;

getComponent后面直接写类名,不要加引号

- getComponent('UI_Manger')
+ getComponent(UI_Manger)

话说"Manger"是个啥,单词能拼对吗

是一个脚本名

是不是预制体上,不能挂其他节点;
image

拖成预制体后:

预制体:
@property({ type: Prefab })
prefabModel: Prefab | null = null;

是啥原理,真的不出红色波浪线了

官方写法呗 :rofl:

我就是看官方文档的,都是@property(Node)

你把鼠标放a上面,看下显示的是啥类型

感觉上面说了一堆废话。

只是因为typescript的类型检测导致的,getComponen方法是一个重载方法,你可以传一个类型,返回的就是这个类型的对象,比如 getComponent(UI_Manager),他返回的就是一个 UI_Manager 的对象,你可以调用他的方法,如果你调用的是 getComponent('UI_Manager') ,他返回的是一个 Component 对象,很显然 Component 对象是没有你需要的方法的。

要解决你的问题,要么像上面第一种办法,要么就使用 let a: any = find("xxx").getComponent('UI_Manager') ,AnyScript就不用担心没有方法了 :joy:

你觉得对就行, 不管他报红, 好像也是可以build成功的