質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.04%

unityエラー IndexOutOfRangeException: Array index is out of range

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 6,178

score 34

using UnityEngine;
using System.Collections;

public class Player_NonPhysics2D:MonoBehaviour {
//宣言
// Inspectorで調整するためのプロパティ
    public float speed =15.0f;
    public Sprite[] run;
    public Sprite[] jump;

    // 内部で扱う変数

    float jumpVy;
    int animIndex;
    bool goalCheck;

    //メッセージに対応したコード
    //コンポーネントの実行開始

    void Start(){
        //初期化
        jumpVy = 0.0f;
        animIndex = 0;
        goalCheck = false;
    }

    //プレイヤーキャラのコリジョンに他のゲームオブジェクトのコリジョンが入った
    void OnCollisionEnter2D(Collision2D col){
        //ゴールチェック
        if(col.gameObject.name == "Stage_Gate"){
            //goal
            goalCheck =true;
            return;
        }
        //ゴール以外だったらステージを再読み込みしてリセット
        Application.LoadLevel(Application.loadedLevelName);
    }

    //フレームの描き換え
    void Update() {
        if(goalCheck) { //ゴールチェック
            return;
            //ゴールだったら処理停止
        
        }

        //現在のプレイヤーキャラの高さを計算
        float height= transform.position.y + jumpVy;
        //接地チェック(高さが0なら接地している)
        if(height <= 0.0f) {
            //ジャンプ初期化
            height = 0.0f;
            jumpVy  = 0.0f;
            //ジャンプチェック
            if(Input.GetButtonDown("Fire1")){
                //ジャンプ処理
                jumpVy = +1.3f;
                //ジャンプスプライト画像に切り替え..
                GetComponent<SpriteRenderer>().sprite = jump[0];
            }
            else{
                //走り処理
                animIndex  ++;
                if(animIndex >= run.Length){
                    animIndex = 0;
                }
                //走りスプライト画像に切り替え
                GetComponent<SpriteRenderer>().sprite = run[animIndex];
            }
        }
        else{
            //ジャンプ後の降下中
            jumpVy -= 0.2f;
            //jumpVy -= 6.0f * Time.deltaTime; //正しい処理はこちら
        }

        //プレイヤーキャラの移動(座標設定)
        transform.position = new Vector3 (
            transform.position.x+speed*Time.deltaTime,height,0.0f);
        //下記のように相対移動で記述してもいい
        //transfor.Translate(speed*Time.deltaTime,jumpVy,0.0f);
        //transform.position += new Vector3(speed * Time.deltaTime,jumpVy,0.0f);
        //ただし次の書き方では雨後置かないので注意
        //transform.position.Set(
        // transform.position.x+speed*Time.deltatime,height,0,0f);
        //カメラの移動(座標の相対移動)
        GameObject goCam = GameObject.Find ("Main Camera");
        goCam.transform.Translate (speed * Time.deltaTime, 0.0f,0.0f);
    }
    // UnitGuIの表示
     void OnGUI(){
        //デバックテキスト
        GUI.TextField(new Rect(10,10,300,60),
                      "[Unity 2d Sample 3-1 A]\nマウスの左ボタンを押すと加速\nはなすとジャンプ");
        //リセットボタン
        if(GUI.Button (new Rect(10,80,100,20),"リセット")) {
            Application.LoadLevel (Application.loadedLevelName);
        }
    }
}

上記はunity2dのスクリプトです 再生を押したところ以下のエラーがでました。
IndexOutOfRangeException: Array index is out of range.
Player_NonPhysics2D.Update () (at Assets/Scenes/Player_NonPhysics2D.cs:68)

array index  is out of rangeのエラーを調べたところ配列の最大値を超えているという
ことだとわかりましたが、いったいどこが間違っているのかがわかりませんので
間違っている文章を指摘くださるか、正常に戻すためのスクリプトがあれば教えてください。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

runはどこで初期化しているのですか? runに1枚以上のSpriteが入ってないと、エラーになりますね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る