首页 > 解决方案 > 我怎样才能从这个对象获得参考?

问题描述

有人可以解释发生了什么吗?我只是通过构造函数制作对象并通过虚拟相机来实现。但是,我遇到了错误,例如从未创建过虚拟相机。

NullReferenceException:对象引用未设置为对象的实例 CameraManager+ShakeEffect..ctor (Cinemachine.CinemachineVirtualCamera CinemachineVirtualCamera) (at Assets/Scripts/CameraManager.cs:27) CameraManager.Awake () (at Assets/Scripts/CameraManager.cs :13)

NullReferenceException:对象引用未设置为对象的实例 CameraManager+ShakeEffect.Effect ()(在 Assets/Scripts/CameraManager.cs:31) Health.SetHealth(System.Int32 值)(在 Assets/Scripts/Health/Health. cs:22) SpiderAI.OnTriggerEnter (UnityEngine.Collider col) (在 Assets/AiScript/Spider/SpiderAI.cs:27)

 public class CameraManager : MonoBehaviour
 {
 
     private CinemachineVirtualCamera cinemachineVirtualCamera;
     private void Awake()
     {
         cinemachineVirtualCamera = GetComponent<CinemachineVirtualCamera>();
         var shakeEffect = new ShakeEffect(cinemachineVirtualCamera);
         GetComponent<Health>().OnGetDamage += shakeEffect.Effect;
     }
 
     public class ShakeEffect : ICameraEffect
     {
 
         private float duration = 5f;
         private float intensity = 2f;
 
         public CinemachineVirtualCamera cinemachineVirtualCamera;
 
         public ShakeEffect(CinemachineVirtualCamera cinemachineVirtualCamera) {
             this.cinemachineVirtualCamera = cinemachineVirtualCamera;
         }
 
         public void Effect()
         {
             CinemachineBasicMultiChannelPerlin cinemachineBasicMultiChannelPerlin =
                 cinemachineVirtualCamera.GetCinemachineComponent<CinemachineBasicMultiChannelPerlin>();
 
             cinemachineBasicMultiChannelPerlin.m_AmplitudeGain = intensity;
             StopShake(cinemachineBasicMultiChannelPerlin);
         }
 
         private void StopShake(CinemachineBasicMultiChannelPerlin cinemachineBasicMultiChannelPerlin)
         {
 
             var elapsedTime = 0f;
 
             while (duration < elapsedTime)
             {
                 elapsedTime += Time.time;
             }
             cinemachineBasicMultiChannelPerlin.m_AmplitudeGain = 0f;
         }
     }
 }

标签: unity3dobjectconstructorreference

解决方案


目前尚不清楚,因为行号不匹配。

我猜 GetComponent() 未能在 Awake 中找到“健康”组件。所以它可能在那个游戏对象上丢失了。


推荐阅读