我正在开发一个打乱文字游戏。有一个脚本主要处理实例化预制件的函数。该预制件由鱼的 2d 方形精灵和作为其子项的 TMP 文本组成。 TMP 文本保存实例化预制件时从 txt 文件加载的未加扰的单词。
还有另一个脚本可以处理这个预制件的移动。因此,给定速度和速度,带有附加单词的鱼将在屏幕上移动,并且当超出范围时也会破坏实例化的预制件(即用户无法及时猜出它)。
另一个脚本处理用户输入。
我遇到的问题是,当用户输入返回键或提交他们的单词时,我不知道如何“销毁”用户试图猜测的正确实例化预制件,因为通常同时有多个鱼在屏幕上。
我尝试保留这些游戏对象的列表,但我不确定如何动态更新它。
这个问题有点宽泛,但这就是我想要的:
有一个列表来跟踪您的实例,例如喜欢
// Assuming this is the class you have attached to your prefab
public class Fish : MonoBehavior
{
public static IReadOnlyList<Fish> Instances => _instances;
private static readonly List<Fish> _instances = new();
public string assignedWord;
private void Awake()
{
_instances.Add(this);
}
private void OnDestroy()
{
_instances.Remove(this);
}
}
这样,在应用程序中的任何点,您都可以通过
Fish
简单地访问和迭代 Fish.Instances
的当前现有/活动实例。
然后您可以获取该单词的具体实例,例如
//using System.Linq;
var instance = Fish.Instances.FirstOrDefault(fish => fish.assignedWord.Equals(userInput));
if(instance != null)
{
// Valid guess => handle and destroy instance
}
else
{
// Invalid guess
}
如果单词 a 实际上是独一无二的,您甚至可以选择
Dictionary<string, Fish>
来代替。