這個問題在這里已經有了答案: 什么是 NullReferenceException,我該如何解決? (27 個回答) 2天前關閉。
我一直在試圖弄清楚如何從我的第一人稱相機前面拍攝光線投射,當它用 EnemyHealth 腳本擊中物體時,它會受到變數“gunDamage”定義的所需傷害量。我很確定我一直在正確參考 EnemyHealth 腳本并在 EnemyHealth 腳本中呼叫 TakeDamage 函式,但它一直向我拋出 nullreferenceexception 錯誤。這幾天我一直被這件事難住了,這讓我精神錯亂。我很樂意嘗試解決您對腳本或這篇文章的任何疑問。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GunScript : MonoBehaviour
{
EnemyHealth enemyHealth;
[SerializeField] Camera FPCamera;
[SerializeField] float range = 100f;
public float gunDamage = 50f;
void Awake()
{
enemyHealth = GetComponent<EnemyHealth>();
}
void Update()
{
if (Input.GetButtonDown("Fire1"))
{
Shoot();
}
}
private void Shoot()
{
RaycastHit hitObject;
if (Physics.Raycast(FPCamera.transform.position, FPCamera.transform.forward, out hitObject, range))
{
//Debug.Log("you hit a " hitObject.transform.name);
if (hitObject.transform.parent.GetComponent<EnemyHealth>() != null)
{
enemyHealth.TakeDamage(gunDamage);
}
}
else
{
//null protector
return;
}
}
}
using UnityEngine;
public class EnemyHealth : MonoBehaviour
{
public float hitPoints = 100f;
public void TakeDamage(float gunDamage)
{
print(hitPoints);
hitPoints -= gunDamage;
if (hitPoints <= 0)
{
Destroy(gameObject);
}
}
}
我嘗試訪問有關射線投射碰撞的物件的資訊,確定它是否有 EnemyHealth 腳本,并在 EnemyHealth 腳本中運行 TakeDamage 函式。光線投射成功地與我瞄準的物體相撞,但該物體沒有受到傷害。相反,它會拋出一個 nullreferenceexception。
uj5u.com熱心網友回復:
看起來您正在嘗試使用EnemyHealth本地 GameObject 上的組件,而不是敵人上的組件。試試這個。
private void Shoot()
{
if ( Physics.Raycast (FPCamera.transform.position, FPCamera.transform.forward, out var hitObject, range))
{
if ( hitObject.transform.parent.TryGetComponent<EnemyHealth> ( out var eh ) )
eh.TakeDamage(gunDamage);
}
else
{
//null protector
return;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/523513.html
標籤:C#unity3d
上一篇:為什么不先分配變數就不能更改值?
下一篇:我如何使這個運動腳本在C#中作業
