我的游戏有在不同地方产生的对象,而且总是有不同的数量。当玩家触摸该对象时,对象消失,并且向变量point添加1点。我需要计算场景中所有这些物体的数量,然后将这个数字与point进行比较,如果point等于场景中物体的初始数量,那么特定的事件就会发生。我的问题是我不知何故需要计算派生对象的数量。
point
avkwfej41#
如果不知道“派生”脚本的结构,提供解决方案将是一个挑战。但作为一个总体思路,您可以选择:A.保留一个计数器(例如numberOfExistentObjects),该计数器每增加一个新的GameObject就增加一次,并且当它在被玩家触摸时被销毁时减少一次
numberOfExistentObjects
GameObject
if(numberOfExistentObjects == point){...}
B.通过在列表(或array)中保持引用(如List<GameObject> mySpawnedGameObjects = new())来引用您新示例化/衍生的游戏对象,并在创建或销毁时分别添加或删除其元素。
List<GameObject> mySpawnedGameObjects = new()
.Count
如果由于某种原因无法保留引用,或者需要其他方法,可以使用FindObjectsOfType<T>获取特定type的所有GameObjects,因此,如果所有“可触摸”对象都有TouchableObject类(或接口),则可以执行以下操作:
FindObjectsOfType<T>
type
GameObjects
TouchableObject
FindObjectsOfType<TouchableObject>().Select(x => x.gameObject).ToArray();
b1zrtrql2#
在这种情况下,我更喜欢在我的预置上有一个专用组件,它允许直接对示例进行简单的计数/迭代:
public class Example : MonoBehaviour { private static readonly HashSet<Example> _instances = new(); public static IReadOnlyCollection<Example> Instances => _instances; private void Awake () { _instances.Add(this); } private void OnDestroy () { _instances.Remove(); } }
这样,任何其他对象都可以通过
var amount = Example.Instances.Count; foreach(var instance in Example.Instances) { ... }
2条答案
按热度按时间avkwfej41#
如果不知道“派生”脚本的结构,提供解决方案将是一个挑战。但作为一个总体思路,您可以选择:
A.保留一个计数器(例如
numberOfExistentObjects
),该计数器每增加一个新的GameObject
就增加一次,并且当它在被玩家触摸时被销毁时减少一次if(numberOfExistentObjects == point){...}
的方式创建比较B.通过在列表(或array)中保持引用(如
List<GameObject> mySpawnedGameObjects = new()
)来引用您新示例化/衍生的游戏对象,并在创建或销毁时分别添加或删除其元素。.Count
获取该集合中的元素数,并将其与point
变量进行比较。如果由于某种原因无法保留引用,或者需要其他方法,可以使用
FindObjectsOfType<T>
获取特定type
的所有GameObjects
,因此,如果所有“可触摸”对象都有TouchableObject
类(或接口),则可以执行以下操作:b1zrtrql2#
在这种情况下,我更喜欢在我的预置上有一个专用组件,它允许直接对示例进行简单的计数/迭代:
这样,任何其他对象都可以通过