【问题标题】:Unity randomly change imageunity随机改变图像
【发布时间】:2017-05-23 15:54:18
【问题描述】:

我正在使用 Unity。我想随机更改图像,可能通过按下按钮或触发事件。

我可以想到这样的解决方案:

    public Image randomImage;
    public Sprite s0;
    public Sprite s1;
    public Sprite s2;
    public Sprite s3;
    public Sprite[] images;
    void Start(){
        images = new Sprite[4];
        images [0] = s0;
        images [1] = s1;
        images [2] = s2;
        images [3] = s3;
     }
    void changeImage(){
        Random rnd = new Random();
        int num = rnd.Next(0, 4);
        randomImage <Image> ().sprite = images[num];
        }

然后我可以将我想改变的精灵拖到 randomImage 中,并将四个图像拖到 s0、s1、s2、s3 中。 但是,我要从中选择的图像数量远大于 4,可能是 20。我不知道是否有更聪明的方法可以做到这一点,而不是创建 20 个变量并将 20 个图像拖入其中。 谢谢你。

【问题讨论】:

  • 声明 s0, s1, s2s3 在这里不是必需的,因为 images 数组将被序列化,允许您在检查器中直接拖放您的精灵.
  • 谢谢!!我没有意识到这一点。 @Hellium

标签: c# unity3d 2d


【解决方案1】:

您需要使用UnityEngine.Random.Range。而已。您不必创建它的新实例。

由于数组从0 开始,将0 传递给第一个参数,将数组长度传递给第二个参数。第二个参数是独占的,所以不会出现超出范围的异常。

不需要randomImage &lt;Image&gt; (),因为randomImage 已经是一个图像(public Image randomImage;)。如果randomImage 是 GameObject 或任何其他类型,您应该这样做。

public Image randomImage;
public Sprite s0;
public Sprite s1;
public Sprite s2;
public Sprite s3;
public Sprite[] images;

void Start()
{
    images = new Sprite[4];
    images[0] = s0;
    images[1] = s1;
    images[2] = s2;
    images[3] = s3;
}

void changeImage()
{
    int num = UnityEngine.Random.Range(0, images.Length);
    randomImage.sprite = images[num];
}

【讨论】:

  • 谢谢!我将使用这个随机函数。根据 Hellium 的评论,我认为我也不必声明 s0,s1...。
  • 是的,您不必这样做,因为它们都是Sprites 的类型。只需删除 Start 函数中的所有内容,然后将每个内容拖到编辑器中的 images(Sprite) 数组中。唯一可能需要你现在拥有的方法的时候是当你想从代码中动态设置精灵的数量时,你不应该使用编辑器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多