簡體   English   中英

Unity:實例化剛體時的NullReferenceException

[英]Unity : NullReferenceException when Instantiating Rigidbody

實例化后,Rigidbody2D Null參考異常

我需要特定於Unity游戲引擎的答案。

所以基本上,我正在寫一個控制生成器的腳本。 它非常通用,基本上它的作用是在生成實例化剛體后向其施加力。 但是由於某種原因,每次我第一次生成對象時,Unity都會引發NullReferenceException錯誤。 我檢查了我的代碼是否有勘誤,但我認為這很好。 有人提示嗎?

順便說一句,確切的錯誤消息是:

NullReferenceException:對象引用未設置為對象USBSpawner + c__Iterator0.MoveNext()的實例(位於Assets / Scripts / USBSpawner.cs:24)

碼:

 using UnityEngine;
 using System.Collections;

 public class USBSpawner : MonoBehaviour {

     public static bool isActive = true;

     public GameObject USBPrefab;
     public float spawnDelay = 5f;
     public Vector2 throwForce;

     void Start() {
         StartCoroutine(SpawnUSB());
     }
     IEnumerator SpawnUSB () {
         yield return new WaitForSeconds(spawnDelay);

         if(isActive) {
             var newTransform = transform;

             Rigidbody2D USBInstance;
             USBInstance = Instantiate (USBPrefab, newTransform.position, Quaternion.identity) as Rigidbody2D;
             USBInstance.GetComponent<Rigidbody2D>().velocity = throwForce;
         }

         StartCoroutine(SpawnUSB());
     }
 }

有任何想法嗎?

確實,在發布問題之前,您需要做更多的研究。 對於任何程序員在完成最初的幾個OOP程序之后,這應該是相當明顯的。 您正在使用的對象沒有任何價值。 也許您的轉換從未進行,或者您的四元數不存在。 某種東西

我認為問題在於以下幾行:

USBInstance = Instantiate (USBPrefab, newTransform.position, Quaternion.identity) as Rigidbody2D;

調用Instantiate ,您嘗試使用as運算符將結果轉換為Rigidbody2D實例。 現在,這是Microsoft關於此運算符必須說的:

as運算符就像強制轉換操作。 但是,如果無法進行轉換,則as 返回null而不是引發異常。

似乎無法進行轉換,因此當您在其上調用GetComponent時, USBInstancenull

正如Kapol詳細說明,你的問題確實出現了你的努力蒙上了GameObjectRigidBody2D與線:

USBInstance = Instantiate (USBPrefab, newTransform.position, Quaternion.identity) as Rigidbody2D;

由於這種轉換將失敗(這兩種類型實際上是完全不同的),因此這行代碼基本上可以解決USBInstance = null; ,並嘗試對其調用任何方法,將為您提供NullReferenceException

就像您已經在下一行調用GetComponent<Rigidbody2D>() ,無需嘗試將Instantiate()的結果GetComponent<Rigidbody2D>()為任何東西。 只需將其保留為GameObject

USBInstance = Instantiate (USBPrefab, newTransform.position, Quaternion.identity);

希望這可以幫助! 如果您有任何疑問,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM