c# - 如何在 Unity C# 中为实例化对象提供唯一 ID
问题描述
我环顾四周寻找在 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++;
}
}
我是初学者,因此不胜感激。这是我第一次使用数组,它为我的项目创造了奇迹!
解决方案
我建议改用该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...
}
推荐阅读
- python - 我们如何从pickle文件中获取注释,这将告诉我们存储的对象数量和pickle文件中的详细信息?
- python - 通过 .bat 文件执行时 pd.merge 抛出错误
- node.js - 无法在节点 10.16.0 上运行 Angular-cli
- html - 搜索框占位符以我的方式向左对齐
- regex - bash 脚本中的 Perl 命令不是解释命令(实际上是替换它)
- java-8 - Log4j:将生成的日志文件名设置为包含主机名
- php - 如何启用php?
- html - Chrome 在 iPhone 上的页面周围添加了一个缺口
- r - 在 R 中使用带有比例/百分比因变量的 glmrob 函数
- winforms - Windows 服务无法打开 Windows 窗体