Unity | 配列の雰囲気(PC閲覧用)

配列の雰囲気を見るWebGL記事です。

配列のデモ(WebGL)

操作

黄色のボタンをマウスで操作できます。

配列

配列の初期化

// 0 ~ 4までの5個の番号が付いた、int型の「values」という名前の配列を作成する
int[] values = new int[5];
//配列の「0番に1」,「1番に2」,「2番に3」,「3番に4」,「4番に5」の初期値の入った配列を作成する
int[] values = new int[5]{1, 2, 3, 4, 5};

配列に値を入れる

int value = 2;
int[] values = new int[5];
//valuesの4番目にvalueの値を入れる
values[3] = value;

配列から値を取りだす

int value;
int[] values = new int[5];
//0から数えて5番目の値を取りだす
value = values[4]

サンプルコード

このプロジェクトは、Image、Button、Slider、TextMeshProと、以下のコードで作成されています。

using UnityEngine;
using TMPro;
namespace BlueBreath.Practice
{
    public class Arr
    {
        private int value = 0;
        public int Value { get => this.value; set => this.value = value;}
        private int[] values;
        public int[] Values { get => this.values; set => this.values = value;}

    }
    public class ArrayDemo : MonoBehaviour
    {
        Arr arr = new Arr();
        // Start is called before the first frame update
        void Start() => ErrObj.SetActive(false);

        // Update is called once per frame
        void Update()
        {
            
        }
        //Slider Text
        [SerializeField] TextMeshProUGUI sliderText;
        [SerializeField] UnityEngine.UI.Slider slider;
        public void SetSliderText() => 
            sliderText?.SetText("{0}",(int)slider?.value);
        //Arr value Text
        [SerializeField] TextMeshProUGUI valueTMPro;
        public void SetArrValue(){
            arr.Value = (int)slider?.value;
            valueTMPro?.SetText("{0}",(int)slider?.value);
        }
        //Arr Values 
        [SerializeField] GameObject[] valueItems = new GameObject[5];
        [SerializeField] TextMeshProUGUI[] valueItemsText = new TextMeshProUGUI[5];
        public void NewArrValues(){
            arr.Values = new int[(int)slider?.value];
            for (int i = 0; i <= 4; i++)
            {
                valueItems[i].SetActive(i <= (int)slider?.value - 1);
                if(i <= (int)slider?.value - 1)valueItemsText[i].SetText("{0}", arr.Values[i]);
            }
        }
        public void SubValsForVal(){
            if((int)slider?.value <= arr.Values.Length - 1){
                arr.Value = arr.Values[(int)slider?.value];
                valueTMPro?.SetText("{0}",arr.Values[(int)slider?.value]);
            }else{
                //IndexOutOfRangeException
                SetActiveErr();
            }
        }
        public void SubValForVals(){
            if((int)slider?.value <= arr.Values.Length - 1){
                arr.Values[(int)slider?.value] = arr.Value;
                valueItemsText[(int)slider?.value].SetText("{0}", arr.Value);
            }else{
                //IndexOutOfRangeException
                SetActiveErr();
            }
        }
        //Show IndexOutOfRangeException
        [SerializeField] GameObject ErrObj;
        public void SetActiveErr(){
            ErrObj.SetActive(true);
            Invoke("SetFalseErr",2);
        }
        public void SetFalseErr() => ErrObj.SetActive(false);
    }
}

IndexOutOfRangeException

IndexOutOfRangeException
IndexOutOfRangeException
slider.value = 5;
values[Slider.value] = value;
//values[5]は6番目の箱で、それは存在しないのでエラーが出ます

IndexOutOfRangeExceptionエラーは、配列内の存在しないインデックス番号にアクセスしようとした時に発生するエラーです。

関連・参考

動作環境

参考文献

1 次元配列 (C# プログラミング ガイド)

コメント

タイトルとURLをコピーしました