3

我有一个播放器对象:网络身份和网络转换。也是一个具有 NetworkManager 的对象。当我连接 2 台电脑时。我可以看到两个球员的动作。那也行。但是我的比赛中有两个球。一绿一红。

这是改变球颜色的代码。

public Material Right = null;
     public Material Left = null;

      void OnCollisionEnter(Collision collider)
          { 
       if (collider.gameObject.name == "_RightBall")
             {  randomnumb = UnityEngine.Random.Range(0, 11);
                      if (randomnumb >= 5)
                      {
                          Right.color = Color.red;  
                     }
                      else
                      {
                          Right.color = Color.green;               
                     }
             }
       }

当球员击球时,球会改变颜色。它对两个玩家都很好。但是当一名球员改变了球的颜色时,他自己也会改变。不适用于其他玩家。当一名球员改变球的颜色时,我希望所有球员都能看到相同的颜色。我尝试添加网络身份并检查我的球的“本地玩家权限”。但它没有用。

4

1 回答 1

1

老路

RPC功能非常适合您正在谈论的内容。您可以通过发送多个 var RPC。它不发送变量名,而是发送它的值。

var ballcolor : int = 2;  

如果您发送 ballcolor ,您发送的是 2 号。在另一侧您对它感兴趣。

var ballcolor : int = 0;
@RPC
function WhatIsTheStatusOfBall( incomingBallColor : int){
   ballcolor = incomingBallColor;
}  

现在ballcolor是2。

你可以传递多个东西,比如

@RPC
function WhatIsTheStatusOfBall(BallLocation : Vector3, BallAngle : float, incTraveSpeed : float){  

那么您可以在本地使用这些 var。

这是有关如何使用它的更多信息。http://unity3d.com/support/documentation/Components/net-RPCDetails.html


回应您的评论:

新的方法

[Command]并且[ClientRpc]是新网络系统中的等效项。
您可以[Command]从客户端到服务器,[ClientRpc]从服务器到所有客户端。http://docs.unity3d.com/Manual/UNetActions.html

此外,您可以使用 的Send()功能向各个客户端connectionToClient发送消息NetworkBehaviourhttp://docs.unity3d.com/ScriptReference/Networking.NetworkConnection.Send.html

于 2015-11-15T05:49:34.473 回答