Jump to content
Unity Insider Forum
  • Announcements

    • Lars

      Allgemeine Forenregeln   03/13/2017

      Forenregeln Nimm dir bitte einen Moment um die nachfolgenden Regeln durchzulesen. Wenn du diese Regeln akzeptierst und die Registration fortsetzen willst, klick einfach auf den "Mit der Registrierung fortfahren"-Button. Um diese Registration abzubrechen, klick bitte einfach auf den "Zurück" Button deines Browsers. Wir garantieren nicht für die Richtigkeit, Vollständigkeit und Brauchbarkeit der Nachrichten und sind auch nicht dafür verantwortlich. Die Beiträge drücken die Meinung des Autors des Beitrags aus, nicht zwangsläufig das, wofür die Forensoftware steht. Jeder Nutzer, der denkt, dass ein veröffentlichter Beitrag unzulässig bzw. störend ist, ist aufgefordert uns unverzüglich per E-Mail zu kontaktieren. Wir haben das Recht störende Beiträge zu löschen und bemühen uns, das in einem realistischem Zeitraum zu erledigen (sofern wir beschlossen haben, dass die Löschung notwendig ist). Du akzeptierst, durchgehend während der Nutzung dieses Services, dass du dieses Forum nicht dazu missbrauchen wirst, Inhalte zu veröffentlichen, welche bewusst falsch und/oder verleumderisch, ungenau, beleidigend, vulgär, hasserfüllt, belästigend, obszön, sexuell belästigend, bedrohlich, die Privatsphäre einer Person verletzend oder in irgend einer Art und Weise das Gesetz verletzen. Des Weiteren akzeptierst du, dass du keine urheberrechtlich geschützte Inhalte ohne Erlaubnis des Besitzers in diesem Forum veröffentlichst. Mit dem Klick auf den "Mit der Registrierung fortfahren"-Button, akzeptierst du zudem unsere Datenschutzerklärung und stimmst der Speicherung deiner IP-Adresse und personenbezogenen Daten zu, die dafür benötigt werden, um dich im Falle einer rechtswidrigen Tat zurückverfolgen zu können bzw. permanent oder temporär aus dem Forum ausschließen zu können. Es besteht keine Pflicht zur Abgabe der Einwilligung, dies erfolgt alles auf freiwilliger Basis.   Zusatzinformationen Der Forenbetreiber hat das Recht, Nutzer ohne Angabe von Gründen permanent aus dem Forum auszuschließen. Des Weiteren hat er das Recht, Beiträge, Dateianhänge, Umfrage, Blogeinträge, Galleriebilder oder Signaturen ohne Angabe von Gründen zu entfernen. Mit der Registrierung verzichtest du auf alle Rechte an den von dir erstellten Inhalten, bzw. treten diese an das Unity-Insider.de und Unity-Community.de ab. Dies bedeutet im Klartext, dass das Unity-Insider.de und Unity-Community.de frei über deine Texte verfügen kann, sofern diese nicht wiederum die Rechte anderer verletzen. Es besteht weiterhin kein Anspruch von registrierten Nutzern bzw. ehemaligen registrierten Nutzern darauf, dass erstellte Inhalte und/oder die Mitgliedschaft (User) wieder gelöscht werden (Erhaltung der Konsistenz dieses Forums).   Einwilligungserklärung Wenn du mit der Speicherung deiner personenbezogenen Daten sowie den vorstehenden Regeln und Bestimmungen einverstanden bist, kannst du mit einem Klick auf den Mit der Registrierung fortfahren-Button unten fortfahren. Ansonsten drücke bitte Zurück. Stand: 07.03.2011

Noxen

Members
  • Content count

    28
  • Joined

  • Last visited

Community Reputation

0 Neutral

About Noxen

  • Rank
    Member

Recent Profile Visitors

320 profile views
  1. Servus werte Unity begeisterte, ich bin grade dabei ein Multiplayerspiel zu entwickeln. Vor ein paar Jahren hatte ich mal angefangen, dann kam das neue System. Allerdings war damit alles, was ich bis dato gemacht habe nicht mehr funktionsfähig. Also erstmal kein Bock mehr gehabt Nun fang ich nochmal neu an. Bevor ich groß in die Multiplayergeschichte reingehe, hab ich mal noch Fragen. Es gibt ja verschiedene "Modelle", um Multiplayerspiele zu betreiben. Ich brauche für meins allerdings die Möglichkeit, dass Clienten in einer Liste sämtliche Server sehen. Damals brauchte man dafür ja einen Masterserver von Unity oder Photon, je nachdem, heute glaube ja auch noch. Das Modell ist aber kostenpflichtig und auch nicht grade billig. Man weiß ja schließlich nie, wie weit es das Spiel auf dem Markt schafft. Man nimmt ja eher mal an, nicht soooo weit Dann gibt es ja noch die Möglichkeit, dass man als Client die IP eingibt.... das kommt aber für mich absolut nicht in Frage. Am liebsten wäre mir, dass ich Usern die Möglichkeit gebe, selbst Server zu starten. Meinetwegen auch ingame als Host, was ich jedoch lieber vermeiden möchte. Bin ich soweit richtig, oder irre ich mich? Gibt es noch andere Möglichkeiten? Wenn nicht, könnte man einen Masterserver selber erstellen? Mit Unity? Wie aufwendig wäre das? Wäre super, wenn jemand in der Sache auskunft geben könnte, wie ich das am besten bewerkstelligen könnte. Vielen Dank schonmal. Gruß Noxen
  2. Unity Lizenz Problem

    Hat sich schon erledigt. Hab es komplett neu installiert und könnte ich ein weiteres mal auf Re-Activate klicken. Was vorher irgendwie nicht funktionierte. Dann kam ich in das Menü, zum auswählen zwischen plus/pro und eben Personal. Dann hätte es geklappt. Wer weißß, warum es vorher nicht ging... Da war der Button nämlich deaktiviert. Trotzdem vielen Dank.
  3. Unity Lizenz Problem

    Hallo, Ich habe nun schon eine Weile nicht mehr mit Unity gearbeitet. Wollte jetzt aber wieder loslegen und habe erstmal von 5.3 auf 5.4 geupdatet. Nach dem Login bekomme ich eine Fehlermeldung, dass es Problem mit der Lizens gibt. Laut meinem Account ist meine "Unity Personal" Lizens nicht aktiviert. Seit meiner letzten Benutzung haben die anscheinend das Lizenssystem geändert. Irgendwie finde ich aber keine Möglichkeit, diese zu aktivieren... Kann mir da eventuell jemand helfen? Vielen Dank im voraus Gruß Noxen
  4. Ein wenig, aber den Fehler konnt ich trotzdem noch nicht finden Trotzdem vielen Dank!!
  5. Also ich kann Connecten und meinen Spieler spawnen lassen. Auch den Spieler wieder rausnehmen und erneut spawnen lassen, ohne relogg. Wenn ich ein NPC zerstöre (das funktioniert, da der Server alles prüft und alle richtig darstellt), erscheint ja ein neuer NPC und sofort die nächste Meldung mit dessen Allocated ID. Also Fehlermeldungen nur im Client. Vom NPC gehen auch keine RPC aus. Der Client bekommt nur vom Server gesagt, wie groß sein Player ist, die Farbe und die ID, damit man diesen bewegen kann. Mehr nicht, alles andere macht der Server. Logout: [RPC] public void DespawnPlayer(NetworkPlayer player){ GameObject go = (GameObject) players [player] as GameObject; if (go != null) { NetworkViewID nView = go.GetComponent<NetworkView> ().viewID; Network.RemoveRPCs (nView); players.Remove (player); Network.Destroy (go); } }
  6. Hey Ivory, erstmal vielen Dank für die schnelle Antwort. Also gelöscht werden in erster Linie nur die Spielerobjecte, wenn diese sich ausloggen. Das passt auch. Und die NPC´s werden bei Zerstörung so gehandelt: public void PlayerDestroyEnemy(GameObject enemyObject, NetworkViewID nView, float size){ GameObject[] obj = GameObject.FindGameObjectsWithTag("Player"); Network.Destroy (enemyObject); foreach (GameObject go in obj) { if(go.GetComponent<NetworkView>().viewID == nView){ go.transform.localScale += new Vector3 (0.01F, 0.01f, 0.01f); GetComponent<NetworkView>().RPC("SetScale",RPCMode.AllBuffered,nView,go.transform.localScale); } } } Und ja, die NPC-Prefabs, die erstellt werden, haben ein NetworkView.
  7. Hey Leute, ich versuche mich im Moment etwas an ein Multiplayer. Bisherige Infos habe ich mir aus diversen Tutorials, Unity Scripting API etc rausgefischt. Jetzt habe ich allerdings ein Problem, wo ich einfach nicht weiß, wie ich es beheben soll. Also ich habe die Variante gewählt, in der der Server alles erstellt und überwacht, man als Spieler lediglich die Kontrolle über sein Object hat. Ich dachte mir, es ist nicht so anfällig gegen Hacker/Cheater... Also den Player erstelle so: public Hashtable players = new Hashtable(); [RPC] public void SpawnPlayer(NetworkPlayer player,string uName){ Color col = GetColor (); Playerinfo ply = (Playerinfo) FindObjectOfType (typeof(Playerinfo)); GameObject go = (GameObject) Network.Instantiate (ply.playerPref, new Vector2 (0f, 0f), Quaternion.identity,1) as GameObject; go.GetComponent<Renderer> ().material.color = col; players [player] = go; NetworkView nView = GetComponent<NetworkView> (); nView.RPC ("SendID",RPCMode.All, nView.viewID); nView.RPC ("SendColor",RPCMode.All,nView.viewID, col.r, col.g, col.; } SendID und SendColor dienen eigentlich zur zuordnung das Objects zum Spieler und dass sein "Player" genauso aussieht, wie auf dem Server. Hier bekommt der Server die Positionsinfo, wo sich das Playerobject hinbewegen soll. [RPC] public void HandlePlayerInput(NetworkPlayer player, float mouseX, float mouseY){ GameObject go = (GameObject) players [player] as GameObject; Vector2 wantedPos = new Vector2(mouseX, mouseY); go.transform.position = Vector2.Lerp (go.transform.position, wantedPos, Time.deltaTime); } Soviel mal dazu, wie ich das ganze gestaltet habe. Das funktioniert auch wunderbar. Jetzt aber zum Problem. Der Server erstellt NPC´s. Das ist ein Prefab, welches auch networkView bekommt. Network.Instantiate (enemyPref, position, Quaternion.identity, 1); Ich starte also den Server (in Unity oder als Build) und starte ihn. Dann erstellt er alle NPC´s. Wenn ich jetzt über Unity auf den Server connecte (als Client) kommt folgende meldung: Aber er zeigt mir die NPC´s im Client an und wenn ich sie treffe, verschwinden sie und neue erscheinen, wie gewollt. Wenn ich jetzt aber über einen externen Client starte und Connecte kommt folgende Meldung in der Development Console: . Wenn ich dann den Player spawnen lasse, funktioniert das wunderbar. Nur sehe ich die NPC´s nicht. Wo liegt das Problem? Vielen Dank im vorraus. Noxen
  8. Objekt bewegung stoppen

    Hey ho. Hab da mal wieder ein kleines Problem.... Ich möchte ein Object losschicken, es läuft auf gerader Linie. Wenn dieses Object jetzt in der Reichweite eines "feindlichen" Objects ist, soll es stehen bleiben. Das bekomm ich auch ohne weiteres hin. Wenn ich jetzt allerdings ein weiteres Object losschicke, nimmt das Object die Distanz des zuletzt erstellten Objects. Hier mal mein Code, welcher am Objekt hängt: void Update () { List<GameObject> redUnits = new List<GameObject>(); List<GameObject> blueUnits = new List<GameObject> (); redUnits = GameObject.FindGameObjectsWithTag ("RedUnit").ToList(); blueUnits = GameObject.FindGameObjectsWithTag ("BlueUnit").ToList(); shotTimer -= Time.deltaTime; if (gameObject.tag == "BlueUnit"){ if(unitMove) transform.Translate (0,0,-0.05f); else transform.Translate (0,0,0); } if (gameObject.tag == "RedUnit"){ if(unitMove) transform.Translate (0,0,0.05f); else transform.Translate (0,0,0); } if (gameObject.tag == "BlueUnit"){ foreach(GameObject enemy in redUnits) { float distance = Vector3.Distance (enemy.transform.position, transform.position); if(distance <= radius*2){ unitMove = false; } else unitMove = true; } } } Habe auch folgende Variante versucht: if(gameObject.tag == "RedUnit"){ Collider[] hitColliders = Physics.OverlapSphere(transform.position, radius); int i = 0; foreach(Collider col in hitColliders) { if(col.tag == "BlueUnit") { unitMove = false; } else unitMove = true; } } Und: Collider[] hitColliders = Physics.OverlapSphere(transform.position, radius); int i = 0; while (i < hitColliders.Length) { if(hitColliders[i].tag == "RedUnit"){ unitmove = false; } else unitmove = true; i++; } Bei "OverlapSphere" gibt es ja noch die Möglichkeit als 3, Argument nen LayerMask anzuhängen. Aber was es damit auf sich hat, konnte ich leider nicht herrausbekommen... hatte der Redunit den Layer "Red" gegeben, welcher auf layernummer 9 lag. Das hat er auch fein erkannt, jedoch dann bei "Collider[] hitColliders = Physics.OverlapSphere(transform.position, radius, 9);" die Einheit nicht erkannt. Vielen Dank schonmal im vorraus für sämtliche Hilfestellungen Gruß Noxen
  9. Objecte per klick bewegen lassen

    Also, es funktionieren beide Varianten. Erkenne auch direkt keinen Unterschied, außer, dass ich an Code spare Vielen Dank an euch. Das hat mir sehr weitergeholfen
  10. Objecte per klick bewegen lassen

    Jo, Wüsst ich aber nicht annähernd, wie ich das mache... oder ich drehe das ganze Objekt in die Zielrichtung... Da weiß ich aber auch noch nicht ...
  11. Objecte per klick bewegen lassen

    Genau und auf diesen Punkt soll er quasi Schießen^^
  12. Objecte per klick bewegen lassen

    Jopp, Habs rausbekommen, wie Wieso schießt der aber nicht direct in die Richtung? Wenn ich die Kugel in die nähe bewege, schießt das Object, aber nicht dahin, wohin es soll... float radius = 10f; float timer = 2f; Vector3 direction; public GameObject bullet; void Update () { timer -= Time.deltaTime; if(timer <= 0){ Collider[] hitColliders = Physics.OverlapSphere(transform.position, radius); int i = 0; while (i < hitColliders.Length) { if(hitColliders[i].tag == "Unit"){ direction = new Vector3(hitColliders[i].transform.position.x,hitColliders[i].transform.position.y,hitColliders[i].transform.position.z); Shoot(direction); } i++; } timer = 2f; } } void Shoot(Vector3 direction){ GameObject shotBullet = Instantiate (bullet, transform.position, Quaternion.identity) as GameObject; shotBullet.rigidbody.AddForce (direction); }
  13. Objecte per klick bewegen lassen

    Naja, idealerweise wüsste ich gern direkt die Vector3 koordinaten, wenn er etwas "entdeckt" hat, damit die "Einheit" zb darauf schießen kann
  14. Objecte per klick bewegen lassen

    Ah, ok, habs grad gesehen. Ist dann ja nicht ganz so wild. Eine frage habe ich nun aber noch: Wie kann man (außer über einen Collider) feststellen, ob ein Object in der nähe ist? Ich habe mir RayCast mal angeschaut, damit kann man ja aber nur in eine richtung raycasten, oder?
  15. Objecte per klick bewegen lassen

    So, ich hab nun mein ganzen Script nochmal etwas überarbeitet. Durch das ganze testen hatte ich kaum noch überblick Jetzt funktioniert alles bestens. Bekomme jkedoch eine Fehlermeldung bei "selected.name == "Baracke" ".Er sagt: "NullReferenceException". Aber, es funktioniert^^ Da ich bereits anfragen hatte, wenn es funktioniert, hier der Code: private GameObject selected; private GameObject chosen; void Update () { if (Input.GetMouseButtonDown(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit)){ if (hit.collider.name != "Terrain"){ selected = hit.collider.gameObject; } if (hit.collider.name == "Terrain" && selected.tag == "Unit"){ selected.GetComponent<move>().pos = hit.point; } } } } void OnGui(){ GUILayout.BeginArea (new Rect (900, 50, 200, 550), "Menue"); if (selected.name == "Baracke") { if(GUILayout.Button ("Kugel")) CreateUnit(kugel); GUILayout.EndArea (); } void CreateUnit(GameObject unit){ Vector3 vec3 = new Vector3 (selected.transform.position.x+selected.transform.localScale.x/2+kugel.transform.localScale.x/2+1,selected.transform.position.y+kugel.transform.localScale.y/2, selected.transform.position.z); chosen = Instantiate(unit, vec3, Quaternion.identity) as GameObject; chosen.GetComponent<move> ().pos = vec3; } Und die Move an jenes Prefab gehängt: using UnityEngine; using System.Collections; public class move : MonoBehaviour { public Vector3 pos; void Update () { if(pos != transform.position) transform.position = Vector3.Lerp (transform.position, new Vector3(pos.x,pos.y + transform.localScale.y/2 , pos.z), Time.deltaTime); } }
×