Jump to content
Unity Insider Forum

Leaderboard


Popular Content

Showing content with the highest reputation since 11/17/2018 in all areas

  1. 2 points
    So, jetzt habe ich es anders gemacht: Mit Processing, der Minim Sound-Bibliothek und OscP5 habe ich mir ein kleines Programm erstellt, dass nach Start die Daten sendet. In Unity lese ich sie mit OSC aus. Funktioniert einwandfrei!
  2. 2 points
    Jaha! Kommt darauf an, wo du diese Abfrage stehen hast. Wenn sie in der Update drin steht, wird solange das PS gestartet, bis irgendwas von deinene oberen Bedingungen nicht mehr eintritt. Weil jetzt bei jedem Frame gestartet wird, sieht es für dich so aus, als mache er nichts, aber er macht schon was, nur siehst du immer nur den Anfang, also dieses eine erste Frame und da ist wahrscheinlich noch kein Partikel entstanden. Verstehste? Bei deinem 2ten Codebeispiel wird nur einmal gestartet, denn dann ist PS ja im nächsten Frame gestartet und somit ist deine Abfrage nicht mehr erfüllt. Ja und dann siehst du auch die weiteren Frames der Partikel. Übrigens, wenn du hier Code einfügst und das Codefenster von HTML auf C umstellst (unten rechts der Knopf), kannst du auch richtig mit Tabs arbeiten und schicker wird die Farbgebung dann auch.)
  3. 2 points
    Moinsen! Ich habe gerade ein Paket im Asset Store veröffentlicht: Der Thread dazu auf Englisch im Unity-Forum: https://forum.unity.com/threads/released-13pixels-pooling.587068/ Falls jemand noch nicht so richtig weiß was Pooling ist: Instantiate und Destroy sind keine besonders performanten Methoden. Instantiate deserialisiert das gesamte Prefab einmal und Destroy erzeugt Memory Garbage. Pooling beschreibt den Ansatz, bestimmte Objekte nicht zu löschen, sondern zu deaktivieren und später wiederzuverwenden. Objekt-Typen, die oft spawnen und wieder despawnen, werden dabei performanter, wenn man Pooling benutzt. Es gibt bereits einige Pooling-Pakete, und ich habe einige angeschaut und ausprobiert... trotzdem habe ich mein eigenes geschrieben, weil mir nichts davon gefallen hat. Kurze Zusammenfassung, was mein Paket anders macht als andere: Kein Extra-Setup nötig. Andere Pakete haben meistens einen Pool Manager oder so, also ein Objekt, in das man seine Prefabs ziehen muss, damit man Pooling mit ihnen machen kann. Oder man muss die PRefabs alle in einen bestimmten Ordner tun. Bei 13Pixels Pooling gilt der Grundsatz: Pooling ist eine technische Angelegenheit, und deshalb sollte es im Editor so wenig wie möglich auftauchen. Deine Szenen werden sich nicht ändern, wenn du von Instantiate/Destroy auf dieses Paket umsteigst. Anpassbares Pooling-Verhalten pro Prefab. Standardmäßig benutzt das Paket GameObejct.SetActive, um Objekte zu de- und zu re-aktivieren. Je nach Prefab kann es aber auch reichen, das Objekt einfach aus der Szene rauszuverschieben oder eine einzelne Komponente gezielt zu deaktivieren. In solchen Fällen kann man ein einfaches Interface implementieren, um einem Prefab sein eigenes Pooling-Verhalten zu geben. Pooling-Instanzen können beliebigen Objekten untergeordnet werden. Oft müssen von einem Pooling-System instanziierte Objekte einem Pooling-spezifischen Objekt untergeordnet bleiben - hier nicht. Hier gibt's (auf Englisch) die Anleitung, um mal einen Einblick in den Workflow zu bekommen: http://13pixels.de/pages/assetstore/Pooling/User-Manual.pdf Hier gibt's das Paket im Asset Store zu kaufen: http://u3d.as/1nvh Feedback, Nachfragen und Ideen sind gerne gesehen. Und das nicht nur, weil ich das Ding in meinen eigenen Projekten benutze
  4. 1 point
    Moin, ich habe mich nun dazu durchgerungen, endlich mal den aktuellen Stand meines Projektes zu posten. Ich habe es immer weiter vor mich hergeschoben, da ich immer mehr Sachen einbauen und verbessern wollte, bevor ich es poste. Es ist mein erstes Projekt, bzw Spiel dass ich mache. Zu dem Spiel: Vom Spielprinzip ist es an Jetpack Joyride angelehnt. Das ich damit nicht das Rad neu erfinde, ist mir klar. Allerdings gestalte ich es komplett anders und lasse meine Ideen einfließen. Es ist natürlich nicht so toll wie eure Projekte, da ich auch noch dabei bin, Unity zu lernen. Das Projekt, spiegelt auch meinen aktuellen Wissenstand wieder. Die Dinge in dem Video, sieht auch bei weitem noch nicht fertig. Da muss noch vieles ergänzt bzw justiert werden Nach dem builden musste ich auch feststellen, dass so manche Dinge von der Skallierung nicht hinhauen. Und die blaue Wolke die der Charakter normal unter den Füßen hat, ist nach dem Build des Games auch verschwunden?! Zu den Ursachen muss ich noch forschen Achja. Es handelt sich hierbei um eine Touchsteuerung. Da muss ich auch noch ein paar Sachen justieren. Aber im großen und ganzen klappt es schon mal. Der eine oder andere, wird bestimmt so manchen Thread in dem Video erkennen Über eure Meinungen würde ich mich sehr freuen. vid.mp4
  5. 1 point
    Warum kannst du dann nicht die gesamte Kamera mit Instantiate kopieren?
  6. 1 point
    Danke Sascha. Die letzten Unklarheiten wurden beseitigt und es funktioniert gut.
  7. 1 point
    Ich rate jetzt einfach mal blind, dass du Input.GetTouch und dergleichen benutzt. Denke mal, etwas Code hilft da mehr als tausend Worte: private void Update() { for (var touchIndex = 0; touchIndex < Input.touchCount; touchIndex++) { var touch = Input.GetTouch(touchIndex); // If touch is on left screen half if (touch.position.x <= Screen.width / 2) { MoveCharacterUpwards(); } else { if (touch.phase == TouchPhase.Began) { ShootFireball(); } } } } Wenn das nicht funktionieren sollte, würde ich stark darauf tippen, dass dein Testgerät extrem alt ist und gar kein Multitouch unterstützt.
  8. 1 point
    Uff... das kann man aber leicht falsch verstehen. Instantiate kopiert ein GameObject oder ein ScriptableObject. Es gibt zwei Besonderheiten: Man kann eine Komponente übergeben. In diesem Fall wird das GameObject kopiert, auf dem die Komponente liegt. Es wird eine Referenz auf die Kopie dessen zurückgegeben, was übergeben wurde. Übergibt man also z.B. eine BoxCollider-Komponente, wird das GameObject kopiert, zu dem es gehört, und es wird eine Referenz auf die BoxCollider-Komponente der Kopie zurückgegeben. Um aber mal auf die Schreibweise der Frage einzugehen: Die ist schlicht veraltet. Man braucht schon lange nicht mehr auf ein GameObject zu casten, wenn man ein GameObject reingesteckt hat.
  9. 1 point
    Moinsen also wenn du jetzt nur einfache variablen zwischen den 2 Spielern synchronisieren willst dann kannst du dir forge Networking im asset store anschauen. War damals Pay aber ist nun kostenlos und bietet den vollen Umfang für Networking mit masterserver für serverlisten und dedicated server mit wenig Aufwand. Dedicated Server gehen auch ohne masterserver und lokal ^^ einfach keine ports public stellen ^^. Gibt einige tutorials auf YouTube dazu aber musst schauen das die max 1-2 jahre alt sind weil alle davor sind vom alten forge. Der dedicated server den du easy machen kannst funktioniert auf Windoof/Mac und Linux. Falls du aber vorhast dedicated server runtime zuverwirklichen geht das auch ohne Probleme und du brauchst keine Lizenz wie bei Unet wo du pro CCU zahlst. Kannst dich da ja mal einlesen und die haben auch einen discord für gratis support. Gibt sogar Beispiel Projekte wenn du wissen willst wie du auch Animationen synchronisieren kannst.
  10. 1 point
    Fast eine Jahr Später: Mit Unity 2018.3 kommt schon C# 7.3
  11. 1 point
    Hallo Sascha, also, erstmal vielen Dank an Dich und dieses Forum ! Endlich tut's das, was ich will Ich habe jetzt an jedes Terrain-Prefab ein Script angeheftet, welches Methoden und Felder enthält. Wenn ich jetzt mit der Maus über ein GO der Map streiche, gibt mir meine "Mausmanager".class eine Referenz auf das GO zurück, über welches ich dann mit GetComponent die Methoden und Felder des angehefteten Scripts abrufen kann,wie z.B die Indices des Hex im Map-array usw.. Jetzt verstehe ich auf auch den Unterschied/Vorteil zu meine ursprüngliche Kapselung... Also nochmal fettes THX ! und LG
  12. 1 point
    Ich weiß ja nicht, was "Positionqr" so machen soll, aber prinzipiell brauchst du da doch nur einen Vector3 zu bauen: new Vector3(q, r) Erstmal teilst du deine "Parameter" in zwei Teile auf: Diejenigen, die mehrere Objekte gemeinsam haben und diejenigen, die für jedes Objekt einzeln gesetzt werden müssen. Was Objekte gemeinsam haben, landet einfach auf dem Prefab. Die Dinger haben alle ein Script "Feld"? "Feld" landet auf dem Prefab. Es gibt Waldfelder und Grasfelder? Mach dir mehrere Prefabs, und wähle, wie du es schon tust, das richtige für Instantiate aus. Was die Objekte alle einzeln brauchen, kannst du nach Instantiate zuweisen. Der Rückgabewert von Instantiate ist eine Referenz auf das GameObject, das gerade instanziiert wurde oder auf eine Komponente davon - je nachdem, was du als Prefab-Parameter reingibst. Damit kannst du arbeiten: var ball = Instantiate(ballPrefab, position, rotation); ball.transform.localScale = Vector3.one * Random.Range(1f, 5f); Hier spreche ich die Transform-Komponente des Balls an. Wenn du eine andere Komponente brauchst, hilft GetComponent: var field = Instantiate(fieldPrefsb, position, rotation); field.GetComponent<HexField>().Something();
  13. 1 point
    Wenn du so etwas liest, solltest du nicht gleich versuchen, das anzuwenden, ohne es zu hinterfragen. Wenn man mit Unity anfängt, sollte man sich komplett auf MonoBehaviour-Klassen beschränken. Du sagst selber, dass du noch recht neu bei der Sache bist - da solltest du nicht gleich versuchen abgefahrene Konzepte einzubauen. Nur, weil ein Renderer eines GameObjects nicht mehr sichtbar ist, heißt das nicht, dass das GameObject weg ist. Du musst also gar nichts besonderes machen. Warum zerstörst du das Objekt denn, wenn dessen besondere Eigenschaften noch wichtig sind? Mach dir darum mal keine Sorgen. Stelle dir die Szene wie eine echt Umgebung vor. Nur, weil die Kamera etwas nicht sieht, ist es nicht weg. Die Frage ergibt nicht viel Sinn. Schau dir mal Prefabs an. Da stellst du dir ein GameObject zusammen, mit dieser und jener Komponente, diese wiederum mit diesen und jenen Werten, und davon erstellst du mit Instantiate jeweils immer eine Kopie. Hier ist ein ganz grundlegender Denkfehler. Deine Grundannahme ist, dass du dein Spiel mit Code zusammenbaust. Das ist in Unity nicht die übliche Herangehensweise. Du baust dir deine Szene, deine Levels, deine Spielwelt(en) im Editor zusammen. Im Code beschreibst du nur, wie bestimmte Dinge sich verhalten. Um eine Komponente auf ein GameObject zu legen, kannst du den "Add Component"-Knopf im Inspektor benutzen, wenn du das GameObejct markiert hast. Oder du ziehst die Script-Datei aus den Assets in den Inspektor. Warum? Welchen Zweck willst du damit erfüllen?
  14. 1 point
    Okay, das bringt uns schon einmal weiter. Du hast einen grundlegend ungünstigen Ansatz für Unity gewählt. Ein GameObject soll nicht nur eine Marionette für ein anderes Objekt sein, dass es steuert - es ist selbst ein Akteur. Anstatt also eine Klasse zu schreiben, die ein GameObject fernsteuert, baust du eine Komponente, die du auf das GameObject legst. Mit dieser steuert sich das GameObject dann selbst. Statt also Folgendes zu schreiben: class Unit { public GameObject unit; public void TeleportTo(Vector3 target) { unit.transform.position = target; } } baust du so etwas: public class Unit : MonoBehaviour { public void TeleportTo(Vector3 target) { transform.position = target; } } Ein MonoBehaviour hat das GameObject auf dem es liegt und - noch viel wichtiger - die anderen Komponenten auf diesem GameObject immer Griffbereit. Du willst also nicht ein GameObject in eine eigene Klasse einbetten, sondern deine Klasse als Komponente zum Teil des GameObjects machen. Dass du das so und nicht anders machen willst, liegt an dem einfachen Grundsatz: Arbeite immer mit deiner Umgebung (also in diesem Fall Unity), und nicht dagegen an.
  15. 1 point
    Warum sollte das Objekt, das für die Grafik zuständig ist, Bewegungsbefehle auslösen? Aber mal ganz von vorne. Mit meine ich nicht das Technische. Was soll an dieser Stelle in deinem Spiel passieren? Versuche das mal völlig ohne technische Begriffe zu beantworten. Soll ich etwas bewegen? Soll man auf etwas klicken können? Was du da schreibst ist recht unverständlich, klingt aber stark nach gaaanz schlechter Vorgehensweise. Also lass uns doch mal ganz am Anfang anfangen.
  16. 1 point
    Gar nicht. Beliebig viele Objekte (nicht "Klassen") vom Typ "Unit" können dasselbe GameObject referenzieren. Es ist kein Rückschluss möglich, wer alles ein Objekt referenziert. Was auch immer du mit diesem Konstrukt vorhast, lässt sich auf eine andere Art sicherlich besser (bzw. überhaupt erst) bewerkstelligen. Was hast du also eigentlich vor?
  17. 1 point
    Hallo nochmal, ja, der LineIn-Eingang kann so eingelesen werden, im Beispiel funktioniert es. Leider finde ich bis jetzt für mich keine Lösung, wie ich Lautstärke und die lauteste Frequenz auslesen kann. Das Skripting ist sehr komplex, aber ich versuche weiterhin mich reinzufuchsen! Nochmal danke, Jörg
  18. 1 point
    Eine gute Entscheidung. Wollte auch noch was in Richtung 3D Modellierung sagen. Mein Surface damals war glaub 12.5 Zoll. Ich bin ja nicht zart besaited. Aber wenn du darauf arbeiten möchtest, ist das auf dauer sehr anstrengend und man wird schnell müde. So gings mir zumindest. Was ich mir allerdings gut vorstellen kann, wäre ein 17 Zoller. Aber das schränkt natürlich wieder in Puncto Mobilität ein.
  19. 1 point
    Jo, es ist schon so lange her mit Mathe. Aber im Endeffekt hast du nur ne Scalenverschiebung. Ich würde es so machen: Als erstes abfragen ob du nicht außerhalb der Maximaldistanz bis (deine 30 Meter wo eh 100% erreicht sind). Wenn ja, einfach mit 100% rechnen. Wenn nein folgende Berechnung durchführen. Effektivpunkt= posi (z.b.12m) / maxPosi (die 30m) //ergibt 0.4 Effektbereich = maxwert (1.5) - minimalwert (1) // ergibt 0.5 Effektivitaet= maxwert- Effektivpunkt*Effektivbereich // ergibt 1.3 weil 1.5 - 0.4*0,5 100/Effektivitaet= rund 76.9%
  20. 1 point
    Du kannst mit deinem Laptop natürlich mit Unity und Blender anfangen. Der Prozessor ist ja recht schnell. Ich sehe die Schwäche bei der Grafikkarte, denn mit der wirst du ab einen gewissen Punkt nicht mehr mit 60 fps Spielen/Testen können. Aber für den Anfang reicht das allemal. Und da beide Softwaren umsonst sind, fang einfach an.
  21. 1 point
    Hi, ich habe PC und einen Laptop. Rein von den Spezifikationen, dürfte das problemlos laufen. Es sollten aber schon wie Thariel sagte, 8 gig RAM sein. Rein vom Komfortk kann ich dir nur empfehlen, nicht das kleinste Display zu nehmen. Unter 13.5 Zoll sollte es nicht sein. Da machste dir kein Gefallen. Es gibt nichts schlimmeres, als in Unity im 2 by 3 Layout zu arbeiten und alle Naselang die breite von den Flächen verändern zu müssen. Da du Blender angesprochen hast, kann ich dir sagen, dass auch das funktionieren wird. Ich habe auf meinem damaligen Surface, dass in etwa die gleichen Spezifikationen hatte wie deine oben genannten, Zbrush genutzt. Das ist ein Modellierungstool. Allerdings, war dass im Gegensatz zu Blender performant Was ich damit sagen will, ist, dass du mit Blender evlt schnell an die Grenzen stößt. Das hängt aber auch vom Einsatzgebiet ab.
  22. 1 point
    Hi Unity läuft fast überall. Es kommt darauf an, was du mit Unity machst und wie gross dein Projekt ist. Ich empfehle unbedingt mindestens 8GB Ram, mit 4 kommst du nicht weit. Ehrlich gesagt, würde ich dir grundsätzlich von einem Labtop abraten, ausser du brauchst das Labtop wirklich fürs Studium oder die Schule (weil du es dort benutzen musst). Selbst dann würde ich so schnell wie möglich trotzdem noch ein PC zulegen. Ich denke aber schon, dass du auf deinem Labtop Unity kennen lernen kannst und einiges schon ausprobieren kannst.
  23. 1 point
    Jeden Frame Schreibzugriff auf eine Datei? Für Daten die erstmal nur innerhalb einer Programmausführung relevant sind? Das ist schon nicht mehr ein Performance-Problem, das ist gegen die genfer Konvention!
  24. 1 point
    Moin, eventuell hilft das Beispiel hier weiter, ein anderer out of the box Weg ist mir nicht bekannt. https://github.com/hallidev/UnityWASAPILoopbackAudio
  25. 1 point
    Warum dein Video einen Rotstich hat, kann ich nicht sagen. Vielleicht mag Unity dein Videoformat nicht. Wie ist es denn kodiert? Der Videoplayer ist auch nichts anderes als der Audioplayer, wenn es darum geht Ereignisse abzufragen. Du könntest dem Videoplayer also ein Script geben in dem du dann eine Referenz zum Videoplayer bildest. using UnityEngine.Video; using UnityEngine.SceneManagement; public class videoSteuerung : MonoBehaviour { VideoPlayer myVideo; void Awake () { myVideo = GetComponent<VideoPlayer>(); } Und dann in der Update einfach : if (!myVideo.isPlaying) { SceneManager.LoadScene(1); }

Announcements

Hy, wir programmieren für dich Apps(Android & iOS):

Weiterleitung zum Entwickler "daubit"



×