【问题标题】:How to count score on all players from non player object如何计算来自非玩家对象的所有玩家的得分
【发布时间】:2016-08-21 20:15:25
【问题描述】:

我一直在尝试使用 unity 5.4 和 c# 制作火箭联盟类型的游戏。

我已经得到了所有的球员工作和游戏区。玩家由网络生成器生成,球由球生成器生成,就像教程中的敌人生成器一样。我有两个球可以碰撞球并重置球的位置。但是我如何告诉球员有一个进球呢?我到处找,找不到一个很好的例子来说明如何从球向球员传递信息。我有一个文本用户界面,它显示在所有球员的相机上,并且使用 2 个变量来计算得分,所以我想要的是在球与球门碰撞时以某种方式增加这些变量。

据我所知,RPC 调用仅在球员对象之间起作用,如果我尝试在球和球员之间使用它们,syncvars 似乎不起作用,任何人有任何提示或可以告诉我我错过了什么?

编辑:对于有同样问题的人。我通过创建一个 scoreManager 对象并让它将分数作为同步变量来解决这个问题,然后我得到了 scoremanager 组件及其脚本并增加了球的分数,然后也为球员获取它并获取分数。

【问题讨论】:

    标签: unity5 unity-networking unity3d-unet


    【解决方案1】:

    假设您使用的是 UNet。这是来自与健康同步的教程:

       [SyncVar(hook = "OnChangeHealth")]  
       public int currentHealth = maxHealth;
    
       void OnChangeHealth(int cH)
       {
            healthBar.value = (float)cH / maxHealth;
       }
    

    healthBar 是滑块。

    这里有关于[ClientRPC][Command]的解释 http://docs.unity3d.com/Manual/UNetActions.html

    【讨论】:

    • 我试过了,但它对玩家没有任何改变,我想我得再看看它,但据我了解,它有效,因为敌人和玩家使用相同的健康脚本,在这种情况下,球和球员不共享相同的脚本
    • 在我的测试游戏(基于本教程)中,只有玩家有健康脚本。即使那样,我认为您的客户端应用程序具有相同的 UI 和脚本,所以它是相同的。您是否从NetworkBehaviour 继承您的脚本?
    • 是的,我也试过给球 localclientauthority
    • 然后试试这个:使用[Command] 增加服务器上的分数,并在此函数结束时发送[ClientRpc] 将新值发送给客户端。或者尝试调试你的游戏,也许目标根本没有触发
    • 我不明白,我已经给了球预制客户端本地权限,然后我做了 2 个同步变量(greenscore,redscore)。在 balls 脚本中,我在 playercontroller 脚本中有相同的同步变量。但这些永远不会更新。球确实与目标发生碰撞,但计算得分的 rpc 函数没有更新 playercontroller 脚本中的变量,我错过了什么!
    【解决方案2】:

    对于有同样问题的人。我通过创建一个 scoreManager 对象并让它将分数作为同步变量来解决这个问题,然后我得到了 scoremanager 组件及其脚本并增加了球的分数,然后也为球员获取它并获取分数。

    【讨论】:

      猜你喜欢
      • 2021-07-28
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多