Hi guys i've been following this great tutorial on youtube but now i cant seem to get the same result as him.I followed him twice but same error.I cant see my player moving in the other game.Here's my script but i tried looking through it a few times but i cant see any errors.
NetworkScript
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class NetworkManager : MonoBehaviour
{
public string PlayerName;
public string MatchName;
public static NetworkManager Instance;
public ListPlayerList = new List();
public Player MyPlayer;
public GameObject SpawnPlayer;
public bool MatchStarted;
//public List SpawnPoints = new List();
public GameObject[] SpawnPoints;
//public bool MatchLoaded;
// Use this for initialization
void Start () {
Instance = this;
DontDestroyOnLoad(gameObject);
}
// Update is called once per frame
void Update () {
PlayerName = PlayerPrefs.GetString("PlayerName");
}
public void StartServer(string ServerName, int MaxPlayers)
{
Network.InitializeSecurity();
Network.InitializeServer (MaxPlayers, 25565, true);
MasterServer.RegisterHost("Tut", ServerName, "");
Debug.Log("Started Server");
}
void OnPlayerConnected(NetworkPlayer id)
{
//networkView.RPC ("Server_PlayerJoined", RPCMode.Server, PlayerName, id);
//foreach (Player pl in PlayerList)
//{
networkView.RPC("Client_PlayerJoined",id,MyPlayer.PlayerName, MyPlayer.OnlinePlayer);
//}
}
void OnServerInitialized()
{
Server_PlayerJoined (PlayerName, Network.player);
}
void OnConnectedToServer()
{
networkView.RPC ("Server_PlayerJoined", RPCMode.Server, PlayerName, Network.player);
}
void OnPlayerDisconnected(NetworkPlayer id)
{
networkView.RPC ("RemovePlayer", RPCMode.All, id);
Network.Destroy (GetPlayer (id).Manager.gameObject);
Network.RemoveRPCs(id);
}
void OnDisconnectedFromServer(NetworkDisconnection info)
{
PlayerList.Clear ();
Application.LoadLevel (0);
}
[RPC]
public void Server_PlayerJoined(string Username,NetworkPlayer id)
{
networkView.RPC("Client_PlayerJoined", RPCMode.All,PlayerName, id);
}
[RPC]
public void Client_PlayerJoined(string Username,NetworkPlayer id)
{
Player temp = new Player();
temp.PlayerName = Username;
temp.OnlinePlayer = id;
PlayerList.Add(temp);
if (Network.player == id)
{
MyPlayer = temp;
GameObject LastPlayer = Network.Instantiate(SpawnPlayer,Vector3.zero,Quaternion.identity,0) as GameObject;
temp.Manager = LastPlayer.GetComponent();
}
}
[RPC]
public void RemovePlayer(NetworkPlayer id)
{
Player temp = new Player ();
foreach(Player pl in PlayerList)
{
if(pl.OnlinePlayer == id)
{
temp = pl;
}
}
if(temp !=null)
{
PlayerList.Remove (temp);
}
}
[RPC]
public void LoadLevel()
{
MatchStarted = true;
Application.LoadLevel (1);
}
/*void OnLevelWasLoaded(int level)
{
if (MatchStarted == true)
//SpawnPoints = LevelManager.Ins.SpawnPoints;
}
*/
public static Player GetPlayer(NetworkPlayer id){
foreach (Player pl in Instance.PlayerList)
{
if(pl.OnlinePlayer == id)
return pl;
}
return null;
}
void OnGUI()
{
if (MatchStarted == true && !MyPlayer.IsAlive)
{
if(GUI.Button(new Rect(0,0,50,20),"Spawn"))
{
//MyPlayer.Manager.networkView.RPC("Spawn",RPCMode.All);
int SpawnIndex = Random.Range(0, LevelManager.Ins.SpawnPoints.Length - 1);
MyPlayer.Manager.FirstPerson.localPosition = LevelManager.Ins.SpawnPoints[SpawnIndex].transform.position;
MyPlayer.Manager.FirstPerson.localRotation = LevelManager.Ins.SpawnPoints[SpawnIndex].transform.rotation;
MyPlayer.Manager.networkView.RPC("Spawn",RPCMode.All);
}
}
}
[System.Serializable]
public class Player{
public string PlayerName;
public NetworkPlayer OnlinePlayer;
public float Health = 100;
public Character Manager;
public bool IsAlive;
}
}
CharacterScript:
using UnityEngine;
using System.Collections;
public class Character : MonoBehaviour {
public Transform FirstPerson;
public Transform ThirdPerson;
public NetworkManager.Player MyPlayer;
public Vector3 CurPos;
public Quaternion CurRot;
// Use this for initialization
void Start () {
MyPlayer.Manager = this;
MyPlayer = NetworkManager.Instance.MyPlayer;
FirstPerson.gameObject.SetActive (false);
ThirdPerson.gameObject.SetActive (false);
DontDestroyOnLoad (gameObject);
}
// Update is called once per frame
void Update () {
}
[RPC]
void Server_TakeDamage (float Damage)
{
networkView.RPC ("Client_TakeDamage", RPCMode.Server, Damage);
}
[RPC]
void Client_TakeDamage (float Damage)
{
MyPlayer.Health -= Damage;
Debug.Log (MyPlayer.Health);
if (MyPlayer.Health <= 0)
{
networkView.RPC("Die",RPCMode.All);
MyPlayer.IsAlive = false;
MyPlayer.Health = 0;
}
}
[RPC]
void Spawn()
{
MyPlayer.Health = 100;
MyPlayer.IsAlive = true;
if (networkView.isMine)
{
FirstPerson.gameObject.SetActive (true);
ThirdPerson.gameObject.SetActive (false);
}
else
{
FirstPerson.gameObject.SetActive (false);
ThirdPerson.gameObject.SetActive (true);
}
}
[RPC]
void Die()
{
MyPlayer.IsAlive = false;
FirstPerson.gameObject.SetActive (false);
ThirdPerson.gameObject.SetActive (false);
}
void OnSerializedNetworkView(BitStream stream, NetworkMessageInfo info)
{
if (stream.isWriting)
{
CurPos = FirstPerson.position;
CurRot = FirstPerson.rotation;
stream.Serialize(ref CurPos);
stream.Serialize(ref CurRot);
}
else
{
stream.Serialize(ref CurPos);
stream.Serialize(ref CurRot);
ThirdPerson.position = CurPos;
ThirdPerson.rotation = CurRot;
}
}
}
I hope you guys cant help me as i've been stuck with this problem for a few days but cant find a fix.
↧