如何在Unity中销毁特定的实例化预制件?

问题描述 投票:0回答:1

我正在开发一个打乱文字游戏。有一个脚本主要处理实例化预制件的函数。该预制件由鱼的 2d 方形精灵和作为其子项的 TMP 文本组成。 TMP 文本保存实例化预制件时从 txt 文件加载的未加扰的单词。

还有另一个脚本可以处理这个预制件的移动。因此,给定速度和速度,带有附加单词的鱼将在屏幕上移动,并且当超出范围时也会破坏实例化的预制件(即用户无法及时猜出它)。

另一个脚本处理用户输入。

我遇到的问题是,当用户输入返回键或提交他们的单词时,我不知道如何“销毁”用户试图猜测的正确实例化预制件,因为通常同时有多个鱼在屏幕上。

我尝试保留这些游戏对象的列表,但我不确定如何动态更新它。

unity-game-engine game-development instantiation
1个回答
0
投票

这个问题有点宽泛,但这就是我想要的:

有一个列表来跟踪您的实例,例如喜欢

// 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>
来代替。

© www.soinside.com 2019 - 2024. All rights reserved.