有人可以帮我理解我的错误,我得到NullReferenceException: Object reference not set to an instance of an object
错误吗?
这是从最初没有实例化ParticleSystem
的旧教程中获取的,所以基于类似帖子的答案,我已将其修改为有效,但似乎它仍然没有实例化..
最初,它只在particleSystem.SetParticles(points, points.Length);
方法中使用了Update
,但这不起作用,并且搜索答案让我找到了这个问题的专门帖子,但建议的解决方案仍然可以不能让它发挥作用。
我在这里做错了什么?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Grapher1 : MonoBehaviour
{
public int _resolution = 10;
private ParticleSystem.Particle[] _points;
private ParticleSystem _particleSystem;
private void Start()
{
if (_resolution < 10 || _resolution > 100)
{
Debug.LogWarning("Grapher resolution out of bounds, resetting to minimum 10", this);
_resolution = 10;
}
_points = new ParticleSystem.Particle[_resolution];
_particleSystem.Emit(_resolution);
_particleSystem.GetParticles(_points);
float increment = 1f / (_resolution - 1);
for (int i = 0; i < _resolution; i++)
{
float x = i * increment;
_points[i].position = new Vector3(x, 0f, 0f);
_points[i].color = new Color(x, 0f, 0f);
_points[i].size = 0.1f;
}
}
private void Update()
{
_particleSystem.SetParticles(_points, _points.Length);
}
}
答案 0 :(得分:2)
如评论中所述:
private ParticleSystem _particleSystem;
只声明一个(引用)变量,它不会创建实例。
使用ParticleSystem
的首选方法是将其附加到游戏对象,然后通过GetComponent
引用它,在这种情况下添加
_particleSystem = GetComponent<ParticleSystem>();
在Start()
方法中。
另一种选择是通过GameObject.AddComponent
以编程方式将组件添加到游戏对象中,但通常最好通过编辑器直接附加组件(因为AddComponent
会增加运行时开销)