Почему в Button можно вызывать функцию только с одним арг.

Программирование на Юнити.

Почему в Button можно вызывать функцию только с одним арг.

Сообщение Merfik933 12 окт 2021, 15:40

я написал скрипт покупки некоторого объекта который принимает 3 аргумента (BuyResourseIndex - индекс Ресурса за который игрок покупает объект, Price - его количество, Product - собственно сам покупаемый объект). Но из-за ограничения принимаемых аргументов, я не могу его добавить в Button. Может кто-то знает как его убрать или как-то переписать скрипт. Вот скрипт (он может быть не рабочий так как я его не мог проверить)
Синтаксис:
Используется csharp
public void Buy (int[] BuyResourseIndex, int[] price, GameObject Product)
    {
        bool TradeAsses = true; //разрешения на продажу
        int CoutResourses = BuyResourseIndex.Length; //количество ресурсов (тоесть Обьект может продаваться не только за один ресурс(например два камня и три древесины) Поэтому price и BuyResourseIndex это массивы)
        while (CoutResourses > 0 || TradeAsses == true) //пересчитывает ресурсы до тех пор пока они не кончаться или пока есть разрешения на покупку
        {
            if (Resourses[BuyResourseIndex[CoutResourses - 1]] /* */ < price[CoutResourses - 1]) //проверяет достаточно ли ресурсов на покупку (Resourses это массив из количества Рессурсов). если нет отключает разрешения на продажу
            {
                TradeAsses = false;
            }
            CoutResourses--; //Для перещитывания
        }
        if (TradeAsses == true)
        {
            Instantiate(Product, Product.transform.position, Quaternion.identity); //создает обьект
        }
               
    }

я там немного попытался обяснить его работу (Простите за ошибки)
Аватара пользователя
Merfik933
UNец
 
Сообщения: 35
Зарегистрирован: 30 сен 2021, 16:10
Откуда: Украина

Re: Почему в Button можно вызывать функцию только с одним арг.

Сообщение 1max1 12 окт 2021, 16:19

public void Buy ((int[] BuyResourseIndex, int[] price, GameObject Product) tuple)
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Почему в Button можно вызывать функцию только с одним арг.

Сообщение waruiyume 12 окт 2021, 16:39

https://docs.unity3d.com/2018.3/Documen ... Click.html
В справке есть пример использования через лямбды и делегаты.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Почему в Button можно вызывать функцию только с одним арг.

Сообщение Alkos26Rus 12 окт 2021, 17:37

waruiyume писал(а):https://docs.unity3d.com/2018.3/Documentation/ScriptReference/UI.Button-onClick.html
В справке есть пример использования через лямбды и делегаты.

Так один хрен нельзя исользовать несколько параметров, от этих делегатов толку, все равно что писать промежуточный метод и вызывать его
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Почему в Button можно вызывать функцию только с одним арг.

Сообщение Merfik933 13 окт 2021, 14:53

1max1 писал(а):public void Buy ((int[] BuyResourseIndex, int[] price, GameObject Product) tuple)

функции все равно нет в кнопке
Аватара пользователя
Merfik933
UNец
 
Сообщения: 35
Зарегистрирован: 30 сен 2021, 16:10
Откуда: Украина

Re: Почему в Button можно вызывать функцию только с одним арг.

Сообщение Merfik933 13 окт 2021, 14:55

waruiyume писал(а):https://docs.unity3d.com/2018.3/Documentation/ScriptReference/UI.Button-onClick.html
В справке есть пример использования через лямбды и делегаты.

Извиняюсь за то что я глупенький, но я ничего там не понял...
Аватара пользователя
Merfik933
UNец
 
Сообщения: 35
Зарегистрирован: 30 сен 2021, 16:10
Откуда: Украина

Re: Почему в Button можно вызывать функцию только с одним арг.

Сообщение samana 13 окт 2021, 17:35

Суть кнопки просто выполнить команду, ей должно быть всё равно какую и с какими параметрами. Поэтому вызывайте по кнопке метод, ВНУТРИ которого уже будет вызван нужный вам метод Buy, со всеми необходимыми параметрами.
Впрочем вам ещё с самого начала об этом подсказали, но из-за нежелания разбираться, вы продолжаете искать легкий путь, которого не существует.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Почему в Button можно вызывать функцию только с одним арг.

Сообщение Merfik933 13 окт 2021, 22:01

samana писал(а):Суть кнопки просто выполнить команду, ей должно быть всё равно какую и с какими параметрами. Поэтому вызывайте по кнопке метод, ВНУТРИ которого уже будет вызван нужный вам метод Buy, со всеми необходимыми параметрами.
Впрочем вам ещё с самого начала об этом подсказали, но из-за нежелания разбираться, вы продолжаете искать легкий путь, которого не существует.

Емм.. спасибо, наверное. Но если я сделаю так как вы говорите то метод утратит свою универсальность, то есть для каждого случая мне придется писать отдельный метод Buy. А это, я думаю не есть лучшим решениям. Ну.. или я чего то не понимаю.
Аватара пользователя
Merfik933
UNец
 
Сообщения: 35
Зарегистрирован: 30 сен 2021, 16:10
Откуда: Украина

Re: Почему в Button можно вызывать функцию только с одним арг.

Сообщение 1max1 13 окт 2021, 22:25

Почему кортеж не подошел? Это же 1 аргумент. И тебе не надо создавать триллион методов под каждый аргумент, используй лямбды!
https://metanit.com/sharp/tutorial/3.16.php
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Почему в Button можно вызывать функцию только с одним арг.

Сообщение Merfik933 14 окт 2021, 11:53

1max1 писал(а):Почему кортеж не подошел? Это же 1 аргумент. И тебе не надо создавать триллион методов под каждый аргумент, используй лямбды!
https://metanit.com/sharp/tutorial/3.16.php

Я не знаю почему кортеж не помог. Походу создать кнопку сразу с несколькими параметрами просто невозможно. Массивы тоже нельзя использовать...
И как я понял лямбды это замена методам но я не понял как мне ее использовать в скрипте.
Так что я думаю как-то зашифровать параметры в один, а потом в методе расшифровать. Ну или как-то попытаться сделать несколько методов и как-то связать их.
Аватара пользователя
Merfik933
UNец
 
Сообщения: 35
Зарегистрирован: 30 сен 2021, 16:10
Откуда: Украина

Re: Почему в Button можно вызывать функцию только с одним арг.

Сообщение Tolking 14 окт 2021, 13:16

public class buyButtonFunction{
public type par1;
public type par2;
...
public type parN;

Start(){
getcompanent<Button>().onClick.AddListner(buy);
}

void buy(){
Shop.Buy(par1,par2,...,parN)
}

}
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2715
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Почему в Button можно вызывать функцию только с одним арг.

Сообщение 1max1 14 окт 2021, 15:01

Синтаксис:
Используется csharp
    void Start()
    {
        Button b2 = btn;
        b2.onClick.AddListener(() => keksik2(123, "asd", 123.0f));
    }

    void keksik2(int lox, string _4eburek, float lol_4to)
    {

    }
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Почему в Button можно вызывать функцию только с одним арг.

Сообщение samana 14 окт 2021, 15:05

Насколько я понимаю, то автор темы хочет, чтобы все эти параметры были видны в инспекторе у кнопки, при назначении ей метода для события OnClick.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Почему в Button можно вызывать функцию только с одним арг.

Сообщение Merfik933 14 окт 2021, 16:07

samana писал(а):Насколько я понимаю, то автор темы хочет, чтобы все эти параметры были видны в инспекторе у кнопки, при назначении ей метода для события OnClick.

Да, Вы правы. Я хотел получить один скрипт для множества кнопок, чтобы параметры можно было задавать в инспекторе Button. Я пытался сделать это с помощью массива, но Button параметры массивов тоже не принимает
Аватара пользователя
Merfik933
UNец
 
Сообщения: 35
Зарегистрирован: 30 сен 2021, 16:10
Откуда: Украина

Re: Почему в Button можно вызывать функцию только с одним арг.

Сообщение 1max1 14 окт 2021, 16:34

Это нельзя сделать из коробки, забудь.
Хотя можно было бы кинуть ссылку на кастомный инспектор, но судя по твоему уровню, тебе до туда еще лет 5)) (ну может меньше, хз).
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

След.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9