如何将 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());
我需要将 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());