【问题标题】:Unity3D/C# - add a variable to gameobjectUnity3D/C# - 向游戏对象添加变量
【发布时间】:2015-11-24 22:42:28
【问题描述】:

如何向游戏对象添加变量? GameObjects 有一系列变量(名称、变换、...),可以从任何脚本访问和修改。我如何添加可以从其他脚本访问或修改的变量,例如“颜色”或“类型”。 谢谢。

【问题讨论】:

  • 只需公开你的变量并添加你的游戏对象对它们的引用。
  • 你能给我举个例子吗?我不确定我是否理解(我是 c# 新手)谢谢
  • 添加示例...

标签: c# unity3d gameobject


【解决方案1】:

如果GameObject 不是密封类,那么继承可能是解决您问题的方法。在这种理想情况下,您可以尝试以下方法。

public class ExtraGameObject : GameObject
{
    // Logically you could make use of an enum for the 
    // color but I picked the string to write this example faster.
    public string Color { get; set; }
}

解决您的问题的方法可能是如下声明您的类:

public class ExtraGameObject
{
    public string Color { get; set; }

    public GameObject GameObject { get; set; }
}

我知道这不是您想要的,而是您想要的,由于GameObject 的密封性质,我认为无法做到。

【讨论】:

  • 谢谢,试图声明一个继承自 GameObject 的类给我一个错误:“错误 CS0509:ExtraGameObject': cannot derive from sealed type UnityEngine.GameObject'”。我猜像 Seth 说的不能将变量添加到 GameObject 中。
  • @cubecube 我不知道这一点 :( 我认为我更新的帖子可能会为您提供解决方案。
  • 感谢克里斯托斯,我实际上正在尝试找出另一种方法来实现我所需要的(我是 c# 新手)。我不确定是否清楚:如果我实例化一个 GameObject 并将脚本附加到它(使用 AddComponent),我如何从另一个脚本中读取该附加脚本的变量?
【解决方案2】:

作为c# GameObject 类中的每个对象继承Object 类。如果您右键单击 GameObject 并选择转到定义,您将在下面看到。

为了获得一个对象的变量,您需要一个引用(不考虑静态变量)。所以如果你想改变一个游戏对象的变量,你需要一个参考。 在 Unity 检查器上,您可以将值分配给脚本的公共变量。下面你可以看到箭头的 Obj 端。现在将立方体(是一个 GameObject )分配给 Obj。 拖放后

现在您可以访问立方体对象的每个子组件。在红色矩形中,我到达了它的变换组件并改变了它的位置。

我希望我正确理解了您的问题。GL。

【讨论】:

  • 感谢 Burak 的精彩回答!到目前为止,我已经理解了你解释的这个原理。 (我希望它能帮助其他人阅读这个线程:))我的问题是我如何向 GameObject 添加一个新变量。 GameObject 有一组组件,例如 Transform、Name 等。现在我想知道是否可以添加诸如颜色或日期之类的组件或其他任何内容。但从其他回答的人看来,这是具有挑战性的。 Seth bellow 发布了一个链接,但对我来说现在太复杂了。
  • 谢谢。阅读您的评论后,我在互联网上搜索了您的问题。有趣的问题。首先,我通过互联网查看了有关添加一个特殊组件的信息,但我找不到太多,因此即使存在它也可能不是一个常见主题。在 unity3d 中,我从组件继承了一个类,并以编程方式添加到我的一个游戏对象中。但它被认为是脚本。会搜索更多,我认为它是关于 Unity 结构的基础。
  • Burak,感谢您的搜索,我也搜索了一段时间,没有找到太多,所以我发布了这个问题。我用一些代码问了一个派生问题,这可能是获得我想要的东西的另一种方法,请看一下:stackoverflow.com/questions/33906741/…
【解决方案3】:

克里斯托斯的回答是正确的。您不能将变量添加到 GameObject 数据类型,因为它是作为基础内置于语言中的。要将变量添加到预制数据类型,请扩展它们。有关继承的更多信息,请参阅

https://msdn.microsoft.com/library/ms173149(v=vs.100).aspx

【讨论】:

  • 感谢 Seth,我觉得我太新手了,无法将变量添加到预制数据类型中。我需要一些时间来理解,但我会尝试 :) 谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多