c# - 为什么 Unity 会调整我的 C# 列表的大小每 17 秒变为 0?
问题描述
我有一个 C# 列表:
List<UniqueBlip> blips;
每次检测到对象时都会添加一个新的 blip。如果检测到最新的 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);
这些 blips 是在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。
解决方案
解决方案是在我的脚本方法中,我在一定数量的循环后update()
调用。list.Clear()
我把我的add_blip()
方法当作我的update()
循环,缩小我的搜索范围。感谢@GlennvanAcker 的建议。
推荐阅读
- javascript - 在 Stimulus 框架中使用 DataTables 的问题
- database-connection - H2 数据库从哪里提取最新的数据库连接并将它们添加到 .h2.server.properties?
- sql - 使用 IF/ELSE 语句将列添加到 SQL 中的现有表
- list - Markdown:在嵌套列表之后继续列表中的文本
- python - Python PyQt5 将不再显示此消息复选框添加到 QMessageBox
- xamarin - 在 XF 5.0.0.2012 中将 Visual as Material 设置为 Xamarin.Forms Entry 控件时无法获取 Android 本机元素
- javascript - IndexedDB 成功与不必要的比赛
- gatsby - 使用了不安全的内置方法,未来的构建将需要重建所有页面 - gatsby build
- python - OpenCV中使用MouseCallBack的可拖动矩形
- pine-script - Pine Script - 在任何先前会话的特定时间范围的最高点绘制水平线,无论我当前会话如何