以下のスクリプトをつけた飛行機があり、
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ZERO3_fly_src : MonoBehaviour { public float speed = 10f; public float max_speed = 40f; Rigidbody rb; bool stop_f = false; void Awake() { rb = GetComponent<Rigidbody>(); } public void Execute() { //Update処理をここに記載 if (stop_f == false) { // キャラクターのローカル空間での方向 Vector3 forward = transform.transform.forward; if (rb.velocity.magnitude < max_speed) { // 前進 rb.AddForce(forward * speed, ForceMode.Acceleration); } } } }
飛行機はリジッドボディをつけておりプレハブ化して、Resourcesのフォルダに「ZERO3」という名前で保存してあります。
以下で飛行機をランダム生成しています。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ZERO3_Manaager : MonoBehaviour { private List<ZERO3_fly_src> enemys = new List<ZERO3_fly_src>(128); public int Max_obj = 40; public float Randm_s = 150f; public bool katamuki_f = true; public bool y_kotei_f = false; public bool y_kotei_katamuki_f = false; float R_x1; float R_y1; float R_z1; float y; void Awake() { for (int i = 0; i < Max_obj; i++) { var enemyObj = Resources.Load<GameObject>("ZERO3"); enemys.Add(enemyObj.GetComponent<ZERO3_fly_src>()); } for (int i = 0; i < Max_obj; i++) { R_z1 = 0f; float x = Random.Range(-Randm_s, Randm_s) + transform.position.x; if (y_kotei_f) { y = transform.position.y; } else { y = Random.Range(0.0f, Randm_s) + transform.position.y; } float z = Random.Range(-Randm_s, Randm_s) + transform.position.z; if (katamuki_f) { R_x1 = Random.Range(0, 360); R_y1 = Random.Range(0, 360); } else { R_x1 = 0f; R_y1 = 0f; } if (y_kotei_katamuki_f) { R_x1 = -90f; R_y1 = 0f; R_z1 = Random.Range(0, 360); } GameObject zero3 = Instantiate(enemys[i].gameObject, new Vector3(x, y, z), Quaternion.Euler(R_x1, R_y1, R_z1)) as GameObject; } } void Update() { for (int i = 0; i < enemys.Count; i++) { enemys[i].Execute(); } } }
するとゲームを実行すると、以下のエラーが大量に出るのですが
UnassignedReferenceException: The variable rb of ZERO3_fly_src has not been assigned.
You probably need to assign the rb variable of the ZERO3_fly_src script in the inspector.
UnityEngine.Rigidbody.get_velocity () <0x283108b8640 + 0x0006a> in <a1ce4ca84a944d8aa5e23aa6fa322f2e>:0
ZERO3_fly_src.Execute () (at Assets/ZERO3_fly_src.cs:23)
ZERO3_Manaager.Update () (at Assets/ZERO3_Manaager.cs:68)
対応の方法がわかりません。
Awakeで、rbにリジッドボディのコンポーネントを取得していると思うのですが
なぜか、取得できていません。その理由と対応策がわかりません。
無理やり、Execute()の中でリジッドボディを取得してもなぜか、
前進させたいのですが、エラーは消えるのですがなぜか前進しませんでした。
そもそも、Updateで記載していたときは問題なく前進していたのですが
処理を高速化したいと思って、上記のように書き換えたのですが
うまくいきませんでした。
お手数ですが回答お願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。