2017-01-09 4 views
3

私はUnityを使用しています。ボタンを押すか、イベントをトリガーするなどして、画像をランダムに変更したいと考えています。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枚の画像をドラッグすることができます。 しかし、私が選択したい画像の数は4よりはるかに多分20です。20の変数を作成し、それに20の画像をドラッグするのではなく、スマートな方法があるかどうかはわかりません。 ありがとうございます。

+1

s0'、 '宣言' 'images'配列をドラッグ&インスペクタで直接あなたのスプライトをドロップすることができ、シリアライズされますので、s1'、' s2'と 's3'はここでは必要ではありません。 – Hellium

+0

ありがとうございます!私はこれを知らなかった。 @ヘリウム – kukunut0

答えて

4

UnityEngine.Random.Rangeを使用する必要があります。それでおしまい。新しいインスタンスを作成する必要はありません。

配列は0から始まるので、最初のパラメータには0を渡し、2番目のパラメータには配列の長さを渡します。 2番目のパラメータは排他的なので、範囲外の例外は発生しません。

randomImageはすでに画像(public Image randomImage;)であるため、randomImage <Image>()の必要はありません。 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]; 
} 
+0

ありがとう!このランダム関数を使用します。そして、私はs0、s1を宣言する必要はないと思う... Helliumのコメントによると。 – kukunut0

+0

はい、あなたはすべてのタイプの 'スプライト 'であるので、必要はありません。 'Start'関数の中のすべてを削除し、それぞれをエディタの画像(スプライト)配列にドラッグします。あなたが今あるメソッドを必要とするかもしれない唯一の時間は、コードからスプライトの量を動的に設定したいときにエディタを使用しないことです。 – Programmer

関連する問題