我有一些代码可以创建自定义UI类。这可以通过以下方式完成:

public class EasyUIData
{
    protected static Canvas EasyCanvasOptions;
    protected static Vector2 EasyCanvasDimensions;
}

public class UIBaseProperties : EasyUIData
{
    protected GameObject UIElement;
    protected RectTransform Anchor;
    protected Vector2 Loc;
    protected int? SizeX, SizeY;

    public UIBaseProperties(Vector2 loc, int? sizeX = null, int? sizeY = null)
    {
        UIElement = new GameObject();
        this.Loc = loc;
        this.SizeX = sizeX;
        this.SizeY = sizeY;
    }
}

public class RawImage : UIBaseProperties
{
    private RawImage UIImageComponent;
    private Texture2D Img;

    public RawImage(Texture2D img, Vector2 loc, int? sizeX = null, int? sizeY = null) : base(loc, sizeX, sizeY)
    {
        UIImageComponent = UIElement.AddComponent(typeof(RawImage)) as RawImage; // this generates the error.
    }
}


但是在我要添加RawImage组件的行中,出现以下错误:


  无法通过参考转换,装箱转换,拆箱转换,换行转换或空类型转换将类型'UnityEngine.Component'转换为'Easy.UI.RawImage'


我不确定为什么,因为我以前使用过这种技术一次,而且效果很好。
如果不清楚,请告诉我,以便我澄清。

最佳答案

问题是您将脚本命名为RawImage。将脚本命名为与Unity组件相同的名称通常不是一个好主意。

如果您的目标是在RawImage类中使用Unity的RawImage,则为类名称提供名称空间,以使Unity不会尝试使用您自己的RawImage版本:

更换

private RawImage UIImageComponent;
UIImageComponent = UIElement.AddComponent(typeof(RawImage)) as RawImage;


与:

private UnityEngine.UI.RawImage UIImageComponent;
UIImageComponent = UIElement.AddComponent<UnityEngine.UI.RawImage>();




如果您的目标是使自己的自定义RawImage类与AddComponentGetComponent函数一起使用,那么您要做的就是使其从MonoBehaviour派生。由于您自己的RawImage类是从另一个类UIBaseProperties派生的,而另一个类EasyUIData是从另一个类MonoBehaviour派生的,因此您必须使最终的类从EasyUIData派生。

public class EasyUIData : MonoBehaviour
{
    protected static Canvas EasyCanvasOptions;
    protected static Vector2 EasyCanvasDimensions;
}


这应该可以解决您的问题,因为从MonoBehaviour派生RawImage会使自定义成为可以附加到GameObject的组件。

09-10 00:01