问题描述
有人可以解释发生了什么吗?我只是按构造函数制作对象,然后通过虚拟相机进行效果。但是,由于从未创建虚拟相机而出现错误。
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中找到“运行状况”组件。因此,该游戏对象上可能缺少它。