List<T> 在 Unity 中编写脚本时继续抛出 "NullReferenceExceprion",即使它已初始化

List<T> keep throwing "NullReferenceExceprion" when scripting in Unity, even though it is initialized

我正在做我的 Unity 项目,这是在我编写 C# 脚本时发生的。只要此脚本附加的对象处于活动状态,它就会不断抛出 NullReferenceException。导致该异常的是 List<T>.Add() 函数,但我没有办法阻止它。 请注意,我已经初始化了列表,但它似乎没有正常工作。 (我需要的是一个解决方案,其他的可以稍后。)

这是我的脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Tracer : MonoBehaviour
{
    public float tracerSize;
    public int fadeCount;

    private MeshFilter mf;
    private Mesh mesh;
    private List<Vector3> positionArray;
    private List<int> index;
    private List<Color> clr;
    private List<Vector3> vec;

    private Transform trans;

    private Color tracerColor;

    void Start()
    {
        trans = GetComponentInParent<Transform>();
        tracerColor = GetComponentInParent<SpriteRenderer>().color;
        mf = GetComponent<MeshFilter>();

        index = new List<int>() { 0, 0, 0, 0, 0, 0 };
        clr = new List<Color>() { };
        vec = new List<Vector3>() { };
        mesh = new Mesh();
        mf.mesh = mesh;
    }

    
    void Update()
    {
        positionArray.Add(trans.position);
        if (positionArray.Count > fadeCount)
        {
            positionArray.RemoveAt(0);
        }
        
        mesh.Clear();
        index.Clear();
        clr.Clear();
        vec.Clear();
        
        for (int i = 1; i < fadeCount; i++)
        {
            int ii = (i - 1) * 4;
            index.AddRange(new int[] { 0 + ii, 1 + ii, 2 + ii, 2 + ii, 3 + ii, 0 + ii }); // throw!
            clr.Add(new Color(tracerColor.r, tracerColor.g, tracerColor.b, (tracerSize - i) / (float)tracerSize)); // throw!
            vec.AddRange(CalculateQuad(positionArray[i - 1], positionArray[i], (tracerSize - i + 1) / (float)tracerSize, (tracerSize - i) / (float)tracerSize)); // throw!
        }
        
        mesh.triangles = index.ToArray();
        mesh.colors = clr.ToArray();
        mesh.vertices = vec.ToArray();
    }

    private Vector3[] CalculateQuad(Vector3 f, Vector3 b, float sizf, float sizb)
    {
        Vector3 vec = f - b;
        Vector3 vecN = Vector3.Normalize(vec);
        Vector3 vecf = new Vector3(vecN.y, -vecN.x) * sizf, vecb = new Vector3(vecN.y, -vecN.x) * sizb;
        return new Vector3[]
        {
            vecf, -vecf, -vecb, vecb
        };
    }
}

我猜线上发生了 NullReferenceException

positionArray.Add(trans.position);

此变量已声明但未像其他列表一样在 Start() 函数中初始化

要调试此类问题,请检查错误日志,它应该会给你行。您可以使用 Debug.Log 打印您的变量并找到空变量。