Unity中GameObject的参考脚本类

时间:2019-06-03 19:28:41

标签: c# unity3d gameobject

我有一个建筑物的类,我想将其连接到建筑物的游戏对象。在该类中,我具有以下属性:名称,级别,信息。我拥有建筑物的资产(如农场,城堡,港口之类的东西)。我有一个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并保持某些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的属性。如果有另一种更好或更简单的方法,请告诉我,我是团结的新手。

3 个答案:

答案 0 :(得分:2)

使用Prefabs

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

来引用

答案 1 :(得分:0)

据我了解,您需要从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添加到场景中。然后对这些建筑物做任何您想做的事情:)

答案 2 :(得分:0)

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

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

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

>

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