(Unity) Я использую новую систему ввода и MultiplayerEventSystem с 4 активными игроками. До сих пор у каждого игрока был свой Корень (контейнер) объектов для выбора, но я наткнулся на сцену, в которой 4 игрока будут иметь одинаковые кнопки пользовательского интерфейса, доступные для выбора, и тут возникла проблема, которую я не знаю, как решить: как определить, какой игрок нажал кнопку (onclick)? Я не знаю, какой тип переменной включить в метод OnClick кнопки, чтобы вернуть какое-то значение, позволяющее мне связать с игроком, выполнившим действие. Нужна помощь.
определить id игроков onclick unity
Ответы (3)
возможно, сгенерировать уникальный идентификатор для каждого игрока (я знаю только qb64, который имеет некоторые корни в C++). и когда они нажимают указанную кнопку, он отправляет вам этот номер. может быть, отображать номер рядом с именем? (е.и. XxbanananxX:655731)
Когда создается экземпляр каждого игрока, он должен иметь идентификатор, если нет, назначьте его.
Когда игрок взаимодействует с кнопкой, передайте ее идентификатор в метод onClick.
например, как псевдокод:
private void OnClick(int playerID)
{
//Do your button stuff, knowing playerID
if(playerID == 1)
//Do something
else
//Do something else
}
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);
}