Unity не показывает общедоступные методы в поле события

У меня есть класс в 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){}

}

Я подумал, что это может быть из-за того, что невидимые методы имеют параметры, поэтому я добавил два последних метода. Однако в инспекторе они видны!

Я пытаюсь вызвать методы из раскрывающегося элемента пользовательского интерфейса, но также протестировал их с помощью кнопки, и он тоже не видит их.

Unity не показывает общедоступные методы в поле события

Что я делаю неправильно?

Трудно понять из того, что вы спросили. Test1 () и Test2 () будут видны, потому что они общедоступны? DestroyInventory () не является общедоступным, поэтому не отображается?

Thalthanas 02.05.2018 12:04

Поскольку ShipPart не является базовым типом (int, float, string, bool, ...), вы не сможете вызвать его с помощью инспектора. Не знаю, сработает ли это, если ShipPart наследуется от UnityEngine.Object (например, ScriptableObject)

Hellium 02.05.2018 12:09

@Hellium - хорошо, что объясняет методы добавления / удаления, однако CreateInventory использует целые числа и не отображается в инспекторе

Wyeknott 02.05.2018 12:13

Как сказал Хеллиум, если вы наследуете от UnityEngine.Object, вы должны увидеть два скрытых метода; хотя, если вы наследуете Object, вам может потребоваться отрегулировать часть вашего кода

killer_mech 02.05.2018 12:28

Если вы не хотите наследовать, тогда одним из решений является button.onClick.AddListener(() => yourfunctionname);. Конечно, вам нужно будет настроить параметры для него в скриптах.

killer_mech 02.05.2018 12:38
CreateInventory имеет параметры два, и Unity не может обрабатывать функции с двумя или более параметрами. Проверьте Учебник по Unity здесь
Hellium 02.05.2018 12:40
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
1 727
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как указано в официальные руководства по Unity, если вы хотите предоставить функцию событию в инспекторе, функция должна соответствовать следующим требованиям:

  1. Функция должна быть public
  2. Функция должна иметь тип возврата void.
  3. Функция должна принимать параметр нет или один
  4. Если функция принимает один параметр, последний должен быть одного из следующих типов:
    • int
    • float
    • string
    • bool
    • UnityEngine.Object или любой тип, унаследованный от UnityEngine.Object (например, GameObject, MonoBehaviour, ScriptableObject, ...)

Спасибо - как-то упустил, что будет принимать только один параметр.

Wyeknott 02.05.2018 12:52

Другие вопросы по теме