Jump to content
Unity Insider Forum

Noxen

Members
  • Content count

    32
  • Joined

  • Last visited

Community Reputation

0 Neutral

About Noxen

  • Rank
    Advanced Member

Recent Profile Visitors

419 profile views
  1. Servus Leute, kann mir jemand sagen, wie ich Objekte, welche ich über das Terraintool direkt gesetzt habe finden und in ein Array speichern kann. Ich brauch Infos zu Menge und Position der einzelnen Objekte, damit ich weiß, welcher Stein zb am nächsten ist. Mit den Bäumen soll es recht einfach sein, über "Tree", aber bei den Detail Meshes bin ich da grade etwas überfragt... Vielen Dank im vorraus Gruß Noxen
  2. Hiho, ich habe ein kleines Problem, wobei mir hoffentlich helfen kann. Ich habe ein Raumschiff im Weltraum, mit dem ich hin und her Fliegen kann. Allerdings will ich jetzt nicht, dass ich nur gradeaus schießen kann, sondern in einem bestimmten Radius, vom Schiff ausgehend in andere Richtungen. (Schiff und Kamera sind nicht unbedingt in gleicher Rotation). An diesem Punkt (wohin ich schieße) füge ich dann Quasi noch ein Crosshair hinzu. Aber die Frage ist, wie, bzw womit kann ich das hinbekommen? Vielen Dank schonmal. Gruß Noxen
  3. Noxen

    Objekt auf 3 Axen bewegen

    Erstmal vielen Dank für deine Antwort. Also, die Richtung des Schiffes zu ändern, habe ich im Moment so: rot.y += Input.GetAxis ("Mouse X"); rot.x -= Input.GetAxis ("Mouse Y"); transform.eulerAngles = rot; Damit kann ich das Schiff in jede Richtung bringen/schauen. Ich würde das Schiff schon sehr gern mit der Maus drehen lassen. Das mit den Tasten habe ich mir auch schon überlegt, finde ich aber irgendwie nicht schön. So bekommt es den Antrieb: if (Input.GetKey (KeyCode.Space)) { rb.AddForce (transform.forward * 15f, ForceMode.Impulse); Jedoch bewegt er sich nur auf der X und Z Achse. Je nach Drehung. Es ist ja aber auch geneigt. Mal ein Bild, falls ich mich nicht richtig ausdrücke
  4. Servus liebe Unity-Insider Ich habe nun schon viel hin und her versucht, gogoogelt, aber finde irgendwie nicht das richtige. Ich spiele grad ein wenig an einem 3D-Weltraumspiel rum. Die Kamera habe ich an das Raumschiff gehängt. Das Raumschiff bewege ich mit der Maus (zb. Input.GetAxis("Mouse X")) und Schub gebe ich mit der Leertaste. Somit kann ich das Schiff ja in jede Stellung bringen. Wenn ich dann aber auch in die Richtung fliegen möchte, fliege ich nur auf einer Achse, ich will ja aber in den Raum. Ich verzweifle.... Hat jemand einen Rat? Ich hoffe, mir kann da jemand helfen. Gruß Noxen
  5. 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
  6. Noxen

    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.
  7. Noxen

    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
  8. Ein wenig, aber den Fehler konnt ich trotzdem noch nicht finden Trotzdem vielen Dank!!
  9. 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); } }
  10. 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.
  11. 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
  12. Noxen

    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
  13. Noxen

    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
  14. Noxen

    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 ...
  15. Noxen

    Objecte per klick bewegen lassen

    Genau und auf diesen Punkt soll er quasi Schießen^^
×