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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

2625閲覧

Vector3型の配列を組みたいのですが、うまくいきません。

Grass_64

総合スコア4

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/04/15 16:12

イメージ説明
Vector3で位置情報を配列に記録して、その配列に従ってアニメーションさせようと思っていました。
まず
public Vector3[] actiona = new Vector3[20];
と作成してみたのですが、思いのほか、せっかちな動作だったため、
public Vector3[] actiona = new Vector3[60];
と要素数を増やしてみたのですが、
「Index was outside the bounds of the array.」と出て止まってしまいます。
別の箇所で配列の個数以上の値を参照してしまってエラーを出していたので、薄々検討はついていたのですが、、、

unity

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Aobject : MonoBehaviour 6{ 7 const string NAME = "One"; 8 const string OPPONENT = "Two"; 9 public Battlemain battlemain;//メインルーチンを見に行く用 10 public int gmode; 11 public Vector3 staya;//位置情報 12 public Vector3 basea;//初期位置情報 13 public Vector3 hita;//衝突位置 14 public int motiona;//移動カウント 15 public Vector3[] actiona = new Vector3[60];//ここが重要? 16 public Vector3 setpos;//計算用 17 public Vector3 backa;//戻り距離 18 19 20 void Start() 21 { 22 GameObject go = GameObject.Find("Battlemain");//メインルーチン呼び出し 23 battlemain = go.GetComponent<Battlemain>(); 24 gmode = battlemain.modeswitch;//メインルーチンのモード引き継ぎ 25 basea.x = -6.0f;//基準の位置 26 basea.y = 0.0f; 27 basea.z = 0.0f; 28 motiona = 0; 29 while (motiona < 60) 30 { 31 actiona[motiona] = basea; 32 Debug.Log("STARTactiona[" + motiona + "]=" + actiona[motiona]); 33 34 ++motiona; 35 } 36 } 37}

なぜかループが20回で止まります。「Index was outside the bounds of the array.」
20回以下だと回る。
そもそも
public Vector3[] actiona = new Vector3[10];
にして
while (motiona < 20)
{
actiona[motiona] = basea;
Debug.Log("STARTactiona[" + motiona + "]=" + actiona[motiona]);
++motiona;
}
と回しても、エラーが出ないので、余計分からないですね。
そもそも宣言の仕方が誤っているのか、
配列が20個までしか作れないとか?(そんな訳ないですね)

目的として
AとBの二つのオブジェクトが中央に向かって移動、衝突した際に
初期位置と衝突した位置の差を60(カウント=1秒くらいのイメージ)で移動値を算出、
当面60カウントの位置情報を配列に記録し、
メインルーチンのUpdate()で、位置情報を再生させるのが目的です。

その60カウントの配列の中で、
普通に2次曲線で戻るものや、画面外に向けて弾き飛ぶような演出を差し替えで利用するイメージですね。

ご支援よろしくお願いします。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

actionaをpublicで宣言しているので、
一度20で設定して後から60とかに変えてもInspectorウィンドウの方は20のままになっているのが原因かなと思います

Inspectorの設定を変えるか、
「actiona = new Vector3[60];」をStartの中で書くといいと思います

これは配列だけに起こることじゃないので気を付けた方がいいです

投稿2021/04/15 17:06

lazh

総合スコア300

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Grass_64

2021/04/16 14:23

ありがとうございます! 確かに今回初めてpublicの宣言と初期化を一緒にしてしまったのでした。 おっしゃる通りでInspectorのウィンドウが20のままでしたね。 参考書にInspectorの数値が優先されている表記があったのですが、 今まで実感することがなかったので、大変身になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問