【问题标题】:Sync random colors for players across network with PUN2 unity使用 PUN2 统一跨网络为玩家同步随机颜色
【发布时间】:2020-07-05 14:30:21
【问题描述】:

我正在使用 PUN2,当玩家连接时,我希望他们的精灵渲染为随机颜色,并为所有其他玩家同步该颜色。

由于某种原因,以下代码阻止了其他玩家出现在屏幕上,但是我仍然可以在检查器中看到玩家对象。如果我删除 RPC 调用,我可以看到其他玩家正常,但他们的颜色不同步。

public class Player : MonoBehaviour
{
 private PhotonView myPV;
 public string nickname;
 public Color color;    
 // Start is called before the first frame update
 void Start()
 {
     myPV = GetComponent<PhotonView>();
     if (myPV.IsMine)
     {
         gameObject.GetComponentInChildren<Camera>().enabled = true;
         gameObject.GetComponentInChildren<TopDownCharacter>().enabled = true;
         color = Random.ColorHSV();
         myPV.RPC("RPC_SendColor", RpcTarget.AllBuffered);
     }
 }


 [PunRPC]
 void RPC_SendColor()
 {
     gameObject.GetComponentInChildren<SpriteRenderer>().color = color;
 }

}

【问题讨论】:

    标签: unity3d multiplayer photon


    【解决方案1】:

    感谢您选择 Photon!

    出于某种原因,以下代码阻止了其他玩家 出现在屏幕上但是我仍然可以看到播放器对象 检查员。

    我认为为本地玩家启用相机是这里的罪魁祸首。 尝试注释掉这一行:

    //gameObject.GetComponentInChildren<Camera>().enabled = true;
    

    如果我删除 RPC 调用,我可以看到其他玩家正常,但他们的 颜色不同步。

    将颜色作为 RPC 脚本的一个字段不足以同步它,因为这不是应该这样做的。您应该在将 Color 注册为自定义 Photon 类型后发送 Color 值(RGB 浮点值)或发送 Color 对象。

            color = Random.ColorHSV();
            this.photonView.RPC("RPC_SendColor", RpcTarget.All, new Vector3(color.r, color.g, color.b));
    
     // [...]
    
        [PunRPC]
        private void RPC_SendColor(Vector3 randomColor)
        {
             Color color = new Color(randomColor.x, randomColor.y, randomColor.z);
             gameObject.GetComponentInChildren<SpriteRenderer>().color = color;
        }
    

    【讨论】:

      【解决方案2】:

      使用 ColorUtility 将其转换为 HTML 字符串并像这样检索它... 不要错过“#”

      ColorUtility.ToHtmlStringRGBA(color)
      Color newColor;
      if (ColorUtility.TryParseHtmlString("#" + color, out newColor))
      {
          print("New Color " +  newColor.ToString());
      }
      

      【讨论】:

        猜你喜欢
        • 2021-08-24
        • 2017-02-13
        • 1970-01-01
        • 2022-01-07
        • 2017-01-27
        • 1970-01-01
        • 2020-12-22
        • 1970-01-01
        • 2015-12-12
        相关资源
        最近更新 更多