unity3d - 我怎样才能从这个对象获得参考?
问题描述
有人可以解释发生了什么吗?我只是通过构造函数制作对象并通过虚拟相机来实现。但是,我遇到了错误,例如从未创建过虚拟相机。
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;
}
}
}
解决方案
目前尚不清楚,因为行号不匹配。
我猜 GetComponent() 未能在 Awake 中找到“健康”组件。所以它可能在那个游戏对象上丢失了。
推荐阅读
- c# - 如何检查给定阶段中是否存在族实例?
- python - Python - Django - 如何从 Django 框架将日志写入现有的 Kibana?
- flutter - Android Studio 4.1 Flutter 无法识别 android 模拟器
- neo4j - 在 Neo4j 中查询虚拟图
- c++ - 指针对象引用函数的分段错误
- python - 如何使用 python 创建 4-4-5 会计日历?
- c# - ThrowHelper 启用内联:静态本地函数?
- reactjs - React 应用 Svg 翻译中的 Font Awesome
- c# - 从 WebApi 到 sql 数据库的数据
- dart - dart 是否具有与 C# 丢弃等效的功能?