Unity3D/C# - 给游戏对象添加一个变量

3

如何向一个GameObject添加变量? GameObjects有一系列的变量(名称,转换等),可以从任何脚本中访问和修改。我该如何添加一个变量,例如“颜色”或“类型”,以便在其他脚本中可以访问或修改。 谢谢。


只需将您的变量设为公共变量,并将您的gameObject的引用添加到它们中。 - Burak Karasoy
能否给我一个例子?我不确定是否理解(我是C#的新手)。谢谢。 - cubecube
1
添加一个示例... - Burak Karasoy
4个回答

2
作为c#中的每个对象,GameObject类都继承自Object类。如果您右键单击GameObject并选择转到定义,则会看到以下内容。enter image description here 要访问一个对象的变量,您需要一个引用(不考虑静态变量)。因此,如果您想从其他对象更改一个GameObject的变量,则需要一个引用。 enter image description here 在Unity检查器中,您可以为脚本的公共变量分配值。下面您可以看到箭头结束处的Obj。现在将cube(是一个GameObject)分配给Obj。 enter image description here 拖放后

enter image description here

现在,您可以访问cube对象的每个子组件。在红色矩形中,我访问了它的Transform组件并更改了它的位置。 enter image description here 我希望我正确理解了您的问题。祝您好运。

谢谢Burak的出色回答!我已经理解了你所解释的原则。 (我希望它能帮助其他人阅读这个线程 :))我的问题是如何向GameObject添加一个新变量。 GameObject具有一组组件,例如Transform,Name和其他组件。现在我想知道是否可以添加诸如Color或日期或其他任何组件。但是从其他回答的人来看,这似乎很具挑战性。 Seth在下面发布了一个链接,但对我来说现在太复杂了。 - cubecube
谢谢。我在阅读了您的评论后在互联网上搜索了您的问题。有趣的问题。首先我在互联网上查找如何添加特殊组件,但没有找到很多信息,所以即使存在这样的组件,它可能也不是一个常见的主题。在Unity3D中,我继承了一个类并将其编程方式添加到我的gameObject中。但它被认为是脚本。我会继续搜索,我认为这与Unity结构的基础有关。 - Burak Karasoy
Burak,谢谢你的搜索,我也搜索了一段时间,没有找到太多信息,所以我发布了这个问题。我提出了一个衍生问题,并附上了一些代码,这可能是获取我想要的内容的另一种替代方式,请看一下: http://stackoverflow.com/questions/33906741/access-dynamically-added-component-in-unity3d-c-sharp/33906910#33906910 - cubecube

2
如果 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的类,但是出现了错误:“error CS0509:ExtraGameObject':无法从密封类型UnityEngine.GameObject'派生”。我猜像Seth说的那样,变量不能添加到GameObject中。 - cubecube
@cubecube 我不知道这个 :( 我认为我的更新帖子可能会为您提供一个解决方案。 - Christos
谢谢Christos,我实际上正在尝试找到另一种实现我需要的东西的方法(我是C#新手)。我不确定是否清楚:如果我实例化一个GameObject并附加一个脚本(使用AddComponent),如何从另一个脚本中读取该附加脚本的变量? - cubecube

0

谢谢Seth,我太菜了,不知道如何将变量添加到预制数据类型中。我需要一些时间来理解,但我会尝试的 :) 谢谢 - cubecube

0

您可以使用Instantiate方法将脚本添加到预制体中,从而创建对象。在此脚本中,您声明公共变量。 然后,您可以使用GetComponent方法更改和获取此变量的值。

将以下代码添加到预制体(预制体名称为thatPrefab,脚本文件名为IdDeclarer)中作为组件:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class IdDeclarer : MonoBehaviour
{
    public int id;
}

声明对象的特征(例如ID):

GameObject newObject = Instantiate(thatPrefab, new Vector3(0, 0, 0), Quaternion.identity) as GameObject;

newObject.GetComponent<IdDeclarer>().id = 99;
Debug.Log(newObject.GetComponent<IdDeclarer>().id);

输出:99

希望对你有所帮助


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接