Ссылочный класс скрипта на GameObject в Unity - PullRequest
1 голос
/ 03 июня 2019

У меня есть класс для здания, и я хочу подключить его к игровому объекту здания.В классе у меня есть свойства: имя, уровень, информация.У меня есть актив зданий (такие вещи, как ферма, замок, гавань).У меня есть класс Game, где я создаю объекты.Класс игры используется для хранения объектов, чтобы их можно было вызывать в течение всей игры, чтобы игра могла быть сохранена в таком виде.

Я не могу найти то, что хочу, с помощью Google,Мне также трудно описать, что я имею в виду.

Класс Building:

[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, чтобы я мог вызывать свойства определенных gameObjects, используя их в других файлах и сохраняя прогресс уровня определенного gameObject.

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();
}

Я хочу подключиться /ссылаться на созданные объекты внутри объекта Game в соответствии с GameObjects.Если я создал замок GameObject в иерархии, мне нужны свойства объекта Castle внутри GameObject.Если есть другой лучший или более простой способ, пожалуйста, дайте мне знать, я новичок в единстве.

Ответы [ 2 ]

2 голосов
/ 03 июня 2019

Использование Префабы

Вы можете хранить шаблоны gameObjects, которые будут созданы в вашей иерархии.Вам нужно будет прикрепить ваш скрипт как Component, на который можно ссылаться посредством вызова GameObject.GetComponent<BuildingObject>()

0 голосов
/ 03 июня 2019

Насколько я понимаю, вам нужно наследовать ваш Строительный объект от MonoBehavior:

public class BuildingObject : MonoBehavior

Затем создайте пустой игровой объект (prefab) и добавьте в него этот компонент BuildingObject. Затем вы можете добавить на сцену столько зданий (те сборные с компонентом BuildingObject) и настроить их параметры.

Если я правильно понимаю, класс Game является компонентом некоторого GameObject в вашей сцене. Поэтому вы можете перетаскивать эти здания (GameObjects в сцене) в свои переменные (ссылки на BuildingObject) в классе Game вместо создания этих BuildingObjects в коде.

Если вам нужно динамически создавать новые здания в классе Game (или в любом другом), вам необходимо создать ссылку на префаб BuildingObject в классе (и перетащить свой сборный дом на эту ссылку в классе Game) :

public BuildingObject buildingPrefab;

Тогда вы сможете динамически создавать больше новых зданий (GameObjects со строительным компонентом (скриптом)) в классе Game, например:

BuildingObject newBuilding = Instantiate(buildingPrefab);

Что добавит новое здание как новый GameObject на сцену. А потом делай что хочешь с этими зданиями:)

...