【问题标题】:identify id players onclick unity识别 id 玩家 onclick unity
【发布时间】:2020-09-14 08:53:15
【问题描述】:

(Unity) 我正在使用新的输入系统和 MultiplayerEventSystem,有 4 个活跃玩家。到目前为止,每个玩家都有自己的对象 Root(容器)可供选择,但我遇到了一个场景,其中 4 个玩家将有相同的 UI 按钮可供选择,然后出现了我不知道解决的问题:如何识别哪个玩家按下了按钮(onclick)?我不知道在按钮的 OnClick 方法中包含什么类型的变量来返回一些值,该值允许我链接到执行该操作的玩家。需要帮助。

【问题讨论】:

    标签: function unity3d events onclick identify


    【解决方案1】:

    也许会为每个玩家生成一个他们独有的 id,(我只知道 qb64 有一些源自 c++ 的内容)。当他们单击所述按钮时,它会将该号码发送给您。也许显示名称旁边的数字? (ei XxbanananxX:655731)

    【讨论】:

      【解决方案2】:

      每个玩家实例化时都应该有一个ID,如果没有,就给他们分配一个。

      当播放器与按钮交互时,将其 ID 传递给 onClick 方法。

      例如作为伪代码:

      private void OnClick(int playerID)
      {
          //Do your button stuff, knowing playerID 
          if(playerID == 1)
              //Do something
          else
              //Do something else
      }
      

      【讨论】:

      • 根据您的情况,我可以建议使用玩家数组,或者在随机ID的情况下使用玩家字典,以便您可以通过索引直接访问玩家:private void OnClick(int playerIndex) { players[playerIndex].DoSomething(); }
      【解决方案3】:

      使用对玩家的对象引用并在 OnClick 事件中传递它。这样可以防止管理索引引入的一些抽象,并且您可能不需要单独管理播放器列表。另一个优点是,IntelliSense 可以更有助于管理此类代码。

      根据您的情况,这可以是对场景中玩家游戏对象的 GameObject 或脚本引用(例如附加到 GameObject 的 PlayerMonobehaviour.cs),或引用人类玩家的某些 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);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多