• 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

All Activity

This stream auto-updates   

  1. Past hour
  2. Die Unterobjekte müssten einfach das gleiche prüfen was dein Spielerobjekt macht, wo genau ist da dein Problem? Den Zugriff solltest du per GetComponent und parent Objekte hinbekommen können, oder einfach die nötige Info nach oben in die Child Elemente propagieren.
  3. Hallo Folgendes Problem: Ich habe ein Raumschiff, welches nur von dem Client gesteuert werden soll, also von dem Spieler am Rechner sitzt. Für mein Raumschiff habe ich natürlich die NetworkIdentify (Check by LocalPlayerAuthority) und auch das NetworkTransform. Dann habe ich in meinem Script folgende if-Abfrage: if(!isLocalPlayer) { return; } Dadurch steuere ich halt nur mein Schiff, bei allen anderen passiert nichts. Allerdings ist das Schiff ja nunmal mein Spielerobjekt, was passiert mit den Unterobjekten (Zum Beispiel Waffen). Da funktioniert das nicht, da die ja nicht das Spielerobjekt sind. Folglich bewegen sich im Client immer alle Waffen :/ Wie sage ich denen, dass die auch nur zu meinem Client gehören? Wenn ich das auch in das Bewegungsscript für meine Waffen tue, bewegen die sich garnicht (weil die halt nicht Spielerobjekt sind, auch wenn das ausgewählt ist). Wisst ihr da weiter? Liebe Grüße, Tobi
  4. Ich sehe immer noch keinen Grund, warum dein Gebäude aus kinematic RBs bestehen muss. Entweder dein Gebäude ist von Anfang an ein Gebäude das aus mehreren non-kinematic RB und Collidern besteht (die einfachste Lösung), oder (wegen der Performance) dein Gebäude besteht einfach aus mehreren statischen Meshes mit Triggern und diese wandeln bei einer Kollision die getroffenen Teile des Gebäudes in Meshteile mit non-kinematic RB und Collidern um. Der anspruchsvolle Teil ist dann noch, nach der Umwandlung die Kräfte auf die neu erzeugten Gebäudeteile korrekt zu übertragen oder die Umwandlung findet statt, kurz bevor z.b. der Panzer in die Nähe der entsprechenden Gebäudeteile kommt (Trigger). Bei einem Projektil würde man die Umwandlung beim Einschlag des Projektils stattfinden und danach würde man eine Explosionsforce am Einschlagspunkt erzeugen. Alle non-kinematic RB sollten dabei eine Masse haben die einem Gebäude entsprechen.
  5. Ja das schaut gut aus Danke Jetzt muss ich nur noch herausfinden wieso die Guns sich nicht drehen wie sie sollen^^
  6. Today
  7. für die Begrenzung eventuell könntest Mathf.Clamp benutzen? https://docs.unity3d.com/ScriptReference/Mathf.Clamp.html
  8. Hello again Ich hab da folgendes Problem: Ich habe ein Raumschiff mit mehreren Türmen. Diese Türme tragen Geschütze. Die Türme selbst sollen sich um die y-Achse drehen, was auch wunderbar funktioniert. public float speed; void FixedUpdate () { /*if(!isLocalPlayer) { return; }*/ // Generate a plane that intersects the transform's position with an upwards normal. Plane playerPlane = new Plane(Vector3.up, transform.position); // Generate a ray from the cursor position Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); // Determine the point where the cursor ray intersects the plane. // This will be the point that the object must look towards to be looking at the mouse. // Raycasting to a Plane object only gives us a distance, so we'll have to take the distance, // then find the point along that ray that meets that distance. This will be the point // to look at. float hitdist = 0.0f; // If the ray is parallel to the plane, Raycast will return false. if (playerPlane.Raycast (ray, out hitdist)) { // Get the point along the ray that hits the calculated distance. Vector3 targetPoint = ray.GetPoint(hitdist); // Determine the target rotation. This is the rotation if the transform looks at the target point. Quaternion targetRotation = Quaternion.LookRotation(targetPoint - transform.position); // Smoothly rotate towards the target point. transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, speed * Time.deltaTime); } } Nun habe ich mir für die Geschütze dasselbe vorgenommen. Nur sollen sich diese halt um die X-Achse drehen. Dazu habe ich "Vektor3.up" durch "Vektor3.right" ersetzt (in einem eigenen Script, dass den Guns zugewisen ist, die Guns sind ChildObjects der Türme). Leider funktioniert das nicht so wie gewünscht. Zwar drehen sich die Guns langsam nach unten bzw. oben, aber dafür muss man schon snipen, ansonsten drehen sie sich auch mal anders, so dass sie sich um den Turm rausdrehen. Ich finde leider nicht heraus warum das so ist. Bei der Y-Achse funktioniert das ja, bei der X-Achse nicht. Vielleicht könnt ihr mir ja helfen. Wäre jedenfalls super LG Tobi Edit: Schön wärs auch wenn ich die ° der Rotation begrenzen könnte, also zum Beispiel einen Waffenrichtbereich von 45° einbauen könnte. Vllt. könnt ihr dabei ja auch helfen
  9. Hallo hallo! Ich hab mir hier angemeldet um eventuell Hilfe von euch bei 1-2 Problemchen zu erhalten. Im Zuge eines Hobby Projektes arbeiten ein Kollege und ich momentan an einem kleinen RPG. Bisher konnten wir gute Fortschritte erzielen. Mein Kollege hat es geschafft ein System für Items / Ausrüstung und Charaktereigenschaften zu schaffen, während es mir gelungen ist eine Zufällig generierte Karte aus Tiles zu erzeugen (32x32 Pixel pro tile), mit einem Start und Endpunkt und objekten die den Weg blockieren. Gleichzeitig habe ich einen Pathfinding Algorithmus implementiert mit dem man prüfen kann ob einzelne Tiles zu erreichen sind (bspw ob es überhaupt möglich ist vom Start zum Ziel zu kommen) und ähnliches. Meine Klassenstruktur sieht kurz umschrieben so aus. Jedes Tile ist ein Gameobject (Tile), welches in einer eigenen Klasse verwaltet wird (mit infos ob das tile betretbar ist, Zahlenwerten fürs Pathfinding sowie dem Prefab vom Sprite etc.). Darüberliegend der Tilemanager der die Prefabs aller Sprites besitzt und daraus zufällig ein Gameobject vom Typ Tile erzeugt. das erzeugte Tile wird vom Tilemanager an den Leveldesigner zurückgegeben der das Grid bereitstellt (ein 2 Array mit x und y koordinate vom Gameobject Tile) und die Tiles dort einsetzt. zu guter letzt prüft der Designer mit dem Pathfinding algorithmus ob das Level beendet werden kann (Start->Ziel) und verändert die Tiles auf dem kürzesten Weg in einen Steinweg. Bis dato läuft alles auch prima, er erstellt zufällige räume und findet immer start und endpunkt bzw generiert den Weg der dort hinführen soll. Nun wollen wir das ganze System erweitern. Aus Ästhetischen und künstlerischen Gründen (wir sind voll nieten beim malen) würden wir gerne für den Boden kleinere 8x8 Tiles verwenden und diese zufällig durchrotieren, anstatt direkt 32x32 Tiles zu zeichnen die sich dann eventuell schnell wiederholen. Die Objekte (Felsen, Bäume etc.) die instanziert werden sollen, sollen jedoch unterschiedliche Größen unterstützen können. Hierzu würde ich mehrere Ebenen nutzen. Meine Grundideen: 1. Ebene: Der Boden (Graß, Stein, Erde) soll aus 8x8 Sprites erzeugt werden. das Grid muss dementsprechend vergrösert werden damit es von der skalierung bzw den Koordinaten noch passt (also mehr Gameobjects) 2. Ebene: Die Objekte (Bäume, Felsen, Kisten etc.) soll aus variablen Sprites erzeugt werden können (also 32x32, ebenfalls 8x8 oder aus unförmigen sachen (44x20 o.ä.)). Hierfür dachte ich das meine Klasse Leveldesigner, welche das Grid bisher zur verfügung stellt, ein weiteres erzeugt in welchem die Objekte abgelegt werden können. Dieses Grid wird kleiner skaliert. 3. Ebene: Fallengelassene Gegenstände, Monster, die Spieler etc. (dies braucht ja kein wirkliches Grid, nur jeweilige Collision mit den anderen Ebenen und freie Positionen. drei ideen hatte ich für dieses neue Grid: 1. Idee das neue Grid besitzt nur 1/4 der größe des 8x8 Boden Grids. Dadurch überdecken Objekte des 2. Grids dann beim erzeugen quasi 16 8x8 Sprites (ein 4x4 feld, also 32x32 pixel). Dieses wird dann mit objekten befüllt und überdeckt damit das Bodengrid. (haben wir beispielsweise 128x128 Felder im 1.Grid (welche mit 8x8 gefüllt werden) haben wir darüber ein Grid von der größe 32x32 in dem die größeren Objekte geladen werden können. Problem Hierbei: dies beschränkt die sache erneut nur auf 32x32 Sprites und ermöglicht es nicht relativ einfach unförmige Sprites zu verwenden ohne direkt ein ganzes Feld zu nutzen. 2. Idee: wir spalten alle größeren Sprites ebenfalls in 8x8 große Sprites und erzeugen daraus dann auf einem 2. Grid unsere Objekte (dies halte ich bis dato für sehr umständlich da jedes Tile egal wie unförmig aufgeteilt werden muss). 3. Idee: wir erzeugen aus unseren 8x8 Tiles, zusammenhängende Gameobjects der größe 32x32 und instanzieren diese als Boden. Die Objekte werden dann auf diese Felder drüber gelegt (ähliches Problem dann jedoch wie in Idee 1). Wie kann ich das alles gescheit skalieren bzw. implementieren? übersehe ich vielleicht eine unity eigene funktion? kann man grid gescheit frei skalieren lassen? --------------------------------------------------------------------------------------------------------------------------------------------------- das Zweite Problemchen ist die Performance des Projektes: erzeugen wir gebiete mit 8x8 Tiles können schnell tausende von Objekten erzeugt werden. Mein jetziges Grid kann auf eine größe von 100 x 100 wachsen. das sind bereits 10.000 Gameobjects. erzeuge ich nun ein Grid für kleinere Tiles (8x8) und will diese in der selben größe erzeugen brauche ich 400x400 felder (bereits 160.000 Objekte nur für den Boden). vielleicht schrecken mich diese großen Zahlen auch nur ab aber ist die Engine in so einem Rahmen nicht irgendwann überfordert? Ich Danke euch schonmal im Vorfeld und hoffe ihr könnt mir Helfen! Liebe Grüße, HuntySX
  10. Hallo zusammen, hat schon mal jemand Erfahrung gemacht mit einem Offset bei der Inverskinematik, weil der Character keinen Scale(1,1,1) hat? Hier ist das Problem gut beschrieben: http://answers.unity3d.com/questions/405692/using-setikposition-the-final-hand-position-is-off.html Allerdings scheidet die Lösung bei mir aus, dass der Character immer Scale(1,1,1) haben wird. Der Character wird entsprechend des Benutzers in Höhe und Breite angepasst. Hätte da jemand Ideen?
  11. Ach Quatsch, kann doch nicht jeder alles wissen php ist dafür da, mit HTTP angesprochen zu werden. Das ist das Protokoll, das dein Browser benutzt. Man schickt eine Anfrage hin und kriegt eine Antwort zurück. Diese Antwort kann z.B. HTML-Code sein, also eine Webseite, die angezeigt wird. Wenn dann in dem Code was von einem Bild steht, schickt der Browser gleich noch eine HTTP-Anfrage los und dieses Mal ist die Antwort die Bilddatei. Jedes Mal, wenn dein Browser etwas lädt, ist es mindestens eine HTTP-Abfrage. Du kannst aber auch ziemlich stumpfen plain text in einer HTTP-Antwort haben, oder XML, oder JSON, oder oder... Wenn dich das interessiert, kannst du dir mal Fiddler besorgen. Das zeigt dir systemweit alle HTTP-Anfragen und deren Antworten an. Da sieht man ganz gut, wie viel HTTP dein System den ganzen Tag spricht. In jedem Fall hat Unity dir für HTTP etwas bereit gelegt. Die klassische Variante ist die WWW-Klasse. Sie soll bald von UnityWebRequest abgelöst werden, ist aber noch nicht so weit. Du kannst also beruhigt WWW benutzen. Die Klasse funktioniert jedenfalls asynchron. Sie blockiert also nicht deinen Main Thread, was bedeutet: Das Spiel bleibt nicht stehen solange der HTTP-Verkehr läuft. Das ist auch gut so . Es bedeutet allerdings auch, dass du nicht einfach sagen kannst: var ergebnis = MachHTTP(); MachWasMit(ergebnis); Weil "MachHTTP" (heißt natürlich anders) nur ein Startschuss ist, und das Ergebnis erst später da ist, der Code aber weiterläuft. Eben damit dein Spiel nicht blockiert wird. Die übliche Lösung für das Problemchen ist, WWW in einer Coroutine zu benutzen. Ich weiß nicht, ob du Coroutines im Blick hast, aber ganz kurzgefasst: Eine Coroutine ist eine Methode, die unterbrochen und später weiter ausgeführt werden kann. Im Unity-Kontext kann eine Coroutine eine beliebige Anzahl von Frames warten. Zum Beispiel, bis ein WWW-Objekt fertig geworden ist. Der anschließende Code kann dann mit dem Ergebnis arbeiten. Coroutinen definiert und benutzt man so: void Start() // Oder irgendeine andere Methode { StartCoroutine(NameDerCoroutine()); } private IEnumerator NameDerCoroutine() { Debug.Log("Geht los."); yield return new WaitForSeconds(3); Debug.Log("Ist fertig."); } Kannst du so direkt testen. Um IEnumerator benutzen zu können, muss oben "System.Collections" in den using-Statements stehen. Deswegen steht das da übrigens auch standardmäßig in einem neuen Script. "yield return" ist hier das wichtige Keyword. Ein WaitForSeconds-Objekt wartet x Sekunden (offensichtlich), aber es gibt noch einiges andere, was da hin kommen kann. Z.B. bedeutet yield return null; dass genau einen Frame gewartet wird. Jetzt zu WWW. Das benutzt man so: public string url = "https://forum.unity-community.de/uploads/profile/photo-thumb-5586.jpg"; // Kerugals profile pic void Start() // Oder irgendeine andere Methode { StartCoroutine(DownloadTexture(url)); } private IEnumerator DownloadTexture(string url) { var www = new WWW(url); yield return www; // Wait for download if(string.IsNullOrEmpty(www.error)) { Debug.Log("Download successful."); renderer.material.mainTexture = www.texture; } else { Debug.LogError("Download Error: " + www.error); } } Wenn du keine WWWForm in dein WWW-Objekt packst, macht Unity eine sog. GET-Anfrage. Die schickt eine URL, die evtl Parameter enthält, und kriegt irgendetwas zurück. Das wird dann runtergeladen (in diesem Fall ein Bild) und du kannst damit machen, was du willst. Mit WWWForm erstellst du eine POST-Anfrage. Eine solche Anfrage ist dafür da, dem Server etwas mitzuteilen, statt etwas zu erfragen. Wann immer du hier im Forum einen Beitrag abschickst, ist das eine POST-Anfrage. Die Daten, die du abschickst (z.B. dein Beitragsinhalt), sind in der Abfage im POST-Dictionary enthalten. Auch das kann man übrigens mit Fiddler sehen. Dieses Dictionary, also diese Liste von "dies = das", so wie "beitrags-text = hallo leute, ...", wird von WWWForm gehandelt. Das funktioniert so: public string url = "link-zu-deinem-php-script"; // Kerugals profile pic public string player = "Hannes"; public int score = 10; void Start() // Oder irgendeine andere Methode { StartCoroutine(PostScore()); } private IEnumerator PostScore() // Dieses mal ohne Parameter, geht auch { var post = new WWWForm(); post.AddField("Player", player); post.AddField("Score", score + ""); var www = new WWW(url); yield return www; if(string.IsNullOrEmpty(www.error)) { Debug.Log("Posting successful."); Debug.Log(www.text); // Mal testweise die Antwort vom Server anzeigen } else { Debug.LogError("Posting Error: " + www.error); } } Dein php-Script auf dem Server muss jetzt die POST-Daten auslesen. Das geht so: <? $name = $_POST['Player']; $score = $_POST['Score']; // Nur mal testweise ausgeben echo $name.' hat '.$score.' Punkte.'; ?> Statt des echo musst du jetzt die Punkte in die Datenbank eintragen. Das führt hier natürlich zu weit, aber ich empfehle dieses Tutorial. PDO ist ganz gut zu lernen. Wenn das alles erstmal läuft, musst du dir noch Gedanken um die Sicherheit machen. Wenn du Fiddler tatsächlich mal ausprobierst wirst du merken, dass man damit auch selber HTTP-Anfragen machen kann. Dann baue ich mir fix eine Anfrage mit sehr vielen Punkten und nichts hindert mich daran. Hier kann man sich mal Hashing angucken, aber dazu kommen wir dann, wenn es soweit ist
  12. Komisch wieso hab ich das nicht gefunden? Auf jeden Fall vielen Dank
  13. @Sascha Es geht primär nicht ums Projektil sondern ums Gebäude.
  14. Projektile, die mit Rigidbodys modelliert sind, sind in meinen Augen nur dann sinnvoll, wenn sie beim Aufprall explodieren. Entweder das, oder das weggeschoben werden ist so gewollt. Bei allem darüber hinaus fängt es an, unsinnvoll zu werden, Rigidbodys zu benutzen.
  15. Du müsstest die Viewport Größe der Ortho Camera anpassen je nach Auflösung. https://docs.unity3d.com/Manual/class-Camera.html Wäre "Size" wenn die Projektion "Orthographic" ist.
  16. Das hier nach dem Instantiate sollte eigentlich schon genügen: laserBeam11.localScale *= 0.5f; https://docs.unity3d.com/ScriptReference/Transform-localScale.html
  17. Hallo ich möchte für mein Raumschiff Laserfeuer spawnen. Das klappt soweit auch, sitzt wackelt und hat Luft. Mit einer Ausnahme. Das Laserfeuer des Prefabs ist einfach zu groß. Da ich dasselbe Prefab aber auch für andere Waffen nutzen möchte, möchte ich nicht einfach für jedes Schiff dasselbe haben, da es sich ja nur in der Größe unterscheiden soll. Daher möchte ich beim Spawn die Skalierung von 1 auf zum Beispiel 0.5 ändern. GameObject laserBeam11 = (GameObject) Instantiate(laserBeamPrefab, laserBeamSpawnt11.position, laserBeamSpawnt11.rotation); Nun habe ich allerdings das Problem, dass ich nicht genau wie das geht. In der API habe ich nur dieses LossySize ding gefunden, dass scheint es aber nicht zu sein. Wie würdet ihr das in den Code einsetzen? Liebe Grüße Tobi
  18. Du bringst mich auf eine Idee! Hab das Problem gefunden, ich nutze bei meinen Charakteren 3 Collider, da der Charakter ziemlich unförmig ist. Collider 1 ist am Kopf, eine Sphere und ist Trigger. Collider 2 ist am Körper, eine Box und ist ein Trigger. Collider 3 ist ebenfalls am Körper, eine Box und ist kein Trigger. Collider 2 habe ich aus Kollisionsgründen eingebaut, da ich auch hier einen Trigger benötigte, dieser ist neu. Da er auch den kompletten Körper des Charakters bedeckt, reagiert die Bodenplatte mit OnTriggerEnter auch auf beide Collider...
  19. Die Werte von Time.time sind jedesmal unterschiedlich so dass davon auszugehen ist dass die Charaktere zwischenzeitlich den Trigger wieder verlassen. Wie genau ist der Trigger denn aufgebaut? Leicht größer oder gleich groß wie der normale Collider von zB der Bodenplatte/dem Glas? Wenn ja wäre dies eine Erklärung, die Physikengine löst Kollisionen auf, dadurch kann es passieren dass allein durch die Korrektur damit 2 Objekte nicht ineinander stecken bleiben eine Trennung auftritt. Auch spielt es eine Rolle ob Objekte voneinander abprallen, selbst minimal könnte dies eine Trennung emittieren. Du könntest entweder die Trigger größer machen oder ein delay einbauen der verhindert dass zwei gleiche Objekte kurz folgend mit dem Glas kollidieren können.
  20. Hallo, weiss jemand bitte wie man abstellen kann, dass sprites bei höherer Bildschirmauflösung zu Pixelklotzgebilden vergrössern? Im Canvas ist ein Scalerscript - auch wenn ich das deaktiviere ändert sich nichts. PS: das scalerscript ist wohl nur für die neue GUI, stimmts?
  21. Und genau deswegen müssen die Objekte eine hohe Masse haben! Wenn du das Ganze physikalisch aufbaust, also ein Player eine Masse von 80 hat und ein Dachelement eine Masse vom 500, dann schiebt da kein Player! Den Dragwert wegen dem Schieben zu erhöhen ist doof, denn er wirkt sich auch auf die Beschleunigung beim Fallen aus (wenn ich mich nicht irre). Stattdessen den RB's und Collidern schöne reibende Materialien verpassen. Ganz so, wie es in echt wäre. Glaub mir, ich habe mit meinem Flipperprojekt viele Erfahrungen mit der Physik sammeln können und rede das nicht einfach so daher. Du kannst natürlich immer noch den Ansatz mit dem umschalten auf Kinematik und nonKinematik weiterführen. Du musst aber eben irgendwie vor der Explosion allen Objekten, die da zusammenhängen, übermitteln, dass sie jetzt nonKinematik werden müssen. Also musst in dem FixedUpdate, bei dem das Prjektil auf ein Teilobjekt auftrifft, sich das Teilsück umschalten und auch allen seinen Nachbarn, die zusammenhängend das Gebäude bilden, das mitteilen. Damit das geht, muss zu Beginn des Spiels jedes Teilobjekt seinen Nachbarn und die Nachbarn seiner Nachbarn kennen. Also braucht jedes Objekt ein Script mit einem Array oder einer Liste seiner Nachbarn. In dem Script ist dann eine Funktion, die die Kinematic Eigenschaft ausschaltet und von mir aus einen Timer startet. Diese Funktion der anderen Objekte spricht das getroffene Teilstück an. Der Timer der dann bei allen Objekten gestartet wird, gibt die Zeit an, wann frühestens wieder zurück geschaltet werden soll. Zusätzlich fragt sich jedes Objekt, ob denn noch eine Velocity vorhanden ist und solang das so ist, weil da vielicht ein Objket noch rutscht, wird gewartet. Erst wenn die Velocity ungefähr bei 0 ist, wird das Objekt selbst wieder zum Kinematic RB. Nachdem also das System auf nonKinematic umgeschaltet wurde, also erst im nächsten FixedUpdate, führst du die Explosionsforce aus. Jetzt sollten alle betroffenen Objekte auf die Explosion reagieren und auch alle anderen Beteiligten würden mitspielen. In deinem Szenario existiert also nur das Problem, dass alle Nachbarn sich vor dem Ereignis umschalten müssen, denn gleichzeitig geht es nicht.
  22. Hallo Sascha, erstmal vielen Dank für die schnelle Antwort. Das Registrations und Login Script werde ich in PHP schreiben, sobald ich weiß wie ich auf ein PHP Scipt von C# zugreifen kann Ich wollte eigentlich nur Testen, ob ich überhaupt eine Verbindung von Extern zu meiner Datenbank aufbauen kann. Andere Frage: Wenn ich auf ein PHP Script von Extern zugreife, reicht es wenn ich als ConnectivitätsString die IP Addresse + meine Php datei angebe? Also so z.B: "42.42.42.42/Login.php" Vielen Dank und verzei bitte wenn die Frage evtl. saublöd ist
  23. Liegt der Code auf dem Server? Wenn nein, ist da schonmal der Fehler. Man sollte niemals direkt von irgendwo eine Datenbankverbindung aufbauen. Stattdessen immer eine Schicht dazwischen packen. Darf mit einem kleinen php-Skript losgehen, das dafür sorgt, dass nur gültige Abfragen durchkommen. Auch wenn sich das Konnektivitätsproblem vielleicht lösen lässt, holst du dir mit einer direkten Verbindung vom Ccient zur Online-Datenbank nur Probleme ins Haus. Sobald du auf HTTP-Anfragen an deine Web-API umgestellt hast, werden sich die Probleme von alleine lösen.
  24. Hallo zusammen, ich stehe auf dem Schlauch, was auch der Grund für meinen Post ist. Ich habe bereits einige fertige Spielchen gemacht, nun aber wollte ich mich mal an die Programmierung einer Highscore machen, welche natürlich über einen Server laufen soll. Getan wie gesagt, einen günstigen Linux V-Server gemietet, MySql, Phpmyadmin draufgehauen und versucht mit einem Simplen Codeschnippsel die Connectivität zu testen. using System; using System.Data; using MySql.Data; using MySql.Data.MySqlClient; namespace Test { class MainClass { public static void Main(string[] args) { System.Console.WriteLine(checkDB_Conn()); System.Console.ReadKey(); } public static bool checkDB_Conn() { MySql.Data.MySqlClient.MySqlConnection conn; string myConnectionString; bool check = false; myConnectionString = "server=81.169.***.***;uid=root;" + "pwd=******;database=test;"; try { conn = new MySql.Data.MySqlClient.MySqlConnection(myConnectionString); conn.Open(); check = true; } catch (MySql.Data.MySqlClient.MySqlException ex) { check = false; } return check; } } } Da ich das in XAMPP schon x-mal gemacht habe, dachte ich mir, statt localhost die IP Adresse und das ding läuft... Ich wäre wirklich sehr dankbar, wenn irgendjemand, mir meinen Fehler aufzeigen könnte. -ist der connectionString falsch? -phpmyadmin liegt auf /var/www/phpmyadmin , ist das korrekt? Vielen dank im Voraus!
  25. Ohne zu testen, fällt mir gerade die Lösung ein. Ich lasse doch an der selben Stelle der Bodenplatte den Clon der zerbrochenen Platte erstellen, jedes einzelne Kind Objekt tritt damit in den Collider ein. Also muss ich die nur aus der Enter Abfrage ausklammern. Gut, ich hatte teilweise Recht, dass wäre die Antwort: OnTriggerEnter: Charakter_4(2.6) UnityEngine.Debug:Log(Object) Bodenschaden:OnTriggerEnter(Collider) (at Assets/Scripts/Bodenschaden.cs:47) OnTriggerEnter: Charakter_4(3.3) UnityEngine.Debug:Log(Object) Bodenschaden:OnTriggerEnter(Collider) (at Assets/Scripts/Bodenschaden.cs:47) OnTriggerEnter: Charakter_1(3.78) UnityEngine.Debug:Log(Object) Bodenschaden:OnTriggerEnter(Collider) (at Assets/Scripts/Bodenschaden.cs:47) OnTriggerEnter: Charakter_1(4.28) UnityEngine.Debug:Log(Object) Bodenschaden:OnTriggerEnter(Collider) (at Assets/Scripts/Bodenschaden.cs:47) Es treten hintereinander zwei Charaktere auf die Platte, nämlich Nr. 1 und Nr 4, die werden jeweils aber doppelt angerechnet. EDIT: Also das Problem liegt eindeitig an dieser Methode: private void OnTriggerEnter(Collider other) { if(other.gameObject.tag == "Charakter_1" || other.gameObject.tag == "Charakter_2" || other.gameObject.tag == "Charakter_3" || other.gameObject.tag == "Charakter_4" || other.gameObject.tag == "Charakter_5" || other.gameObject.tag == "Charakter_6") { anzahlBegehungen += 1; Debug.Log("OnTriggerEnter: " + other.gameObject.name + "(" + Time.time + ")"); if (anzahlBegehungen <= 1) { //StartCoroutine("GlasAnbrechen"); // Es wird das erste mal die Plattform betreten, Risse werden erzeugt } else if (anzahlBegehungen > 1) { //StartCoroutine("GlasZerbrechen"); // Es wird das zweite mal die Plattform betreten, es folgt der Absturz } } } Jeder Charakter, der die Platte betritt wird je 3 mal gezählt! Hab nun auch einmal aus Test einen Kubus mit Collider und Rigidbody ausgestattet und auf die Platte fallen lassen, auch hier, eine Berührung, wird 2 mal registriert. Des weiteren auch mal ein neues Script gemacht in dem nur dies enthalten ist: using System.Collections; using System.Collections.Generic; using UnityEngine; public class Zähler : MonoBehaviour { public int anzahlBegehungen = 0; private void OnTriggerEnter(Collider other) { anzahlBegehungen += 1; } } Dies habe ich aber nicht nur bei der Glasplatte eingebaut, sondern auch bei anderen Bodenplatten. Ergebnis, auch hier wird einmal in den Collider eintauchen 3 mal gezählt!
  26. @malzbie Wenn es sooo einfach wäre übers Gewicht, hätte ich das in meinen gefühlten 1000 Tests gemacht. Leider scheint das Gewicht in meinem Fall überhaupt nix zu nützen. Drag macht auch alles nur schlimmer. Trotzdem danke. @Zer0Cool Warum ich das so machen will ? Weil sonst das Zeug rumschwebt, in der Luft. Und das kann ich nicht ausstehen. Das sieht man aber überall. Die "Schützen" Ballern von ner Wand von unten nach oben alles weg und dann schwebt das Dach dumm rum. Ich hab das Problem, dass entweder: * Alles sofort in die Luft fliegt * Nix in die Luft fliegt und nur das getroffene runterfällt + alles andere sonst rumschwebt * Das Getroffene in die Luft fliegt und der Rest bei kleinster Berührung runterfällt und noch n paar andere besch. Fälle. Dein Vector is aber ein Ansatz - allerdings dürfte dann erst wieder alles rumschweben, wenn unten das Zeug wegballerst. Muss ich aber erst noch testen. Mein Problm is ja nicht die Zerstörung, sondern die Umgebung der Zerstörung - bzw. was tut das Zeug, was NICHT zerstört wurde. Es darf nicht zuviel und nicht zuwenig runterfallen - und isses runtergefallen, darf es nicht wie von jedem npc weggeschoben werden können wie Smarties. Sinn der Übung is ja: Ich will mit nem Panzer durch ein Haus durchfahren können und mit ner Rakete nur Teile des Hauses in die Luft sprengen können. Ganze Sachen in die Luft jagen, is ja überhaupt kein Problem. Das Problem is der Rest des Schlachtfeldes, wo Granaten, Raketen, Partikel, Trümmer und Npcs rumballern, rumfliegen, rumliegen und rumlaufen
  27. Yesterday
  28. Vermutlich betritt "etwas" den Trigger mehrfach. Ergänze mal den Code um die Methode OnTriggerExit() und setze da mal eine Debugausgabe hinein. Kann auch für OnTriggerEnter() nicht schaden. Zudem kannst du dir auch einmal ausschauen, wer da eigentlich deinen Trigger betritt: void OnTriggerEnter(Collider other) { Debug.Log("OnTriggerEnter: " + other.gameObject.name + "("+ Time.time +")"); } void OnTriggerExit(Collider other) { Debug.Log("OnTriggerExit: " + other.gameObject.name + "("+ Time.time +")"); }
  1. Load more activity