У меня есть класс в Unity 2017, который показывает только некоторые общедоступные методы в инспекторе.
using System.Collections.Generic;
using UnityEngine;
public class Inventory : MonoBehaviour
{
List<ShipPart> _inventory;
int currentInvPosition = 0;
bool invExists = false;
// Use this for initialization
void Start () {
CreateInventory(0, 0);
}
// Show all inventory parts as gameobjects
public void CreateInventory(int quality, int part)
{
...
}
void DestroyInventory()
{
...
}
public void ScrollInvLeft()
{
...
}
public void ScrollInvRight()
{
...
}
void UpdateInv(float offset)
{
...
}
public void AddInventoryItem(ShipPart newShipPart)
{
...
}
public void RemoveInventoryItem(ShipPart oldShipPart)
{
...
}
public void Test1(){}
public void Test2(int i){}
}
Я подумал, что это может быть из-за того, что невидимые методы имеют параметры, поэтому я добавил два последних метода. Однако в инспекторе они видны!
Я пытаюсь вызвать методы из раскрывающегося элемента пользовательского интерфейса, но также протестировал их с помощью кнопки, и он тоже не видит их.
Что я делаю неправильно?
Поскольку ShipPart
не является базовым типом (int, float, string, bool, ...), вы не сможете вызвать его с помощью инспектора. Не знаю, сработает ли это, если ShipPart
наследуется от UnityEngine.Object
(например, ScriptableObject
)
@Hellium - хорошо, что объясняет методы добавления / удаления, однако CreateInventory использует целые числа и не отображается в инспекторе
Как сказал Хеллиум, если вы наследуете от UnityEngine.Object, вы должны увидеть два скрытых метода; хотя, если вы наследуете Object, вам может потребоваться отрегулировать часть вашего кода
Если вы не хотите наследовать, тогда одним из решений является button.onClick.AddListener(() => yourfunctionname);
. Конечно, вам нужно будет настроить параметры для него в скриптах.
CreateInventory
имеет параметры два, и Unity не может обрабатывать функции с двумя или более параметрами. Проверьте Учебник по Unity здесьКак указано в официальные руководства по Unity, если вы хотите предоставить функцию событию в инспекторе, функция должна соответствовать следующим требованиям:
public
void
.int
float
string
bool
UnityEngine.Object
или любой тип, унаследованный от UnityEngine.Object
(например, GameObject
, MonoBehaviour
, ScriptableObject
, ...)Спасибо - как-то упустил, что будет принимать только один параметр.
Трудно понять из того, что вы спросили. Test1 () и Test2 () будут видны, потому что они общедоступны? DestroyInventory () не является общедоступным, поэтому не отображается?