我有一些代码可以创建自定义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
类与AddComponent
和GetComponent
函数一起使用,那么您要做的就是使其从MonoBehaviour
派生。由于您自己的RawImage
类是从另一个类UIBaseProperties
派生的,而另一个类EasyUIData
是从另一个类MonoBehaviour
派生的,因此您必须使最终的类从EasyUIData
派生。public class EasyUIData : MonoBehaviour
{
protected static Canvas EasyCanvasOptions;
protected static Vector2 EasyCanvasDimensions;
}
这应该可以解决您的问题,因为从
MonoBehaviour
派生RawImage
会使自定义成为可以附加到GameObject的组件。