41596


unityでゲームを作ろうとしているsimと申します。  
いわゆる落ちものパズルを作りたく思い、用意した17種のブロックから一つをランダム生成するC#スクリプトを書こうとしているのですが、以下のコードを実行するとarray
index is out of rangeが出てしまいます。配列の長さをLength+1にしても同様です。  
どのように変更したら正常に動作するか、ご教授いただけないでしょうか。

[code]

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class BlockGenerator : MonoBehaviour {
    
        public GameObject[] Blocks;
        float delta=0;
        float span=1.0f;
        float speed=-0.03f;
    
        public void SetParameter(float speed,float span){
            this.speed = speed;
            this.span = span;
        }
    
        // Use this for initialization
        void Start () {
    
    
        }
    
        // Update is called once per frame
        void Update () {
            this.delta += Time.deltaTime;
            if (this.delta > this.span) {
                this.delta = 0;
                GameObject Block;
                Blocks = GameObject.FindGameObjectsWithTag ("Block");
                int dice = Random.Range (0, Blocks.Length);
                Block = Instantiate (Blocks [dice]) as GameObject;
                Block.transform.position = new Vector3 (0, 8, 0);
                Block.GetComponent<BlockController> ().dropSpeed = this.speed;
            }
    
        }
    }
    
[/code]


CC BY-SA 3.0
2018-02-07T16:23:57.127
41549
2018-02-09T00:14:06.167
2018-02-07T16:51:40.800
3605
27323
question
unity3d
unityにおけるランダム生成について


[Random.Range(int min, int
max)](https://docs.unity3d.com/ja/2018.1/ScriptReference/Random.Range.html)はmax
**未満** の数値を返しますが、maxがminと同値の場合はエラーとならずにminを返します。

そのためタグ名のスペルミスなどで"Block"タグが0件の場合、Random.Range(0, 0)は0を返すので質問のエラーを返す可能性があります。

[Unityフォーラムの類似回答](https://forum.unity.com/threads/indexoutofrangeexception-
array-index-is-out-of-range.486106/#post-3167796)


CC BY-SA 3.0
2018-02-09T00:14:06.167
41596
2018-02-09T00:14:06.167
9820
41549
answer