Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 使用PUN2 unity为网络中的玩家同步随机颜色_Unity3d_Multiplayer_Photon - Fatal编程技术网

Unity3d 使用PUN2 unity为网络中的玩家同步随机颜色

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

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

由于某些原因,下面的代码阻止其他玩家出现在屏幕上,但是我仍然可以在inspector中看到玩家对象。如果我删除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;
 }

}
公共类玩家:单行为
{
私人摄影查看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;
}