繁体   English   中英

Unity中GameObject的参考脚本类

[英]Reference script class to GameObject in Unity

我有一个建筑物的类,我想将其连接到建筑物的游戏对象。 在该类中,我具有以下属性:名称,级别,信息。 我拥有建筑物的资产(如农场,城堡,港口之类的东西)。 我有一个Game类,在其中创建对象。 游戏类用于存储对象,因此可以在整个游戏中调用它们,从而可以像这样将游戏保存为负载。

通过谷歌搜索无法真正找到想要的东西,我也很难描述我的意思。

建筑类:

[System.Serializable]
public class BuildingObject
{
    public string name;
    public int level;
    public string information;

    public BuildingObject(string information)
    {
        this.name = "";
        this.level = 0;
        this.information = information;
    }
}

这是我创建对象的Game类。 我希望在GameObject内引用创建的对象,因此我可以通过在其他文件中使用它们并保持某些gameObject级别的进度来调用某些gameObjects的属性。

public static Game current;

public BuildingObject church;
public BuildingObject castle;
public BuildingObject fort;
public BuildingObject farm;
public BuildingObject pub;
public BuildingObject houses;

public PlayerObject player;

public StoryObject story;

public Game()
{
    church = new BuildingObject("Informatie over de kerk");
    castle = new BuildingObject("Informatie over het kasteel");
    fort = new BuildingObject("Informatie over het fort");
    farm = new BuildingObject("Informatie over de boerderij");
    pub = new BuildingObject("Informatie over de kroeg");
    houses = new BuildingObject("Informatie over de huizen");

    player = new PlayerObject();

    story = new StoryObject();
}

我想根据GameObjects连接/引用Game对象内创建的对象。 如果我在层次结构中创建了一个城堡GameObject,那么我希望在GameObject内拥有城堡Object的属性。 如果有另一种更好或更简单的方法,请让我知道,我是团结的新手。

使用预制件

您可以存储要在层次结构中创建的gameObjects模板。 您需要将脚本作为Component附加,可以通过调用GameObject.GetComponent<BuildingObject>()来引用。

据我了解,您需要从MonoBehavior继承建筑对象:

public class BuildingObject : MonoBehavior

然后创建一个空的游戏对象(预制),并将此BuildingObject组件添加到其中。 然后,您可以向场景中添加尽可能多的建筑物(带有BuildingObject组件的那些预制件)并配置其参数。

如果我理解正确,那么Game类就是场景中某些GameObject的组件。 因此,您可以将这些建筑物(场景中的GameObjects)拖放到Game类中的变量(对BuildingObject的引用)中,而不用在代码中创建这些BuildingObjects。

如果需要在Game类(或其他任何类)中动态创建新建筑物,则需要在该类中创建对BuildingObject预制件的引用(并将建筑物预制件拖放到Game类中的该引用):

public BuildingObject buildingPrefab;

然后,您将可以在Game类中动态创建更多新建筑物(带有建筑物组件(脚本)的GameObjects),如下所示:

BuildingObject newBuilding = Instantiate(buildingPrefab);

它将把新建筑物作为新的GameObject添加到场景中。 然后对这些建筑物做任何您想做的事情:)

您应该使用ScriptableObjects而不是预制件。

ScriptableObjects是由Unity序列化的资产,可以在播放模式下进行编辑并部署到构建中。

它们提供了MonoBehaviour的所有优点,但是它们没有任何更新流程(Update,FixedUpdate,LateUpdate和任何实时GamePlay方法),也不必在场景中实例化为GameObject。

cf: https//docs.unity3d.com/Manual/class-ScriptableObject.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM