如何将 rgb 颜色传递给 OnPhotonSerializeView(光子网络)

How can I pass rgb color to OnPhotonSerializeView (Photon Network)

我需要将 rgb 变量传递给 OnPhotonSerializeView。

我试过这样做:

    public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
    if (stream.IsWriting)
    {
        stream.SendNext(healthCircle.color.r);
        stream.SendNext(healthCircle.color.g);
        stream.SendNext(healthCircle.color.b);
    }
    else 
    {
        healthCircle.color.r = (float)stream.ReceiveNext();
        healthCircle.color.g = (float)stream.ReceiveNext();
        healthCircle.color.b = (float)stream.ReceiveNext();
    }
}

在此之后我得到一个错误:

Assets\Scripts\Player.cs(68,13): error CS1612: Cannot modify the return value of 'SpriteRenderer.color' because it is not a variable

我试图在 google 中搜索它,但我没有找到任何东西。对不起我的菜鸟问题。等待您的帮助:)

SpriteRenderer.color(就像 Unity 中的大多数东西一样)是一个 属性,它可以是 return 或需要一个完整的 Color 作为作业。

除此之外 Color 是一个 struct 所以按值复制,而不是引用类型所以即使你 可以 这样做什么 发生在这里是

  • 你return当前healthCircle.color
  • 在这个 returned Color 上分配的值,例如r = (float)stream.ReceiveNext();

=> 所以这个

  • 总是return一个新的Color实例,当前实例的副本,并且只分配其中的一个组件
  • 没有任何效果,因为 healthCircle.color 实际上从未被赋予新值

你想做的是

var color = healthCircle.color;
color.r = (float)stream.ReceiveNext();
color.g = (float)stream.ReceiveNext();
color.b = (float)stream.ReceiveNext();
healthCircle.color = color;

或者直接做

healthCircle.color = new Color((float)stream.ReceiveNext(), (float)stream.ReceiveNext(), (float)stream.ReceiveNext());