所以我收到的错误是
对象引用未设置为对象的实例Explode.LateUpdate()(在Assets / Scripts / Explode.cs:40)
我不确定为什么我得到这个错误,因为一切正常,我在不同的场景中有完全相同的脚本,没有错误信息。我喜欢任何帮助。
我用不同颜色的盒子爆炸我的播放器。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Explode : MonoBehaviour {
[System.Serializable]
public class ExplodeColours
{
public Color32[] Colours;
}
public static bool explode, explodeOnce;
public ParticleSystem Explodes;
private ParticleSystem explosionSystem;
public Transform player;
public List<ExplodeColours> ColoursList;
// Use this for initialization
void Start () {
PlayerPrefs.SetInt("SelectedChar", 0);
PlayerPrefs.Save();
explodeOnce = false;
explode = false;
}
// Update is called once per frame
void Update () {
if (explode == true)
{
explodeOnce = true;
PlayerExplode();
}
}
void LateUpdate()
{
if (explode)
{
ParticleSystem.Particle[] Particles = new ParticleSystem.Particle[explosionSystem.main.maxParticles];
//ParticleSystem.Particle[] Particles = new ParticleSystem.Particle[Explodes.main.maxParticles];
int NumParticlesAlive = explosionSystem.GetParticles(Particles);
for (int i = 0; i < NumParticlesAlive; i++)
{
Particles[i].startColor = (ColoursList[PlayerPrefs.GetInt("SelectedChar")].Colours[Random.Range(0, ColoursList[PlayerPrefs.GetInt("SelectedChar")].Colours.Length)]);
}
explosionSystem.SetParticles(Particles, NumParticlesAlive);
explode = false;
}
}
void PlayerExplode()
{
explosionSystem = Instantiate(Explodes, player.position, player.rotation);
explosionSystem.Play();
}
}
答案 0 :(得分:2)
如果这是第40行(我必须计算):
ParticleSystem.Particle[] Particles = new ParticleSystem.Particle[explosionSystem.main.maxParticles];
然后explosionSystem
或main
或maxParticles
为空。我打算将其作为副本关闭,此错误非常常见,解决问题的方法很简单。
但代码行上的断点,当代码控件停止时,检查哪个对象为null并确保其设置。
修改强>:
使用GetComponent
初始化explosionSystem
函数中的Start
变量。首先,找到ParticleSystem
附加到使用GetComponent
的GameObject得到ParticleSystem
。
private ParticleSystem explosionSystem;
void Start()
{
GameObject obj = GameObject.Find("NameOfObjectParticleSystemIsAttachedTo");
explosionSystem = obj.GetComponent<ParticleSystem>();
}
此外,在for
循环内,您尝试使用Particles的startColor
属性而不初始化每个属性。您可以使用Particles[i] = new ParticleSystem.Particle();
。
变化:
for (int i = 0; i < NumParticlesAlive; i++)
{
Particles[i].startColor
= (ColoursList[PlayerPrefs.GetInt("SelectedChar")].Colours[Random.Range(0, ColoursList[PlayerPrefs.GetInt("SelectedChar")].Colours.Length)]);
}
到
for (int i = 0; i < NumParticlesAlive; i++)
{
Particles[i] = new ParticleSystem.Particle();
Particles[i].startColor
= (ColoursList[PlayerPrefs.GetInt("SelectedChar")].Colours[Random.Range(0, ColoursList[PlayerPrefs.GetInt("SelectedChar")].Colours.Length)]);
}
答案 1 :(得分:0)
要避免空引用错误,请确保所有变量(正在使用)具有其他值,至少在构造函数级别指定默认值