【问题标题】:Matching objects in a drag and drop game在拖放游戏中匹配对象
【发布时间】:2012-04-14 14:46:13
【问题描述】:

我正在开发一个教育游戏,我在其中为用户提供选择的单词。目标是通过单独拖动每个单词并将其排列在提供的区域上,将这些单词排列成一个句子。我已经准备好将每个单词拖到上面的平面,但我不确定如何确定用户是否已将他们的单词拖到句子中的正确位置。

我想也许我可以为每个单词提供一个 ID/Tag,并为每个平面提供一个相关的 ID/Tag。当两者发生碰撞时,我可以比较两个 ID,如果它们匹配,则认为这是一个成功的放置。

我想知道是否有其他人有更好的解决方案,因为我不确定解决这个问题的最佳方法?

【问题讨论】:

  • 您能提供更多信息吗?单词的位置与平面上的固定位置有关吗?它们不应该相互关联,而不是平面中的位置(链接单词,如链表或拼图)?

标签: c# unity3d gameobject


【解决方案1】:

你的想法很好,我不明白为什么不这样做。根据你的实现方式,如果你有很多单词,你可以做很多工作,对吧?

我建议你这样做:制作一个包含 2 个碰撞器(及其各自的游戏对象)和一个脚本的预制件。一个单词碰撞器和一个正确位置的碰撞器。该脚本将从某处(资源 xml、编辑器中的字段等)读取并应用单词的初始位置和“正确位置”对撞机的位置。该脚本还将读取其他信息(如实际单词)并对这些对象进行所有配置。

通过这种方式,您可以轻松地将“word prefabs”拖到您的场景中并单独配置它们。

此外,您可以在场景中使用一个外部脚本来代表该“关卡”(如果该概念适用于您的游戏...),而不是拖动此预制件。这里的想法是该脚本可以在运行时加载该“级别”的预制件。它甚至可以传递预制脚本的所有数据来配置对象,就像我之前说的那样。

我忘了说最重要的区别:在这种方法中,您不必担心 ID。它们属于同一个 GameObject 父级,因此您可以轻松地在脚本中检索所需的对象。

【讨论】:

  • 感谢您的回答。如果我理解的话,我将需要创建一个带有 2 个碰撞器和一个脚本的预制件。我已经创建了 5 个游戏对象(5 个立方体,每个立方体都附加了一个单词……所以不是随机的),在它们上添加了拖放脚本和 5 个白色平面(用于放置)。它们都有一个刚体和一个对撞机。现在,你说我应该创建一个带有 2 个碰撞器的预制件。你的意思是我应该在我的 Prefab 中包含这 10 个对象吗?
  • 因为拖放脚本已经附加到我的多维数据集上,在这个级别不需要担心。如果没有任何标签或 ID,您将如何调用每个单独的对象?谢谢。
  • 嗨。我的想法是创建一个预制件,它代表一个带有正确位置的单词,即一个带有单词的立方体和一个带有“正确位置”(平面)的游戏对象,因此,2 个游戏对象,加上一个脚本来控制这 2 个游戏对象和一个作为其父级的游戏对象(预制游戏对象)。由于它们属于同一个游戏对象父对象(预制游戏对象),因此它们可以很容易地找到彼此(GetChild()、GetComponent() ...),因此,没有 ID。这是一种更加单一的模块化方法,可以帮助您构建多个级别。
  • 如果您的想法是只有一个级别(一个“短语”?,一个场景),那么是否值得按照我的方式做是值得商榷的。如果所有的游戏只有 5 个单词,那么标记对象和比较就可以了,而且实现起来最快。
  • 好的,我明白了。我会试试你的想法。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-25
相关资源
最近更新 更多