求助typescript 调用其他脚本中的变量或者函数的问题

我按照官方给的提示在脚本中引用其他组件的脚本变量报错,不明所以啊,首先不要new一个出来,我要的是修改另一个脚本里的变量或者调用其中的函数。

//daoru.ts

const {ccclass, property} = cc._decorator;

@ccclass
export default class daoru extends cc.Component {

@property(cc.Label)
label: cc.Label = null;

@property
text: string = 'hello';

// LIFE-CYCLE CALLBACKS:

// onLoad () {}

start () {

}

// update (dt) {}

}

//helloworld.ts
const {ccclass, property} = cc._decorator;
import daoru from “./daoru”;

@ccclass
export default class Helloworld extends cc.Component {

@property(cc.Label)
label: cc.Label = null;

@property
text: string = 'hello';
@property(daoru)
public my:daoru=null;

public start () {
    
    // init logic
    this.label.string = this.text;
    console.log("ceshi:"+this.my.text);
}

}

这是错误提示:
Simulator: E/jswrapper (271): ERROR: Uncaught TypeError: Cannot read property ‘text’ of null, location: assets/Script/Helloworld.js:0:0

因为this.my为null,null又没有text这个属性,肯定报错啊

@property(daoru)
public my:daoru;

这里我不给为null,也是同样的结果,我直接打印this.my都是null,但是我看你们官方出的文档里这样可以直接修改目标脚本的变量啊 ?我尝试直接打印daoru出来,发现把daoru的所有代码直接拿过来了,但是没办法访问内部的变量,如果我用new来实例化一个出来,那就和原本的那个daoru没有任何关系了,改了变量也是一个新变量而已啊

@property(daoru)
public my:daoru;

这里我不给为null,也是同样的结果,我直接打印this.my都是null,但是我看你们官方出的文档里这样可以直接修改目标脚本的变量啊 ?我尝试直接打印daoru出来,发现把daoru的所有代码直接拿过来了,但是没办法访问内部的变量,如果我用new来实例化一个出来,那就和原本的那个daoru没有任何关系了,改了变量也是一个新变量而已啊

是不是挂在节点下没给值啊?

你看的是哪个文档?

就是脚本开发指南里 的使用 TypeScript 脚本 这个文档里面有一段

提示其他组件属性和方法
首先我们声明一个组件:

我就是访问脚本的某个定义好而且带值的变量哦

实际使用需要你在属性管理器中,先给这个属性进行赋值才行。文档中只是说明怎么在其他脚本中能够有代码提示,只是作为这个点的参考示例代码。并不意味着copy过来就可以直接运行

意思是我需要把那个脚本在编辑器里拖入到变量上?

属性编辑器里面拖入,或者是在脚本中new都可以。主要就是要赋值

new出来不是相当于新建了一个组件吗 ?如果我修改new出来的obj里面的变量,原来的那个脚本里的变量值并不会变啊?

你得初始化的时候赋值,老铁,不然怎么操作呢。2个脚本挂在节点下,然后拖进去,就OK

哦,这样啊,必须得把节点拖进去才行啊,我还以为可以直接读取呢

我也遇到这个问题了 ,拖入会出现直接把脚本挂到节点上,拖不进@property中


你弄出来了吗?js的话可以直接访问到变量,ts还没搞懂

那你给的类型肯定不对,是可以拖进去的

脚本拖到节点下,再拖节点过去。不是拖assets里的脚本文件…

父组件脚本引入子组件脚本,然后父组件 @property(子组件) 挂载。 让后编辑器中将带有子组件脚本的Node,拖到带父组件脚本的Node上。就像绑定组件那样子(Node节点->脚本定义处)。