Javascript 在多人游戏中添加角色选择功能
我使用多人光子网络教程创建了一个多人游戏。它在运行时工作正常,为多个用户生成相同的字符。但是谁想玩一个游戏,让所有相同的角色到处跑。我试图结合第二个教程,展示如何设置角色选择。多人网络光子教程是用C#编写的,角色选择图坦卡蒙是用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
#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,我会玩更多的游戏,并添加一个收尾花括号。