Запуск локальной функции в случайном скрипте
Пытаюсь не громоздко (не создавая баз) решить проблему, у меня есть string содержащий имя скрипта в ассетах, и мне нужно зная имя скрипта как-то в него пролезть, и запустить в нём статическую локальную функцию . Вопрос такой, как мне имея на руках string с текстовым названием скрипта сформировать ссылку на запуск этой функции?
string W = «Superscript»;
Локальная функция Function()<>
И мне нужно получить подобную конструкцию: Superscript.Function();
#1
15:17, 28 июля 2022
Короче я пока только вижу дополнительный скрипт содержащий подобные ссылки на запуск функции в в других скриптах, и отправляя в этот скрипт нужное название другого скрипта, он смотря в базе своих ссылок будет запускать нужную. Это не совсем то, чего бы мне хотелось, вернее совсем не то. Мне бы обойтись без этой базы.
Даниил Петров
Вопрос немножко не в тему, но не задать не могу 🙂 какие сейчас требования для комфортной работы редактора UE? Сам когда-то хотел осваивать сие изделие для разработки своих игр, но гораздо комфортней оказалось разрабатывать свой инструментарий.
Ту раздел про Unity.
#2
15:39, 28 июля 2022
Reflection не решает вашей проблемы? Если у вас есть название класса, то можно же его отрефлексить и запустить статический метод ваш.
#3
16:02, 28 июля 2022
Я с этим не знаком, сейчас по гуглил, выглядит как возможное решение, но не могу найти подходящего примера, самому ничего работающего пока собрать не удалось.
#4
16:14, 28 июля 2022
using System; using System.Reflection; public class MagicClass < private int magicBaseValue; public MagicClass( ) < magicBaseValue = 9; > public int ItsMagic( int preMagic) < return preMagic * magicBaseValue; > > public class TestMethodInfo < public static void Main( ) < // Get the constructor and create an instance of MagicClass Type magicType = Type.GetType( "MagicClass"); ConstructorInfo magicConstructor = magicType.GetConstructor( Type.EmptyTypes); object magicClassObject = magicConstructor.Invoke( new object[]<>); // Get the ItsMagic method and invoke with a parameter value of 100 MethodInfo magicMethod = magicType.GetMethod( "ItsMagic"); object magicValue = magicMethod.Invoke( magicClassObject, new object[]100>); Console.WriteLine( "MethodInfo.Invoke() Example\n"); Console.WriteLine( "MagicClass.ItsMagic() returned: ", magicValue); > >
Пример с MSDN. Вам вроде он подходит, для статической функции пишут null передавать надо в качестве аругмента, если я правильно понял.
#5
16:53, 28 июля 2022
Ну мне не нужно искать\создавать объекты, я просто пытаюсь сформировать ссылку для запуска void.
Эти примеры с сайта майкрософта вообще каловые, там как всегда много мусора, и ничего сжатого и по делу.
И тут вообще треш начался, для «Type» нужна «using System;», но ведь мы же в юнити, и используется «using UnityEngine;». Так вот, в скрипте есть много где «Random», и этот рандом собака и там и там присутствует, и создаётся конфликт в скрипте, так-как он обращается к рандомам в обеих библиотеках.
Мою задачу можно решить поиском компонента на геймобджекте имея название компонента в string, опять же как, хз.
#6
19:27, 28 июля 2022
То ли я не понимаю, что вам надо, то ли непонятно, что у вас не получается.
Вам нужно вызвать статический метод другого класса, имея только названия в виде строк, так?
Вот статический метод в типе:
using UnityEngine; public sealed class TargetType < public static void LogStatic( ) < Debug.Log( "Calling static method"); > >
using System; using UnityEngine; public sealed class StaticLauncher : MonoBehaviour < public void CallStaticMethod( ) < var type = Type.GetType( "TargetType"); var methodInfo = type.GetMethod( "LogStatic"); methodInfo.Invoke( null, null); > >
Все вроде работает, только что проверил в редакторе.
TERMOGAD
> Так вот, в скрипте есть много где «Random», и этот рандом собака и там и там
> присутствует, и создаётся конфликт в скрипте, так-как он обращается к рандомам
> в обеих библиотеках.
Это решается alias’ами.
#7
21:17, 28 июля 2022
Это работает, если я делаю это в скрипте, в котором нет конфликта с библиотеками.
Однако мне это неудобно, лишний скрипт создавать, ещё из него данные отправлять.
Алиасы были бы решением, но для меня это очередная штука, с которой я не сталкивался.
У меня появилось ещё больше вопросов, я нашёл такую информацию:
Но я нигде не нашёл ответов на эти вопросы:
1. Конкретно где находится System.DLL
2. Почему MVS помечает «extern» как ошибку в коде.
3. Как этот самый rsp файл присобачить к проекту, чтобы он работал.
4. Нигде не написано как потом использовать в скрипте псевдоним DLL.
#8
21:58, 28 июля 2022
Короче, нафиг эти алиасы.
У меня был конфликт только с рандомом, решил его так:
using Random = UnityEngine.Random;
Теперь я спокойно использую «type» пользуясь «System».
public void CallStaticMethod()
Благодарю за урок по Reflection.
#9
23:12, 28 июля 2022
TERMOGAD
> using Random = UnityEngine.Random;
Я это и имел ввиду под Alias’ом. Видимо, спутал терминологию, сорян.
TERMOGAD
> Благодарю за урок по Reflection.
Имейте ввиду, что рефлексия не самая быстрая операция и если ее интенсивно использовать в критичном по производительности участке, то лучше кэшировать результаты.
#10
0:51, 29 июля 2022
Имейте ввиду, что рефлексия не самая быстрая операция и если ее интенсивно использовать в критичном по производительности участке, то лучше кэшировать результаты.
Я разрабатываю карточную игру. Эффекты карт осуществляются через самостоятельные скрипты привязанные к геймобджектам. Мне была необходима проверка условия того, что ИИ сможет использовать эту карту в момент своего хода. Так-как все карты уникальные, для каждой нужно писать уникальную проверку. Чтобы лишний раз не спавнить геймобджекты, я запихал в эти скрипты статические функции с проверкой условия. У ИИ как правило на руке не больше 7 карт, он проверят их на наличие эффектов, а после если эффекты имеются запускает на них проверку пригодности к использованию в ходу. Зная имя карты в string я теперь могу залезть в соответствующий практически одноимённый скрипт и провести проверку. Кешировать результаты смысла не имеет, так-как после использования эффекта на игровом поле может измениться всё. В данный момент в коде всё работает, и это прекрасно, скорость работы меня устраивает.
Unity. Вызов функции из другого скрипта
Помогите дописать код
Нужно чтобы при таче по кнопке выполнялась функция (func1) из другого скрипта (anotherScript).
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Button: MonoBehaviour < private void OnMouseDown() < >>
Отслеживать
1,512 1 1 золотой знак 9 9 серебряных знаков 16 16 бронзовых знаков
задан 1 ноя 2019 в 17:00
1,298 2 2 золотых знака 9 9 серебряных знаков 20 20 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Button: MonoBehaviour < GameObject TargetObj; //не забудь перетащить в инспекторе сюда нужный обьект private SomeMonoBehavior _actionTarget; //замени SomeMonoBehavior на название скрипта public void Start() < _actionTarget = TargetObj.GetComponent(); > private void OnMouseDown() < _actionTarget.Method(); >>
Отслеживать
ответ дан 1 ноя 2019 в 17:32
Andrew Stop_RU_war_in_UA Andrew Stop_RU_war_in_UA
19k 6 6 золотых знаков 35 35 серебряных знаков 98 98 бронзовых знаков
using System.Collections; using System.Collections.Generic; using UnityEngine; public anotherScript anotherS; public class Button: MonoBehaviour < private void OnMouseDown() < anotherS = GetComponent(); anotherS.func1(); //Обязательно в другом скрипте у func1() должен быть модификатор доступа //public //Перетаскиваешь другой скрипт на объект и добавляешь его в появившееся //поле anotherS у основного > >
Отслеживать
ответ дан 7 авг 2021 в 10:20
Tripple_six Tripple_six
11 1 1 бронзовый знак
- c#
- unity3d
- touch
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как использовать функцию из другого скрипта unity
Мне часто задают вопрос о том, как обратиться из какого-либо скрипта к переменной другого скрипта, или как вызвать метод (функцию) другого скрипта. В этой маленькой статейке я бы хотел описать способы, которые можно для этого использовать.
Публичные переменные и доступ к компонентам
Допустим есть у нас такой скрипт
// скрипт, к переменной которого мы хотим получить доступ
public class ScriptWithVariable
// переменная, к которой мы хотим получить доступ
public int myPublicVariable ;
>
- Назначить ссылку на скрипт ScriptWithVariable в редакторе через публичную переменную
- Получить ссылку на скрипт ScriptWithVariable в начале работы скрипта
- Получать скрипт перед изменением
public class VariableChanger
// переменная, которая отобразится в редакторе Unity
// и на которую надо перетащить скрипт ScriptWithVariable с того же или иного объекта сцены
public ScriptWithVariable scriptWithVariable ;
public void Update ()
// изменение нужной нам переменной
scriptWithVariable . myPublicVariable ++;
>
>
Второй вариант подразумевает поиск скрипта у объекта и сохранение ссылки на него.
Допустим мы забыли указать скрипт с помощью редактора, но знаем что он должен быть, тогда можно написать код, который его найдет в начале работы скрипта.
public class VariableChanger
// переменная, которая отобразится в редакторе Unity
// и на которую надо перетащить скрипт ScriptWithVariable с того же или иного объекта сцены
public ScriptWithVariable scriptWithVariable ;
// добавляем код поиска
public void Awake ()
scriptWithVariable = GetComponent < ScriptWithVariable >();
>
public void Update ()
// изменение нужной нам переменной
scriptWithVariable . myPublicVariable ++;
>
>
Третий вариант самый не оптимальный для использования в каждом кадре (Update вызывается каждый кадр). Но зато эффективен для разового использования т.к. нет необходимости в создании переменной-ссылки на нужный нам скрипт.
public class VariableChanger
public void Start ()
// изменение нужной нам переменной
GetComponent < ScriptWithVariable >(). myPublicVariable = 100500 ;
>
>
Вызов методов других скриптов
Все что описано про публичные переменные относится и к вызову методов.
Имеем скрипт:
// скрипт, метод которого мы хотим вызвать
public class ScriptWithVariable
public int myPublicVariable ;
// метод который надо вызвать
public void ChangeVariable ()
myPublicVariable ++;
>
>
Ну и собственно пример вызова:
public class VariableChanger
public void Start ()
// изменение нужной нам переменной путем вызова метода скрипта
GetComponent < ScriptWithVariable >(). ChangeVariable ();
>
>
Вызвать метод скрипта объекта можно так же послав сообщение этому объекту (не скрипту). Но данный способ медленнее описанного выше.
public class VariableChanger
public void Start ()
// изменение нужной нам переменной путем вызова сообщения
SendMessage ( «ChangeVariable» );
>
>
Данный способ вызовет метод ChangeVariable на всех скриптах текущего объекта, в которых он объявлен с тем же именем.
Ну вот и все что хотел рассказать. Данная статья так же есть на wiki
__________________
Blitz3d to Unity Wiki
| 31.07.2012, 00:19 | #2 |
Черный крыс
Сообщений: n/a
Ответ: Как скрипты общаются
Спасибо pax! В очередной раз отлично прояснил ситуацию.
Попутный вопрос в догонку насчет функции\метода SendMessage(). А как обьекту послать помимо сообщения еще и контекст сообщения ?
В БМаксе — все просто — SendMessage:Object(message:Object, context:Object)
Конечно, можно контекст «впихнуть» в саму мессагу, но хотелось бы как в БлицМаксе =)
| Черный крыс |
| 31.07.2012, 00:47 | #3 |
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Как скрипты общаются
функция SendMessage принимает вторым параметром object, т.е. что угодно. Следовательно можно написать например такой класс
public class MessageData
public GameObject context ;
>
и посылать сообщение например так:
SendMessage ( «LogContext» , new MessageData < context = this . gameObject >);
принимающая функция изменилась бы так:
public void LogContext ( MessageData messageData )
Debug . Log ( messageData . context );
>
__________________
Blitz3d to Unity Wiki
| 23.01.2013, 21:51 | #4 |
Регистрация: 23.01.2013
Адрес: Беларусь, Борисов
Сообщений: 8
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Как скрипты общаются
Всем привет!
А подскажите как быть, если переменную нужно взять из скрипта другой сцены, т.е. есть сцена со скриптом там переменная bool, мы можем ее менять на true и false, и такоеже значение она должна иметь в другой сцене. Зарание спасибо.
| artsiom.kuzmin.86 |
| Посмотреть профиль |
| Найти ещё сообщения от artsiom.kuzmin.86 |
| 23.01.2013, 22:18 | #5 |
Регистрация: 08.01.2013
Адрес: Самара
Сообщений: 284
Написано 104 полезных сообщений
(для 180 пользователей)
Ответ: Как скрипты общаются
В скрипте, переменная которого нужна в другой сцене нужно в Start использовать Object.DontDestroyOnLoad . ТОгда объект на котором этот скрипт не удалится при загрузке следующего уровня и скрипт будет доступен.
| 23.01.2013, 23:23 | #6 |
Регистрация: 23.01.2013
Адрес: Беларусь, Борисов
Сообщений: 8
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Как скрипты общаются
Большое спасибо!
А сам объект отобразится в новой сцене? Он то мне не нужен. И если не тяжело, можно ссылку на мануал с этой функцией. Я так понял ее так вот писать:
а потом вызывать одним из описаных методов?
| artsiom.kuzmin.86 |
| Посмотреть профиль |
| Найти ещё сообщения от artsiom.kuzmin.86 |
| 23.01.2013, 23:54 | #7 |
Регистрация: 23.01.2013
Адрес: Беларусь, Борисов
Сообщений: 8
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Как скрипты общаются
ссылку не нужно, уже нашел.
| artsiom.kuzmin.86 |
| Посмотреть профиль |
| Найти ещё сообщения от artsiom.kuzmin.86 |
| 24.01.2013, 16:37 | #8 |
Регистрация: 23.01.2013
Адрес: Беларусь, Борисов
Сообщений: 8
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Как скрипты общаются
Извените, а немогли бы краткий пример написать, а то чета не могу понять, а в справке всего один пример?
| artsiom.kuzmin.86 |
| Посмотреть профиль |
| Найти ещё сообщения от artsiom.kuzmin.86 |
| 24.01.2013, 16:48 | #9 |
Регистрация: 24.05.2011
Адрес: Украина,Харьков
Сообщений: 890
Написано 359 полезных сообщений
(для 880 пользователей)
Ответ: Как скрипты общаются
Переменные, к которым вы обращаетесь в разных сценах лучше хранить на каком нибуть донт дестрой обьекте. У вас этот обьект будет просто перемещаться между сценами и к переменным всегда будет доступ.
__________________
Нам суждено построить мосты и храмы,которых никогда не существовало и не могло существовать в природе.
| 24.01.2013, 16:54 | #10 |
Регистрация: 23.01.2013
Адрес: Беларусь, Борисов
Сообщений: 8
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Как скрипты общаются
Пробавал как-так, ScriptName это имя скрипта на объекте
void Start() ScriptName other;
other = gameObject.GetComponent(«ScriptName») as ScriptName;
other.DontDestroyOnLoad()
>
| artsiom.kuzmin.86 |
| Посмотреть профиль |
| Найти ещё сообщения от artsiom.kuzmin.86 |
| 24.01.2013, 17:15 | #11 |
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Как скрипты общаются
DontDestroyOnLoad ( other )
__________________
Blitz3d to Unity Wiki
| 25.01.2013, 20:12 | #12 |
Регистрация: 23.01.2013
Адрес: Беларусь, Борисов
Сообщений: 8
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Как скрипты общаются
Всем спасибо, разобрался, теперь тока одна проблема : когда в сцене меняю значение bool переменной, все работает как нужно, перехожу в след. сцену моя переменная с правильным значением тоже(радости нет предела), все работает как нужно, возвращаюсь в исходную сцену и (радость кончилась) значение переменной осталось исходным. Че с этими клонами объектов то делать, я так понял скрипт берет значение переменной с оригинала, а не с клона скрипта.Объекта.
| artsiom.kuzmin.86 |
| Посмотреть профиль |
| Найти ещё сообщения от artsiom.kuzmin.86 |
| 25.01.2013, 20:41 | #13 |
Регистрация: 24.05.2011
Адрес: Украина,Харьков
Сообщений: 890
Написано 359 полезных сообщений
(для 880 пользователей)
Ответ: Как скрипты общаются
Сделать проверку на существование обьекта. Обьект не просто вставить в сцену, а инстансить его в старте и при этом проверять существование клонов.
__________________
Нам суждено построить мосты и храмы,которых никогда не существовало и не могло существовать в природе.
| 25.01.2013, 21:32 | #14 |
Регистрация: 23.01.2013
Адрес: Беларусь, Борисов
Сообщений: 8
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Как скрипты общаются
У меня в сцене1 два объекта, однин со скриптом действия, в нем тогглам меняется значение бул переменной. Второй со скриптом в котором я нахожу первый объект и беру зна.чение переменной, пока все хорошо, значения меняются синхронно в переменных обоих скриптов. Второй скрипт сделал донтдистракт. Переходим во вторую сцену : изночально в ней был только один объект со скриптом который находит появившийся донтдистракт объект и берет значение переменной(значение переменной из первой сцены, после изменения, а не дефолтное) и корректно выполняет свое предназначение(поко все хорошо), но перейдя из сцены2 в 1, мы имеем уже два донтдистройт объекта и значение переменной берецца из первого, а если снова перейти в сцену 2, то там тоже появился еще один донтдистройт объект, но значение переменной осталось такоеже, как при первом переходе.
Так вот как этого избежать? Чтобы донтдистракт объект был как-бы один, а не копировался, и перемесчался из сцены в сцену?
| artsiom.kuzmin.86 |
| Посмотреть профиль |
| Найти ещё сообщения от artsiom.kuzmin.86 |
Вызов метода из другого скрипта

Вызов метода из другого скрипта
Всем привет, не могу вызвать публичный метод из другого скрипта. Вот 1 скрипт: using.
Вызов метода из другого скрипта
Здравствуйте. Есть скрипт Grid и скрипт TIle. В Grid пытаюсь вызвать метод из Tile, но получается.

Вызов функции из другого скрипта
Доброго времени суток. Проблема заключается в следующем, имеется два скрипта (script1 и script2).
Вызов часть кода из другого скрипта
Всем привет, почему функция со второго скрипта не может исполниться? У меня есть 3 сцены: 1. В.
гуглю вместо тебя
236 / 154 / 87
Регистрация: 20.05.2021
Сообщений: 429
Вот так «GetComponent
если перед GetComponent нет конкретизации откуда брать, он попытается взять компонент со своего объекта
лучше написать конечно же:
PlayerControls playerControls = GetComponentPlayerControls>(); playerControls.Move();
Скорее всего у тебя PlayerControls на игроке, а MapController на карте (на двух разных объектах)
можно сделать так:
1 2 3 4 5 6
[SerializeField] private PlayerControls playerControls; //в инспекторе юнити закинь сюда объект на котором скрипт public void Next() { playerControls.Move(); }
Регистрация: 30.09.2020
Сообщений: 126
raygman, объект игрок на карте появляется только в момент захода игрока на сцену(карту)
так же игроков может быть несколько на карте (надо было сразу это написать чтоб всё было понятно)
метод Next() вызывается после нажатия на кнопку
гуглю вместо тебя
236 / 154 / 87
Регистрация: 20.05.2021
Сообщений: 429
а, понял, раз несколько игроков может заходить на сцену и тд., значит и код кем-то написался.
Карта может узнать, что игрок подключился и также может знать кто нажимает её
можно через тригеры, события, обычные методы, посредников (система данных)
Вообще, сначала определи насколько событие является глобальным
Регистрация: 06.04.2022
Сообщений: 172
SkiprDAG, эти 2 скрипта на одном объекте висят?
Регистрация: 30.09.2020
Сообщений: 126
vladpad92, MapController висит на пустом объекте уже на сцена
а PlayerControls создается в момент создания объекта(префаб с скриптом) игрока(когда игрок заходит на сцену)
691 / 459 / 205
Регистрация: 05.04.2015
Сообщений: 1,897
Сообщение от SkiprDAG 
PlayerControls создается в момент создания объекта
Ну тогда и пишите логику в нем, что мешает, там тоже есть метод Update. Надо будет искать компонент MapController, он уже на сцене GameObject.Find(«Map»).GetComponent один раз нашел и закэшировал в Startе
Регистрация: 30.09.2020
Сообщений: 126
zhunshun, если скрипт на игроке то я не могу добавить его на кнопку что бы назначить на неё метод(т.к. его ещё нет на сцене) а просто кинуть скрипт не удаётся(слева если накинуть просто скрипт а справа если объект со скриптом(сам перенёс игрока на сцену и кинул его в кнопку))
Регистрация: 06.04.2022
Сообщений: 172

Сообщение было отмечено SkiprDAG как решение
Решение
SkiprDAG, Я сам новичек и решил сам сделать подобное, просто чтоб понять как это сделать и может тебе помогу. Создал два объекта и по 1му скрипту к каждому объекту, в 1ом скрипте я прописал публичную переменную int1 и метод изменения его ++int. Во втором тоже прописал публичный int2, присвоил ему значение int1 из первого скрипта и новым методом вызывал метод из первого скрипта. Все работало но выдовало ошибку как у тебя пока объекта с первым скриптом нету, когда объект появляется ошибка пропадает. 1ый Объект Искал в Update и поэтому этих ошибок выдавало много, в update добавил if если 1ый объект не null, то мы его ищем. И все работает без ошибок, и Метод вызывается;
Вот пример
1 2 3 4 5 6 7 8
public class VasScript : MonoBehaviour { public int _vas = 0; public void ChangeVas() { ++_vas; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ublic class DasScript : MonoBehaviour { public int _das; void Update() { if (GameObject.Find("Vas") != null) { _das = GameObject.Find("Vas").GetComponentVasScript>()._vas; } } public void ChangeVass() { GameObject.Find("Vas").GetComponentVasScript>().ChangeVas(); } }
Добавлено через 2 минуты
Объект искал по имени Объекта, но можно и по тегу и может еще как
Добавлено через 29 секунд
И метод из второго скрипта вызывал кнопкой
Добавлено через 6 минут
Кстати Update вообще можно убрать если только нужно вызвать метод, не меняя ничего во втором скрипте
691 / 459 / 205
Регистрация: 05.04.2015
Сообщений: 1,897

Сообщение было отмечено SkiprDAG как решение
Решение
SkiprDAG, Ох, не знаю что вы там делаете. Если кнопка есть на сцене то можно на нее после добавления плеера на сцену добавить событие, повесь на кнопку скрипт
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
using UnityEngine; using UnityEngine.UI; public class AddEvent:MonoBehaviour{ PlayerControls player; void Start(){ player = GameObject.Find("Player").GetComponentPlayerControls>(); } void Update(){ if(player!=null){ GetComponentButton>().onClick.AddListener(() => {player.YouMaethod();});//YouMaethod public return; } } }
Добавлено через 11 минут
запутался 7 строку надо в апдеит переместить
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
using UnityEngine; using UnityEngine.UI; public class AddEvent:MonoBehaviour{ PlayerControls player; void Start(){ } void Update(){ GameObject p = GameObject.Find("Player"); if(p!=null){ player = p.GetComponentPlayerControls>(); GetComponentButton>().onClick.AddListener(() => {player.YouMaethod();});//YouMaethod public return; } } }
Добавлено через 4 минуты
А лучше в плеере наити кнопку и там
Добавлено через 1 минуту
там прамо в старте