【问题标题】:Is there a way to store both Image and string variables in one array? (Unity)有没有办法将图像和字符串变量存储在一个数组中? (统一)
【发布时间】:2019-05-27 15:19:04
【问题描述】:

我正在制作一个统一的 3D 游戏,玩家可以在其中与图像和注释进行交互(大约 3-4 段)。

我创建了画布,当玩家与地面上的笔记交互时,菜单(画布)会弹出。

我想知道,有没有办法将字符串变量与 Image gameObjects 存储在同一个数组中? 另外,我将在画布上使用这些图像,所以我应该创建为图像还是 Sprite?

【问题讨论】:

  • 最简单的方法是创建一个包含字符串和图像的类,并将该类存储在您的集合中(数组、列表或其他)。
  • 在 c# 中,有这个“object[] arr”,我们可以在其中存储不同类型的变量(int、string 等),但据我了解,这不是统一,c#?
  • 我 99.99% 确信 Unity 没有以某种方式从 C# 中删除 System.Object :)
  • @runoraca 问题是......你需要它做什么?你这样做的目的是什么?
  • 你也可以使用私有元组 (string yourString, Image yourImage)[] yourArray;

标签: c# arrays unity3d


【解决方案1】:
  1. 如果你想让它们成为 UI 组件,你应该创建 Image 组件。

  2. 我想您可以通过将列表定义为两个对象的共同祖先来实现这一点; Object:

var list = new List<object>();

list.Add("Hello");
list.Add(5);
list.Add(MyImage);

foreach (object obj in list) 
{
    if (obj is string) 
    {
        Debug.Log(obj.ToString());
    }
}

【讨论】:

  • 问题当然是这不会很有用......你当然可以这样做,但你必须在需要时将元素解析为特定类型。 myImageReference.ToString 通常只返回与myImageReference.gameObject.name 相同的结果(参见Object.ToString).. 如果某些东西已经是is string,那么为什么还要使用ToString
  • 成功了!!一直以来,我都试图像声明一个局部变量(在类内部但在任何函数外部)一样初始化数组,应该在函数内部完成。当我使用 object[] arr 时,两个变量都被分配到该数组中。太感谢了! @弗雷德里克
  • @runoraca object[] 的问题只是大小是固定的,之后您不能添加元素(至少不是那么简单)。 List&lt;object&gt; 是动态的,会随着您添加的元素而增长
  • @derHugo,这不是建议 - 更多的是关于如何区分条件语句中不同类型的快速方法。如果对象是字符串,只是想与字符串有关,但是,回想起来 ToString 是非常愚蠢的,因为它不是你会在字符串上做的事情,呵呵。
【解决方案2】:

您应该使用一个共同的基类型,两者都从该基类型继承。如果您要存储的两件事都是例如MonoBehaviour 类型的,将其用作基本类型而不是 object 会很有意义。

public List<MonoBehaviour> List = new List<MonoBehaviour>();

这至少会为您提供MonoBehaviour/Component 实现的所有功能。听起来例如喜欢的人后来对.transform.position感兴趣。

如果您在谈论诸如 ImageText 之类的 UI 内容,您甚至可以使用 UI.MaskableGraphic 作为常用类型

public List<MaskableGraphic> List = new List<MaskableGraphic>();

它提供了更多与 UI 相关的属性,例如colorcanvas

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多