Unity Network材质颜色更改无效

时间:2015-11-15 04:36:35

标签: unity3d colors network-programming material unity-networking

我有一个播放器对象:网络标识和网络转换。也是具有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;               
                     }
             }
       }

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

1 个答案:

答案 0 :(得分:1)

旧方式

RPC函数可以完美地用于您所谈论的内容。您可以通过RPC发送多个var。它不会发送变量名称,但会发送其值。

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上的NetworkBehaviour功能向各个客户发送消息。 http://docs.unity3d.com/ScriptReference/Networking.NetworkConnection.Send.html