unity3d Unity切换组件

wbgh16ku  于 2023-02-16  发布在  其他
关注(0)|答案(1)|浏览(158)

所以我会尽可能的干净。
1.我有不同类型的敌人,他们有不同类型的脚本来控制他们的行为。
1.我想用另一个脚本禁用这些脚本。
但问题是我不想使用某种类型的组件。例如:
我们有一个轰炸机控制器的轰炸机敌人和充电器控制器的充电器敌人。
如果我从另一个脚本将这些组件中的一个存储在公共组件中,我无法使用enabled属性打开或关闭它们。因为Component类没有enabled属性。
我可以使用指定的组件,但我不想。我可以存储脚本在他们的组件类型一样,轰炸机控制器的轰炸机控制器,但这将改变取决于敌人的类型。
正如我所说的,对于每一个敌人,我有不同的脚本来控制他们的行为。
总结一下我想这样:

public Component ControllerScript (will be set from the editor)

insomemethod(){
   ControllerScript.enabled = false;
}

有什么想法吗?我可以用什么来代替上面的组件?

r1zhe5dt

r1zhe5dt1#

您是否考虑过为不同的敌人控制器脚本使用一个公共基类?Unity的默认组件(如不同种类的碰撞器)可以禁用的原因是它们继承自一个公共基类,该公共基类具有enabled属性,然后继承自Component
例如,您可能有这样一个类:

public class EnemyController : Component
{
    public void enabled { get; set; } = true;

    // Other common methods - maybe virtual ones if your controllers
    // are executed in the same way?
}

那么子类可能类似于:

public class BomberController : EnemyController { }
public class ChargerController : EnemyController { }

最后,您可以在公共变量中引用基类:

public EnemyController ControllerScript

insomemethod(){
   ControllerScript.enabled = false;
}

这需要你手动定义enabled的功能,并且你的类可能不会出现在编辑器中。如果你想避免所有这些麻烦,考虑从MonoBehaviour继承-这通常是推荐的用户编写组件的基类。

相关问题