определить id игроков onclick unity

(Unity) Я использую новую систему ввода и MultiplayerEventSystem с 4 активными игроками. До сих пор у каждого игрока был свой Корень (контейнер) объектов для выбора, но я наткнулся на сцену, в которой 4 игрока будут иметь одинаковые кнопки пользовательского интерфейса, доступные для выбора, и тут возникла проблема, которую я не знаю, как решить: как определить, какой игрок нажал кнопку (onclick)? Я не знаю, какой тип переменной включить в метод OnClick кнопки, чтобы вернуть какое-то значение, позволяющее мне связать с игроком, выполнившим действие. Нужна помощь.


person Cláudio Nienow    schedule 27.05.2020    source источник


Ответы (3)


возможно, сгенерировать уникальный идентификатор для каждого игрока (я знаю только qb64, который имеет некоторые корни в C++). и когда они нажимают указанную кнопку, он отправляет вам этот номер. может быть, отображать номер рядом с именем? (е.и. XxbanananxX:655731)

person Patrick Coots    schedule 27.05.2020

Когда создается экземпляр каждого игрока, он должен иметь идентификатор, если нет, назначьте его.

Когда игрок взаимодействует с кнопкой, передайте ее идентификатор в метод onClick.

например, как псевдокод:

private void OnClick(int playerID)
{
    //Do your button stuff, knowing playerID 
    if(playerID == 1)
        //Do something
    else
        //Do something else
}
person Lotan    schedule 27.05.2020
comment
В зависимости от вашего случая, я могу предложить использовать массив игроков или, в случае случайных идентификаторов, словарь игроков, чтобы вы могли получить доступ к игроку напрямую по индексу: private void OnClick(int playerIndex) { players[playerIndex].DoSomething(); } - person Guney Ozsan; 27.05.2020

Используйте ссылки на объекты для игроков и передайте их в событии OnClick. Таким образом, вы можете избежать некоторой абстракции, связанной с управлением индексами, и вам может не понадобиться отдельно управлять списком игроков. Другое преимущество заключается в том, что IntelliSense может быть более полезным при управлении таким кодом.

В зависимости от вашего случая это может быть ссылка GameObject или скрипта на игровой объект игрока в сцене (например, PlayerMonobehaviour.cs, прикрепленный к GameObject), или некоторый объект C#, который ссылается на игроков-людей.

// Object reference can be something like:
// Player player, GameObject player, PlayerMonobehaviour player, ...
private void OnClick(Player player)
{
    // Control player directly,...
    player.DoSomething();

    // ...or publish an event with player as the event argument.
    // and let other scripts do what they want with the player.
    Clicked?.Invoke(player);
}
person Guney Ozsan    schedule 27.05.2020