Javascript 在多人游戏中添加角色选择功能

Javascript 在多人游戏中添加角色选择功能,javascript,c#,multiplayer,Javascript,C#,Multiplayer,我使用多人光子网络教程创建了一个多人游戏。它在运行时工作正常,为多个用户生成相同的字符。但是谁想玩一个游戏,让所有相同的角色到处跑。我试图结合第二个教程,展示如何设置角色选择。多人网络光子教程是用C#编写的,角色选择图坦卡蒙是用Javascript编写的。图坦卡蒙夫妇独立工作,但不相互交谈。以下是字符选择代码: #pragma strict //this is the currently selected Player. Also the one that will be saved to Pl

我使用多人光子网络教程创建了一个多人游戏。它在运行时工作正常,为多个用户生成相同的字符。但是谁想玩一个游戏,让所有相同的角色到处跑。我试图结合第二个教程,展示如何设置角色选择。多人网络光子教程是用C#编写的,角色选择图坦卡蒙是用Javascript编写的。图坦卡蒙夫妇独立工作,但不相互交谈。以下是字符选择代码:

#pragma strict
//this is the currently selected Player. Also the one that will be saved to PlayerPrefs
var selectedPlayer : int = 0;

function Update() 
{ 
if (Input.GetMouseButtonUp (0)) {
    var ray = Camera.main.ScreenPointToRay (Input.mousePosition);
    var hit : RaycastHit;

    if (Physics.Raycast (ray, hit, 100))
    {
            // The pink text is where you would put the name of 
the object you want to click on (has attached collider).

                if(hit.collider.name == "Player1") 
            SelectedCharacter1(); //Sends this click down to a 
function called "SelectedCharacter1(). Which is where all of our stuff happens.

            if(hit.collider.name == "Player2")
            SelectedCharacter2();

            if(hit.collider.name == "Player3")
            SelectedCharacter3();
        } 
        else
        {
        return;               
        }
    } 
}

function SelectedCharacter1() {
    Debug.Log ("Character 1 SELECTED"); //Print out in the Unity console 
which character was selected.
    selectedPlayer = 1;
    PlayerPrefs.SetInt("selectedPlayer", (selectedPlayer));
}

function SelectedCharacter2() {
    Debug.Log ("Character 2 SELECTED");
    selectedPlayer = 2;
    PlayerPrefs.SetInt("selectedPlayer", (selectedPlayer));
}

function SelectedCharacter3() {
    Debug.Log ("Character 3 SELECTED");
    selectedPlayer = 3;
    PlayerPrefs.SetInt("selectedPlayer", (selectedPlayer));
}
下面是CharacterSpawn Javascript

#pragma strict
//these are the player prefabs that will be automagically plugged in for us.
var player01Prefab : GameObject;
var player02Prefab : GameObject;
var player03Prefab : GameObject;

//this is where the script placed in the level inputs in this number for the player          
who was selected
//and saved by playerPrefs
var savedPlayer : int = 0;

//this is called first before the Start function, so make sure it loads everthing 
needed first.
function Awake() {

    // Let's grab the saved data for each player and grab that integer to use 
to load that player in the world
    savedPlayer = PlayerPrefs.GetInt("selectedPlayer");

player01Prefab = GameObject.Find("Player1");
player02Prefab = GameObject.Find("Player2");
player03Prefab = GameObject.Find("Player3");

    if(savedPlayer == 0) //if we've not selected any player initially lets just 
use Player 1 
        {                   
        player01Prefab.SetActiveRecursively(true);
        player02Prefab.SetActiveRecursively(false);
    player03Prefab.SetActiveRecursively(false);
        }
    else if(savedPlayer == 1) //if we've set the player to 1 from playerprefs then 
        {                   
        player01Prefab.SetActiveRecursively(true);
        player02Prefab.SetActiveRecursively(false);
        player03Prefab.SetActiveRecursively(false);
        }
    else if(savedPlayer == 2) //if we've set the player to 2 from playerprefs then 
        {                   
        player02Prefab.SetActiveRecursively(true);
        player01Prefab.SetActiveRecursively(false);
        player03Prefab.SetActiveRecursively(false);
        }
    else if(savedPlayer == 3) //if we've set the player to 3 from playerprefs then 
        {                   
        player03Prefab.SetActiveRecursively(true);
        player01Prefab.SetActiveRecursively(false);
        player02Prefab.SetActiveRecursively(false);

        }
}
这是C#网络管理器代码

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class NetworkManager : Photon.MonoBehaviour {
    public Camera standbyCamera; 



    void Start () {
        Connect ();
    }

    void Connect() {
        PhotonNetwork.ConnectUsingSettings( "MultiFPS" );
    }

    void OnGUI () {
        GUILayout.Label ( PhotonNetwork.connectionStateDetailed.ToString () );
    }

    void OnJoinedLobby() {
        PhotonNetwork.JoinRandomRoom();

    }

    void OnPhotonRandomJoinFailed() {
        PhotonNetwork.CreateRoom( null );

    }
    void OnJoinedRoom() {
        Debug.Log ("OnJoinedRoom");

        SpawnSelectedPlayer();
    }
角色繁殖脚本位于可以单击游戏对象的场景中,该角色应该繁殖到另一个场景(第一级)

以下是Loadlevel Javascript:

// JavaScript
function OnGUI () {
    // Make a background box
    GUI.Box (Rect (10,10,100,90), "Load Level");

    // Make the first button. If it is pressed, Application.Loadlevel (1) will
 be executed
    if (GUI.Button (Rect (20,40,80,20), "Level 1"))
{
    Application.LoadLevel ("Whyyyyyyy");
}
}
我将Javascript字符spawn转换为C#,并将其与NetworkManager代码混搭在一起,因为它们似乎可以处理生成。以下非工作代码是我尝试的 正在尝试将我的角色选择连接到我的网络管理器/繁殖设置

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class NetworkManager : Photon.MonoBehaviour {
    //these are the player prefabs that will be automagically plugged in for us.
    GameObject character1;
    GameObject character2;
    GameObject character3;
    GameObject character4;

    public Camera standbyCamera; 

//this is where the script placed in the level inputs in this number for the 
player who was selected
    //and saved by playerPrefs
    int savedPlayer = 0;

    //this is called first before the Start function, so make sure it 
loads everthing needed first.

        void  Awake (){

    // Let's grab the saved data for each player and grab that integer to 
use to load that player in the world
        savedPlayer = PlayerPrefs.GetInt("selectedPlayer");

        character1Prefab = GameObject.Find("Player1");
        character2Prefab = GameObject.Find("Player2");
        character3Prefab = GameObject.Find("Player3");

        if(savedPlayer == 0) //if we've not selected any player initially 
lets just use Player 1 
        {                   
            player01Prefab.SetActiveRecursively(true);
            player02Prefab.SetActiveRecursively(false);
            player03Prefab.SetActiveRecursively(false);
        }
        else if(savedPlayer == 1) //if we've set the player to 1 
    from   playerprefs then 

        {                   
            player01Prefab.SetActiveRecursively(true);
            player02Prefab.SetActiveRecursively(false);
            player03Prefab.SetActiveRecursively(false);
        }
        else if(savedPlayer == 2) //if we've set the player to 2 
    from playerprefs then 
        {                   
            player02Prefab.SetActiveRecursively(true);
            player01Prefab.SetActiveRecursively(false);
            player03Prefab.SetActiveRecursively(false);
        }
    else if(savedPlayer == 3) //if we've set the player to 3 from 
playerprefs then 
        {                   
            player03Prefab.SetActiveRecursively(true);
            player01Prefab.SetActiveRecursively(false);
            player02Prefab.SetActiveRecursively(false);

        }

        void Start () {
            Connect ();
        }

        void Connect() {
            PhotonNetwork.ConnectUsingSettings( "MultiFPS" );
        }

        void OnGUI () {
    GUILayout.Label ( PhotonNetwork.connectionStateDetailed.ToString   () );
        }

        void OnJoinedLobby() {
            PhotonNetwork.JoinRandomRoom();

        }

        void OnPhotonRandomJoinFailed() {
            PhotonNetwork.CreateRoom( null );

        }
        void OnJoinedRoom() {
            Debug.Log ("OnJoinedRoom");

            SpawnSelectedPlayer();
        }

        void SelectedPlayer() {
            PhotonNetwork.Instantiate("SelectedPlayer", Vector3.zero,   
 Quaternion.identity, 0);
            standbyCamera.enabled = false;

        }




    }

我得到的错误表明我不能像以前那样添加“void start”行。角色选择场景上的GUI Level1开始按钮成功地将用户带到与网络建立连接的一级,并生成一个角色,但不是“选择场景中选定的玩家”。作为单独的脚本,所选播放器无法识别。非常感谢您的帮助。我已经穷途末路了,但感觉如此接近,却又如此遥远。谢谢你的期待

从这段代码中我可以看出函数Start()在函数Awake()中。这在C#中是不合法的。也许你只是错过了一个收尾花括号?谢谢svinja,我会玩更多的游戏,并添加一个收尾花括号。