Unity3d 使用PUN2 unity为网络中的玩家同步随机颜色
我使用的是PUN2,当玩家连接时,我希望他们的精灵渲染为随机颜色,并为所有其他玩家同步该颜色 由于某些原因,下面的代码阻止其他玩家出现在屏幕上,但是我仍然可以在inspector中看到玩家对象。如果我删除RPC调用,我可以看到其他玩家,但他们的颜色不同步Unity3d 使用PUN2 unity为网络中的玩家同步随机颜色,unity3d,multiplayer,photon,Unity3d,Multiplayer,Photon,我使用的是PUN2,当玩家连接时,我希望他们的精灵渲染为随机颜色,并为所有其他玩家同步该颜色 由于某些原因,下面的代码阻止其他玩家出现在屏幕上,但是我仍然可以在inspector中看到玩家对象。如果我删除RPC调用,我可以看到其他玩家,但他们的颜色不同步 public class Player : MonoBehaviour { private PhotonView myPV; public string nickname; public Color color; // Star
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;
}
}
公共类玩家:单行为
{
私人摄影查看myPV;
公共字符串昵称;
公共色彩;
//在第一帧更新之前调用Start
void Start()
{
myPV=GetComponent();
if(myPV.IsMine)
{
gameObject.GetComponentChildren().enabled=true;
gameObject.GetComponentChildren().enabled=true;
color=Random.ColorHSV();
RPC(“RPC_SendColor”,RpcTarget.AllBuffered);
}
}
[扑克牌]
void RPC_SendColor()
{
gameObject.getComponentChildren().color=color;
}
}
感谢您选择光子
由于某些原因,以下代码阻止其他玩家
出现在屏幕上,但我仍然可以在屏幕上看到播放器对象
检查员
我认为为本地球员启用摄像头是罪魁祸首。
试着注释这句话:
//gameObject.GetComponentInChildren<Camera>().enabled = true;
//gameObject.getComponentChildren().enabled=true;
如果我删除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;
}
}
将颜色作为RPC脚本的一个字段不足以使其同步,因为不应该这样做。将颜色注册为自定义光子类型后,应发送颜色值(RGB浮点值)或发送颜色对象
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;
}
color=Random.ColorHSV();
RPC(“RPC_SendColor”,RpcTarget.All,新向量3(color.r,color.g,color.b));
// [...]
[扑克牌]
私有void RPC_SendColor(矢量3随机颜色)
{
颜色=新颜色(randomColor.x,randomColor.y,randomColor.z);
gameObject.getComponentChildren().color=color;
}