Переместите старые кнопки графического интерфейса Unity в старом уроке
Я пытался создать команду с помощью сети Photon Unity. Мой первый из двух вопросов о старых кнопках GUI. Большинство ответов указывают на старый тут по quill18, в его серии FPS, № 19 и 20. Проблема в том, что он использует старые кнопки GUI, и он использовал некоторый код, чтобы автоматически поместить его в центр сцены. Эта позиция скрывает кнопки на фоновом изображении. Я попытался заменить значение Y в методе OnGui, чтобы опуститься до нижней трети, но ничего не происходит. Как я могу опустить эти кнопки? Это кажется проще, чем пытаться заменить старый на новый графический интерфейс.
using UnityEngine;
using System.Collections.Generic;
public class NetworkManager : MonoBehaviour {
public GameObject standbyCamera;
SpawnSpot[] spawnSpots;
public bool offlineMode = false;
bool connecting = false;
List<string> chatMessages;
int maxChatMessages = 5;
public float respawnTimer = 0;
bool hasPickedTeam = false;
int teamID=0;
// Use this for initialization
void Start () {
spawnSpots = GameObject.FindObjectsOfType<SpawnSpot>();
PhotonNetwork.player.name = PlayerPrefs.GetString("Username", "Awesome Dude");
chatMessages = new List<string>();
}
void OnDestroy() {
PlayerPrefs.SetString("Username", PhotonNetwork.player.name);
}
public void AddChatMessage(string m) {
GetComponent<PhotonView>().RPC ("AddChatMessage_RPC", PhotonTargets.AllBuffered, m);
}
[PunRPC]
void AddChatMessage_RPC(string m) {
while(chatMessages.Count >= maxChatMessages) {
chatMessages.RemoveAt(0);
}
chatMessages.Add(m);
}
void Connect() {
PhotonNetwork.ConnectUsingSettings( "MultiFPS v004" );
}
void OnGUI() {
GUILayout.Label( PhotonNetwork.connectionStateDetailed.ToString() );
if(PhotonNetwork.connected == false && connecting == false ) {
// We have not yet connected, so ask the player for online vs offline mode.
GUILayout.BeginArea( new Rect(0, 0, Screen.width, Screen.height) );
GUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
GUILayout.BeginVertical();
GUILayout.FlexibleSpace();
GUILayout.BeginHorizontal();
GUILayout.Label("Username: ");
PhotonNetwork.player.name = GUILayout.TextField(PhotonNetwork.player.name);
GUILayout.EndHorizontal();
if( GUILayout.Button("Single Player") ) {
connecting = true;
PhotonNetwork.offlineMode = true;
OnJoinedLobby();
}
if( GUILayout.Button("Multi Player") ) {
connecting = true;
Connect ();
}
GUILayout.FlexibleSpace();
GUILayout.EndVertical();
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
GUILayout.EndArea();
}
if(PhotonNetwork.connected == true && connecting == false) {
if(hasPickedTeam) {
// We are fully connected, make sure to display the chat box.
GUILayout.BeginArea( new Rect(0, 0, Screen.width, Screen.height) );
GUILayout.BeginVertical();
GUILayout.FlexibleSpace();
foreach(string msg in chatMessages) {
GUILayout.Label(msg);
}
GUILayout.EndVertical();
GUILayout.EndArea();
}
else {
// Player has not yet selected a team.
GUILayout.BeginArea( new Rect(0, 0, Screen.width, Screen.height) );
GUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
GUILayout.BeginVertical();
GUILayout.FlexibleSpace();
if( GUILayout.Button("Red Team") ) {
SpawnMyPlayer(1);
}
if( GUILayout.Button("Green Team") ) {
SpawnMyPlayer(2);
}
if( GUILayout.Button("Random") ) {
SpawnMyPlayer(Random.Range(1,3)); // 1 or 2
}
if( GUILayout.Button("Renegade!") ) {
SpawnMyPlayer(0);
}
GUILayout.FlexibleSpace();
GUILayout.EndVertical();
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
GUILayout.EndArea();
}
}
}
void OnJoinedLobby() {
Debug.Log ("OnJoinedLobby");
PhotonNetwork.JoinRandomRoom();
}
void OnPhotonRandomJoinFailed() {
Debug.Log ("OnPhotonRandomJoinFailed");
PhotonNetwork.CreateRoom( null );
}
void OnJoinedRoom() {
Debug.Log ("OnJoinedRoom");
connecting = false;
//SpawnMyPlayer();
}
void SpawnMyPlayer(int teamID) {
this.teamID = teamID;
hasPickedTeam = true;
AddChatMessage("Spawning player: " + PhotonNetwork.player.name);
if(spawnSpots == null) {
Debug.LogError ("WTF?!?!?");
return;
}
SpawnSpot mySpawnSpot = spawnSpots[ Random.Range (0, spawnSpots.Length) ];
GameObject myPlayerGO = (GameObject)PhotonNetwork.Instantiate("PlayerController", mySpawnSpot.transform.position, mySpawnSpot.transform.rotation, 0);
standbyCamera.SetActive(false);
//((MonoBehaviour)myPlayerGO.GetComponent("FPSInputController")).enabled = true;
((MonoBehaviour)myPlayerGO.GetComponent("MouseLook")).enabled = true;
((MonoBehaviour)myPlayerGO.GetComponent("PlayerMovement")).enabled = true;
((MonoBehaviour)myPlayerGO.GetComponent("PlayerShooting")).enabled = true;
myPlayerGO.GetComponent<TeamMember>().teamID = teamID;
SkinnedMeshRenderer mySkin = myPlayerGO.transform.GetComponentInChildren<SkinnedMeshRenderer>();
if(mySkin == null) {
Debug.LogError("Couldn't find a SkinnedMeshRenderer!");
}
if(teamID==1)
mySkin.material.color = Color.red;
if(teamID==2)
mySkin.material.color = new Color(.5f, 1f, .5f);
myPlayerGO.transform.FindChild("Main Camera").gameObject.SetActive(true);
}
void Update() {
if(respawnTimer > 0) {
respawnTimer -= Time.deltaTime;
if(respawnTimer <= 0) {
// Time to respawn the player!
SpawnMyPlayer(teamID);
}
}
}
}
1 ответ
Я бы настоятельно рекомендовал обновиться до нового пользовательского интерфейса.
попробуйте вставить GUILayout.Space рядом с гибким пространством https://docs.unity3d.com/ScriptReference/GUILayout.Space.html
Это обычно очень помогает перемещать вещи в гибких макетах контента.
До свидания,
джинсовый