【问题标题】:How To give Unique Id's To Instantiated Objects In Unity C#如何在 Unity C# 中为实例化对象提供唯一 ID
【发布时间】:2019-03-04 11:04:44
【问题描述】:

我花了很长时间寻找在 Unity 中为实例化对象提供唯一 ID 的最佳方法。我找到了很多方法,但没有一种方法适用于我正在制作的游戏。 我想出了自己的方法来做到这一点,并认为我会分享!

这是用于我在主菜单中的 UI。我根据资源文件夹中有多少精灵来实例化按钮。我需要每个按钮来将玩家皮肤更改为不同的精灵,因此他们需要唯一的 ID。

将此脚本附加到我的按钮预制件中:

    public class ShopButtons : MonoBehaviour
{
    public static int[] buttonArray = new int[] {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    public static int arIndex = 0;

    public int buttonID;


    void Start()
        {
            if (buttonArray[arIndex] == 0)
            {
                buttonID = arIndex;
                buttonArray[arIndex] = 1;
            }
             arIndex++;
         }
}

我是初学者,因此非常感谢您的提示。这是我第一次使用数组,它为我的项目创造了奇迹!

【问题讨论】:

  • 只需使用Guids,简单得多。
  • 我不知道那些存在感谢您的提示!
  • 在构造函数中设置值可能也是一个好主意。

标签: c# unity3d


【解决方案1】:

我建议改用Guid 类型。它们有效地保证是唯一的,并且很容易由框架为您创建。此外,最好在构造函数中设置 ID。例如:

public class ShopButtons : MonoBehaviour
{
    public Guid UniqueId { get; }

    public ShopButtons() 
    {
        UniqueId = Guid.NewGuid();
    }

    //etc...
}

如果您要在多种类型中使用此概念,您甚至可以将其抽象为基类,例如:

public abstract class MonoBehaviourWithId : MonoBehaviour
{
    public Guid UniqueId { get; }

    public MonoBehaviourWithId() 
    {
        UniqueId = Guid.NewGuid();
    }
}

这会让你的 ShopButtons 类看起来更简单:

public class ShopButtons : MonoBehaviourWithId
{
    //etc...
}

【讨论】:

  • 你可以内联初始化这些:public Guid UniqueId { get; } = Guid.NewGuid()
  • 是的,我不想这样做。
  • 我收集到:我添加评论是为了让 OP 受益,他们可能更愿意这样做。
猜你喜欢
  • 2010-09-09
  • 2015-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 2017-11-25
相关资源
最近更新 更多