我有两个产卵点,玩家会在连接时出现。
我需要的是,当其中一个玩家连接其中一个位置时,任何其他玩家将总是在另一个位置产生。
这里有一些视觉效果,如果有帮助: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
答案 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可能不是一个明智的小组。