Почему этот сценарий может обращаться к другому сценарию без его создания? - PullRequest
0 голосов
/ 30 марта 2020

Я следовал учебнику, в котором кто-то написал "publi c Inventory Container;" с помощью которого он мог получить доступ к данным из сценария инвентаризации. Почему это возможно? Я думал, что вы можете получить доступ к неинстанцированному скрипту, только если он установлен c. Спасибо за помощь

Первый сценарий:

        [CreateAssetMenu(fileName = "New Inventory",  menuName = "Inventory System/Inventory")]
public class InventoryObject : ScriptableObject
{
    public Inventory Container;

    public void AddItem(Item _item, int _amount)
    {
        if (_item.buffs.Length > 0)
        {
            Container.Items.Add(new InventorySlot(_item.Id, _item, _amount));
            return;
        }

        for (int i = 0; i < Container.Items.Count; i++) //Checks if already has the item.
        {
            if(Container.Items[i].item.Id == _item.Id)
            {
                Container.Items[i].AddAmount(_amount); /*If the item already exits, it just increases the number of it. 
                AddAmount works, because the Container consists of InventorySlot.*/
                return;
            }
        }
            Container.Items.Add(new InventorySlot(_item.Id, _item, _amount)); /*If Item doesn't exist, it adds it using the InventorySlot Constructor.*/ 
    }
}

Доступ к сценарию:

   [System.Serializable]
    public class Inventory
    {
        public List<InventorySlot> Items = new List<InventorySlot>();
    }

1 Ответ

1 голос
/ 30 марта 2020

Inventory равно Serializable, что означает, что когда вы изменяете Container в инспекторе при редактировании вашей игры, Unity будет сериализовать этот экземпляр.

Затем, когда игра запускается, Unity десериализует ее и присваивает ей значение Container для любого экземпляра InventoryObject, который вы редактировали.

См. Документация Unity для получения более подробной информации:

Окно инспектора

Когда вы просматриваете или изменяете значение поля компонента GameObject в окне инспектора, Unity сериализует эти данные и затем отображает их в Инспекторе окно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...