Unityで、スマホをタップした位置(横幅にx座標のみ)に応じて、スマホ画面奥にプレハブから呼び出したマテリアルを飛ばす為のスクリプトを書いています。また、プレハブは色違いの4通り存在して、その中からランダムに呼び出すのですが、エラーコードから、この呼び出す引数になっているプレハブか、その保存場所に問題がありそうなのはわかるのですが、いまいちわかりません。
再生ボタンを押す段階ではエラーメッセージは出ず、gameビューをクリック(タップ)したタイミングでエラーが出ます
因みに、Hierarchyビューの親オブジェクトとしてcandiesという空のオブジェクトがあり、そこの子オブジェクトとして呼び出すみたいなのですが、そこについて理解出来ていないのも原因の一つとして考えられます。
以上を踏まえて問題点の解明をして頂けたら幸いです
動作環境
Mac OS最新
Unity最新(読んでる本は2019のa?(前半)対応ですが、そこは問題では無いと思います)
Atomエディタです
今からご飯を食べにいくので、返信少し遅れますごめんなさい!
エラーコード詳細
IndexOutOfRangeException: Index was outside the bounds of the array.
Shooter1.SampleCandy () (at Assets/Scripts/Shooter1.cs:31)
Shooter1.Shot () (at Assets/Scripts/Shooter1.cs:44)
Shooter1.Update () (at Assets/Scripts/Shooter1.cs:24)
ソースコード
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Shooter1 : MonoBehaviour
{
public GameObject[] candyPrefabs; public Transform candyParentTransform; public float shotForce; public float shotTorque; public float baseWidth; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { if (Input.GetButtonDown("Fire1")) Shot(); } //キャンディのプレハブからランダムに選ぶ GameObject SampleCandy() { int index = Random.Range(0, candyPrefabs.Length); return candyPrefabs[index]; } Vector3 GetInstantiatePosition() { //画面のサイズとInput割合からキャンディ生成のポジションを計算 float x = baseWidth * (Input.mousePosition.x / Screen.width) - (baseWidth / 2); return transform.position + new Vector3(x, 0, 0); } public void Shot() { //プレハブからCandyオブジェクトを生成 GameObject candy = (GameObject)Instantiate( SampleCandy(), GetInstantiatePosition(), Quaternion.identity ); //生成したCandyオブジェクトの親をcandyParentTransformに設定する candy.transform.parent = candyParentTransform; //candyオブジェクトのRigidbodyを取得し力と回転を加える Rigidbody candyRigidbody = candy.GetComponent<Rigidbody>(); candyRigidbody.AddForce(transform.forward * shotForce); candyRigidbody.AddTorque(new Vector3(0, shotTorque, 0)); }
}
回答1件
あなたの回答
tips
プレビュー