Страница 1 из 2

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

СообщениеДобавлено: 12 окт 2021, 15:40
Merfik933
я написал скрипт покупки некоторого объекта который принимает 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); //создает обьект
        }
               
    }

я там немного попытался обяснить его работу (Простите за ошибки)

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

СообщениеДобавлено: 12 окт 2021, 16:19
1max1
public void Buy ((int[] BuyResourseIndex, int[] price, GameObject Product) tuple)

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

СообщениеДобавлено: 12 окт 2021, 16:39
waruiyume
https://docs.unity3d.com/2018.3/Documen ... Click.html
В справке есть пример использования через лямбды и делегаты.

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

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

Так один хрен нельзя исользовать несколько параметров, от этих делегатов толку, все равно что писать промежуточный метод и вызывать его

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

СообщениеДобавлено: 13 окт 2021, 14:53
Merfik933
1max1 писал(а):public void Buy ((int[] BuyResourseIndex, int[] price, GameObject Product) tuple)

функции все равно нет в кнопке

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

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

Извиняюсь за то что я глупенький, но я ничего там не понял...

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

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

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

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

Емм.. спасибо, наверное. Но если я сделаю так как вы говорите то метод утратит свою универсальность, то есть для каждого случая мне придется писать отдельный метод Buy. А это, я думаю не есть лучшим решениям. Ну.. или я чего то не понимаю.

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

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

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

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

Я не знаю почему кортеж не помог. Походу создать кнопку сразу с несколькими параметрами просто невозможно. Массивы тоже нельзя использовать...
И как я понял лямбды это замена методам но я не понял как мне ее использовать в скрипте.
Так что я думаю как-то зашифровать параметры в один, а потом в методе расшифровать. Ну или как-то попытаться сделать несколько методов и как-то связать их.

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

СообщениеДобавлено: 14 окт 2021, 13:16
Tolking
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)
}

}

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

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

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

    }

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

СообщениеДобавлено: 14 окт 2021, 15:05
samana
Насколько я понимаю, то автор темы хочет, чтобы все эти параметры были видны в инспекторе у кнопки, при назначении ей метода для события OnClick.

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

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

Да, Вы правы. Я хотел получить один скрипт для множества кнопок, чтобы параметры можно было задавать в инспекторе Button. Я пытался сделать это с помощью массива, но Button параметры массивов тоже не принимает

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

СообщениеДобавлено: 14 окт 2021, 16:34
1max1
Это нельзя сделать из коробки, забудь.
Хотя можно было бы кинуть ссылку на кастомный инспектор, но судя по твоему уровню, тебе до туда еще лет 5)) (ну может меньше, хз).