unity3d Unity:满足条件后精灵不变

dced5bon  于 2023-03-09  发布在  其他
关注(0)|答案(3)|浏览(177)

第一次使用Unity和C#。创建了一个按钮,只会计数到某个值,达到该值后,它会改变图像。
我的图像是一个Texture2D,我试图将其转换为sprite,但它总是抛出一个未设置为对象示例的对象引用,即使sprite不为空,而且我不确定它可能引用的对象。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class testButton : MonoBehaviour
{
//test function for testing onClick()
public void Test(){
  counter++;
  if (counter \> 10){
    IconManager.instance.changeImage();
  }
 }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class icon : MonoBehaviour
{
public Texture2D[] iconTextures;
public Texture2D tester;
public Sprite newSprite;
public Image newImage;

    public static icon instance;
    
    public void changeImage(){
        tester = iconTextures[1];
        newSprite = Sprite.Create(iconTextures[1], new Rect(0, 0, tester.width, tester.height), new Vector2(0.5f, 0.5f), 100.0f);
        gameObject.GetComponent<Image>().sprite = newSprite;
    }

}

任何帮助都是最好的,因为我没有主意了。谢谢
我尝试了很多教程和文章,看起来我们有相同风格的代码,但我的总是抛出异常。

eblbsuwk

eblbsuwk1#

我能够修复这个问题。基本上我所做的是,而不是试图转换成一个sprite或任何东西,我用它作为一个原始图像。
我在该图像中添加了一个Raw Image组件,设置了默认纹理,并在相关脚本中,我的代码如下:

public class Icon : MonoBehaviour
{
public Texture2D[] iconTextures;
public Texture2D tester;
private int counter = 0;

public static Icon instance;

private void Awake(){
    instance = this;
}

public void incrementCounter(){
    counter++;
}

public int getCounter(){
    return counter;
}

public void changeImage(){
    tester = iconTextures[counter];
    if (getCounter() != 4){
        incrementCounter();
    }
    instance.gameObject.GetComponentInChildren<RawImage>().texture = tester;
}
}
olmpazwi

olmpazwi2#

保存单例示例。

private void Start() => instance = this;
cgfeq70w

cgfeq70w3#

检查图像的导入设置。确保纹理类型设置为Sprite(2D和UI)。这应该允许在代码中将其作为Sprite处理。然后,您需要对按钮的图像元素的Image类型引用。新图像应该作为Sprite引用。然后只需:你的图像.sprite =你的精灵

相关问题