Kuxii Geschrieben 2. Dezember 2017 Melden Share Geschrieben 2. Dezember 2017 Bin gerade dabei Mein spiel Spielbar zu machen, Nun stehe ich vor einem Problem, Level ist klar, Aber mann kann ja bei dem Orginalen Unet nur ein Spawn Prefab zuweisen nun ist das aber so das ich beim Verlassen der Garage mehrere Verschiedene Habe wovon ich eins auswählen kann. Wie kann ich das nun machen das das Spawn Prefab im Manager auf das Ausgewähle geändert wird? bis jetzt sieht der Code so aus: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System; using System.IO; using UnityEngine.Networking; public class DriveOutGarage : NetworkBehaviour { public GameObject[] Cars; public Button[] Slots; public GameObject Player; public string Profile; public CarSaveSettings carSaveSettings; public Scrollbar scrollbar; public DriveOutGarage driveOutGarage; public string SelectedCar; public float Sonlinemode; public ProfilCreator profilCreator; public NetworkManager manager; public Vector3 playerSpawnPos; int pages; int selectedID; int unselectedID; private readonly short assetId; void Start() { Player = GameObject.FindWithTag("Player"); Profile = Player.name; carSaveSettings = new CarSaveSettings(); profilCreator = new ProfilCreator(); saveUpdate(); LoadSettings(); } public void saveUpdate() { string[] saves = Directory.GetDirectories(Application.persistentDataPath + "\\Profiles/" + Profile + "/Cars"); pages = Mathf.FloorToInt(saves.Length / 8); driveOutGarage.scrollbar.GetComponent<Scrollbar>().numberOfSteps = pages; int pagesSelect = Mathf.FloorToInt(driveOutGarage.scrollbar.GetComponent<Scrollbar>().value * pages); for (int i = 0; i < saves.Length; i++) { int sites = Mathf.FloorToInt(i / 8); if (sites == pagesSelect) { driveOutGarage.Slots[i].GetComponentInChildren<Text>().text = getFolderName(saves[i]); } } } public void SelectedID(int id) { int pagesSelect = Mathf.FloorToInt(driveOutGarage.scrollbar.GetComponent<Scrollbar>().value * pages); int i = pagesSelect * 8; i += id; for (int u = 0; u < 8; u++) { driveOutGarage.Slots[u].GetComponentInChildren<Text>().color = Color.black; unselectedID = u; // carHolder.Parts[id].GetComponentInChildren<Text>().text = ; } SelectedCar = driveOutGarage.Slots[id].GetComponentInChildren<Text>().text; driveOutGarage.Slots[id].GetComponentInChildren<Text>().color = Color.blue; selectedID = i; } string getFolderName(string path) { string[] s = path.Split('/'); string[] s2 = path.Split('\\'); return s2[s2.Length - 1]; } public void LoadSettings() { profilCreator = JsonUtility.FromJson<ProfilCreator>(File.ReadAllText(Application.persistentDataPath + "/Profiles/" + Profile + "/1")); Sonlinemode = profilCreator.onlinemode; } public void StertGameScene() { if (Sonlinemode == 0) //Soll Server Starten wenn = 0 { manager.StartServer(); Debug.Log("Try to Start Server"); } if (Sonlinemode == 1) //Soll Client Starten wenn = 1 { manager.StartClient(); Debug.Log("Try to Start Client"); } } void OnServerAddPlayer(NetworkConnection conn) { GameObject thePlayer = (GameObject)Instantiate(Cars[selectedID], Vector3.zero, Quaternion.identity); NetworkServer.AddPlayerForConnection(conn, thePlayer, assetId); } } Start Scene(Weiß liegt ein Tippfehler vor) Liegt auf dem Play Button von meinen Panel Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Helishcoffe Geschrieben 2. Dezember 2017 Melden Share Geschrieben 2. Dezember 2017 Du könntest in deinem Spawnprefab alle anderes Prefabs von denen man auswählen kann unterordnen. Dann aktivierst du halt immer nur das, was der Spieler ausgewählt hast und die anderen werden einfach deaktiviert. Oder du schreibst dir dein eigenes Spawnsystem aber 1. Variante geht deutlich schneller und einfacher denke ich Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kuxii Geschrieben 2. Dezember 2017 Autor Melden Share Geschrieben 2. Dezember 2017 Naja Alle in einem Kommt etwas Unprofessionell, Allein schon wenn man was suchen muss bei mir sind es zz 8 Nutzbare Autos und finde Jedes einzelne übersichtlicher Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 2. Dezember 2017 Melden Share Geschrieben 2. Dezember 2017 Hier ist ein Lösung wie du verschiedene Prefabs für den Spieler zumindest beim Gamestart auswählen kannst. Wie man das Spielerprefab im laufenden Spiel austauschen kann, kann ich dir leider nicht sagen, ist aber denke ich auch nicht so ganz einfach. Ich denke aber, sowohl der Client als auch der Server müssen dies mitbekommen.https://forum.unity.com/threads/unet-spawning-different-player-prefabs-solved.387747/ Vielleicht kommt man mit dieser Methode zum Ziel:https://docs.unity3d.com/ScriptReference/Networking.NetworkServer.ReplacePlayerForConnection.html Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kuxii Geschrieben 2. Dezember 2017 Autor Melden Share Geschrieben 2. Dezember 2017 Habe es schon so versucht, Habe versucht die Classe von meinen "Verlassen Script" aus zu Überschreiben aber das Brachte kein erfolg eher nur den Fehler das er keine Passende Classe zum überschreiben Finden kann Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 2. Dezember 2017 Melden Share Geschrieben 2. Dezember 2017 Hier noch eine andere Lösung zum Spawnen bei Gamestart:http://forum.brackeys.com/thread/unet-multi-player-prefab/ Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kuxii Geschrieben 2. Dezember 2017 Autor Melden Share Geschrieben 2. Dezember 2017 Sooo bisschen umschreiben und nun geht das, Aber er will keinen server aufmachen Okay werde es nun anders machen Gleich via Hauptmenü in die Scene (Mit Orginal NetworkManager) Spawnen Lassen und in der Garage dann beim Auswählen des Autos den Car vom Haupt menü löschen und dan den Neuen (Mit Auto zuweißen) Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
shmafoozius Geschrieben 25. Januar 2018 Melden Share Geschrieben 25. Januar 2018 Denke wenn man wirklich wechselnde steuerbare Objekte während dem laufenden Spiel verwenden will, sollte man nicht das SpawnPrefab ändern sondern durch das SpawnPrefab einfach das gewünschte Objekt mit Authority spawnen lassen und den Input vom PlayerPrefab an das gesapwnte Objekt weiterleiten. Dadurch entfällt das austauschen des PlayerPrefab und die damit verbundenen Probleme. Wenn du es dir aber eh reicht das vor dem eigentlichen Spielstart im Hauptmenü zu machen, ist die Methode das PlayerPrefab vorher zu tauschen die einfachste. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.