[英]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
時, USBInstance
為null
。
正如Kapol詳細說明,你的問題確實出現了你的努力蒙上了GameObject
的RigidBody2D
與線:
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.