检查spawn是否为空

时间:2015-05-27 15:47:43

标签: unity3d

我有两个产卵点,玩家会在连接时出现。

我需要的是,当其中一个玩家连接其中一个位置时,任何其他玩家将总是在另一个位置产生。

这里有一些视觉效果,如果有帮助:https://goo.gl/Y0ohZC

以下是我使用的代码:

using UnityEngine;
using System.Collections;

public class SpawnSpot : MonoBehaviour {

public int teamId=0;
public GameObject[] Spots; //Drag the spots in here (In the editor)
bool[] OccupiedSpawnSpots;

//Using Photon Networking
void OnJoinedRoom()
{
    //Request the recent OccupiedSpawnSpots List
    PhotonView.RPC("RequestList", PhotonTargets.MasterClient, PhotonNetwork.player); 
}

//In "RequestList" the MasterClient sends his List of the SpawnSpots 
//by calling "ReceiveList"
[RPC]
void RequestList(PhotonPlayer player)
{
    PhotonView.RPC("ReceiveList", PhotonTargets.All, player, OccupiedSpawnSpots);
}


[RPC]
void ReceiveList(PhotonPlayer Sender, bool[] ListOfMasterClient)
{
    OccupiedSpawnSpots = ListOfMasterClient;

    //Get the free one
    if (OccupiedSpawnSpots[0] == false)
    {
        //Spawn player at 0
        if (Sender == PhotonNetwork.player)
            PhotonNetwork.Instantiate("PlayerController", Spots[0].transform.position);
        OccupiedSpawnSpots[0] = true;
    } 
    else
    {
        //Spawn player at 1
        if (Sender == PhotonNetwork.player)
            PhotonNetwork.Instantiate("PlayerController", Spots[1].transform.position);
        OccupiedSpawnSpots[1] = true;
    }
}

给出的错误是:

  

Assets / Scripts / SpawnSpot.cs(14,28):错误CS0120:对象引用   需要访问非静态成员`PhotonView.RPC(string,   PhotonPlayer,params object [])'

     

Assets / Scripts / SpawnSpot.cs(22,28):错误CS0120:对象引用   需要访问非静态成员`PhotonView.RPC(string,   PhotonPlayer,params object [])'

     

Assets / Scripts / SpawnSpot.cs(36,47):错误CS1501:没有重载   方法Instantiate' takes 3'参数

     

Assets / Scripts / SpawnSpot.cs(43,47):错误CS1501:没有重载   方法Instantiate' takes 3'参数

提前致谢,IC

2 个答案:

答案 0 :(得分:1)

您似乎正在尝试使用静态引用调用实例函数。而不是做PhotonView.RPC("RequestList", PhotonTargets.MasterClient, PhotonNetwork.player); 您需要创建对PhatorView对象的引用,然后在其上调用RPC函数。

public PhotonView photonView;
void OnJoinedRoom()
{
     if(photonView == null)
     {
         photonView = GetComponent<PhotonView>();
     }

     //Request the recent OccupiedSpawnSpots List
     PhotonView.RPC("RequestList", PhotonTargets.MasterClient, PhotonNetwork.player); 
}

你应该在这个脚本所在的GameObject上有一个PhotonView对象,或者在编辑器中为PhotonView分配一个引用。

这应该可以解决您的问题,但我认为您应该研究编译器错误以及如何解决它们。在Unity3D中如果双击控制台中的错误,它将带您进入不编译的行。它也倾向于给你一个很好的暗示,为什么它不编译。

你的错误就是这个

&#34; Assets / Scripts / SpawnSpot.cs(14,28):错误CS0120:访问非静态成员`PhotonView.RPC(string,PhotonPlayer,params object [])&#需要对象引用39;&#34;

这意味着您需要一个对象才能调用此函数。

答案 1 :(得分:0)

第三个和第四个错误是因为你只用2个参数调用Instantiate,但它至少需要4个。包括你试图实例化的GameObject的旋转,以及一个组号:

PhotonNetwork.Instantiate("PlayerController", Spots[0].transform.position, Quaternion.identity, 0);

请注意,您可能不需要identity quaternion,因此您可能需要更改此设置。我也不熟悉PhotonNetwork,所以0可能不是一个明智的小组。