Unity为什么将我的C#List 每17秒调整为0?

问题描述 投票:-2回答:1

我有一个C#列表:

List<UniqueBlip> blips;

每次检测到对象时都会添加新的提示。如果检测到最新的Blip是其他Blip唯一的,它将统一创建一个游戏对象,表示雷达上的Blip,但是在我的情况下,Unity每17秒将列表的大小报告为0,从而导致C#的List方法[ .Contains()返回false,从而将另一个游戏对象添加到我的统一游戏中。这是调试输出:

blip size is 869
UnityEngine.MonoBehaviour:print(Object)
SonarMonitor:add_blip(Single, Single, Int32) (at Assets/scripts/MonitorScripts/SonarMonitor.cs:45)
SonarController:OnTriggerStay(Collider) (at Assets/scripts/SonarController.cs:33)
blip size is 0
UnityEngine.MonoBehaviour:print(Object)
SonarMonitor:add_blip(Single, Single, Int32) (at Assets/scripts/MonitorScripts/SonarMonitor.cs:45)
SonarController:OnTriggerStay(Collider) (at Assets/scripts/SonarController.cs:33)

这是相关的Debug.Log()

print("blip size is " + blips.Count);

这些blip是在调用add_blip()时添加的,这实际上是每个循环。我通过以下方式添加blip对象:

blips.Add(blip);

这里是整个add_blip()方法:

public void add_blip(float strength, float angle, int id){
    //only add if blip is unique to list
    // Debug.Log("add blip called");
    UniqueBlip blip = new UniqueBlip(id, angle, strength);

    Debug.Log("Called because Contains returned "+UniqueBlip.objCount+" " + blips.Contains(blip) + " test" + blips.Contains(blip)+ " with id " + id + blip.id + " index is " + blips.IndexOf(blip) + blips + " " + blip);
    print("blip size is " + blips.Count); [RELEVANT LINE - added in SO editor]
    if(blips.Contains(blip)){
        // blips[blips.IndexOf(blip)].angle = angle;
        // blips[blips.IndexOf(blip)].distance = strength;

    }else{

        for(int i = 0; i < blips.Count; i++){
            Debug.Log(blips[i].id);
        }
        Debug.Log("blip obj count " +"blip size is " + blips.Count+"Called because Contains returned " + blips.Contains(blip) + " test" + blips.Contains(blip)+ " with id " + id + blip.id + " index is " + blips.IndexOf(blip) + blips + " " + blip);
        blips.Add(blip);
        GameObject go = new GameObject("blip " + blips[blips.Count-1].id);
        go.transform.parent = this.transform;
        go.transform.localPosition = new Vector3(0.1810069f,
            .17f*(float)Math.Sin((Math.PI/180)*blips[blips.Count-1].angle),
            .17f*(float)Math.Cos((Math.PI/180)*blips[blips.Count-1].angle));
        go.transform.localRotation = Quaternion.Euler(0,90f,0);
        go.transform.localScale = new Vector3(0.022f,0.022f,0.022f);

        SpriteRenderer renderer = go.AddComponent<SpriteRenderer>();
        renderer.sprite = blip_spr;

    }
    blips.Add(blip);

}

一些可能相关的信息是,在UniqueBlip类中,我有一个静态对象计数整数,当列表显示时,它不会重置为0。

c# list unity3d
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.