我有一个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。