继承之后导致重复引用


我有一个角色基类,然后用玩家控制类去继承它,就报这个错误,但是用另一个ai控制的脚本去继承它就没有报错,不明白是什么情况,被这个问题困在这了,求大佬们帮帮忙!


你可以自己找找PlayerCtrl是不是被其他什么地方意外的引入了

可以通过ts的as解决这个问题,
this.getComponent(“Character”) as any;
然后将Character类导入删除即可。
你那种方式在正常情况下是没有问题的,但是用了继承可能就会出现这种情况,你可以鼠标移到this.getComponent(Character)上,出现的注释,你细品。。。

playerCtrl被 另一个脚本CharacterMgr引入了,但是AICtrl也被这个脚本引入了就没有问题,就platerctrl 有问题


是不是因为这个重复引入了

你这样肯定循环了啊

谢谢大佬,就是这里的问题了
请问一下,我在characterMgr这个脚本里想要动态往创建出来的node上添加脚本组件,根据情况添加 playerCtrl 或者 AICtrl ,现在问题就是,这个characterMgr脚本里不能同时引入 playerCtrl 和 AICtrl ,我要怎么做?

你这里的问题是Character不要引入CharacterMgr,而不是characterMgr不能引入playerCtrl 和 AICtrl 。
如果要访问CharacterMgr的单例,可以试试用一个公用的常量类的属性来间接访问。

1赞

好的,多谢大佬指点

说句题外话,mainCharacter是什么用法?mainCharacter不就是this吗?

那是继承不能用了之后我加的

可以定义一个Character的interface在单独的文件中给CharacterMgr用,Character去implement这个interface,CharacterMgr就不要直接引用Character的实现脚本了。
面向对象设计最佳实践:上层模块不要依赖底层模块,两者都应该依赖彼此的抽象

Creator 2.x可以用异步import的方式,比如:

let CharacterExport = await import ('./Character');
let Character = CharacterExport.Character;
// 正常使用Character

这样不会循环依赖。不知道Creator 3.0还能不能这样用

恩 谢谢解答

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。