我如何从该对象获取参考?

问题描述

有人可以解释发生了什么吗?我只是按构造函数制作对象,然后通过虚拟相机进行效果。但是,由于从未创建虚拟相机而出现错误

NullReferenceException:对象引用未设置为对象的实例 CameraManager + ShakeEffect..ctor(Cinemachine.CinemachineVirtualCamera电影机VirtualCamera)(在Assets / Scripts / CameraManager.cs:27) CameraManager.Awake()(位于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;
         }
     }
 }

解决方法

不清楚,因为行号不匹配。

我猜GetComponent()无法在Awake中找到“运行状况”组件。因此,该游戏对象上可能缺少它。