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次曲線で戻るものや、画面外に向けて弾き飛ぶような演出を差し替えで利用するイメージですね。
ご支援よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/16 14:23