我在Unity中实例化了一个UI图像预制件,并设置了它的颜色,但它没有工作。
这是我的代码。
public class Test
{
public ImageInitializer pImage;
private void Start()
{
var temp = Instantiate(pImage, GameObject.FindObjectOfType<Canvas>().transform);
temp.Selectable = false;
temp.Color = Color.red;
}
}
public class ImageInitializer : MonoBehaviour
{
public Image image;
public Selectable selectable;
public bool Selectable
{
set => selectable.enabled = value;
}
public Color Color
{
set => image.color = value;
}
}
这个预制件只是一个简单的UI按钮,上面有ImageInitializer脚本。
但它并没有设置颜色。事实上,图像组件的颜色是设置了,但它仍然使用可选择的正常颜色。如果我在编辑器中打开和关闭它,一切都能正常工作。
你知道为什么它不更新图像吗?
===编辑===
到目前为止,我试过 LayoutRebuilder.ForceRebuildLayoutImmediate(temp.transform as RectTransform)
和 temp.image.SetAllDirty()
和一个禁用的coroutine Selectable
等一格,然后设置颜色。
什么都没有用...
我认为你想做一个可选择的自定义图像类,做一个自定义类,其中有一个你可以操作的图像,它也是 "可选择 "的一个子类。现在你有一个随机的可选择的类,没有任何附加的功能。你可以把代码做成你自己的,但是要像这样。
public class ImageInitializer : Selectable
{
public Image image;
//use enabled = true or enabled = false;
public Color Color
{
set => image.color = value;
}
}
然后你就可以实现像 "OnPointerEnter""OnPointerExit""OnPointerDown "这样的方法... ...等等。
你用的是哪个版本的unity编辑器?
我想这只是一个没有重建的问题。
public ImageInitializer pImage;
private void Start()
{
var temp = Instantiate(pImage, GameObject.FindObjectOfType<Canvas>().transform);
temp.Selectable = false;
temp.Color = Color.red;
LayoutRebuilder.ForceRebuildLayoutImmediate(temp.GetComponent<RectTransform>());
}