Jump to content
Unity Insider Forum

Leaderboard


Popular Content

Showing content with the highest reputation since 02/18/2019 in all areas

  1. 4 points
    Ich denke, ich schreibe mal etwas dazu, auch wenn ich da Anfangs nicht so sicher war. Zu diesem Thema kursiert sehr viel Halbwissen und ich hatte keinen Bock, auf den Zug mit den Fackeln und Heugabeln aufzuspringen, bevor ich nicht das Gefühl habe, etwas besser informiert zu sein. Eine Kampagne wie die von Roman ist sicherlich gut, denn so oder so braucht das Thema so viel Aufmerksamkeit, wie es kriegen kann. Lasst euch aber nicht von reißerischen Phrasen wie "das Internet wird abgeschafft" oder "da wird unsere Meineungsfreiheit abgeschafft" triggern, ohne das Ganze mal zu hinterfragen. Hier also meine zwei Groschen dazu. Artikel 13 ist ein Entwurf für eine Gesetzesänderung, die EU-weit inkrafttreten soll. Sie soll Rechteinhaber von urheberrechtlich geschützen Werken unterstützen, dass die Einnahmen, die ihnen für die Werke zustehen, auch bei ihnen ankommen. Es geht hierbei nicht um eine Verschärfung des Urheberrechts. Was vorher nicht erlaubt war, ist immer noch nicht erlaubt (z.B. die Verbreitung von Filmen ohne entsprechende Lizenz), was vorher erlaubt war ist immer noch erlaubt und was vorher Grauzone war ist das theoretisch nach wie vor (z.B. Derivate und Parodien, inklusive Memes). Aktuell ist der Nutzer einer Plattform derjenige, der sich bei Gesetzesverstößen strafbar macht. Wenn hier ein User den neuen Marvel-Film hochlädt, dann macht er sich strafbar. Wenn wir den dann sofort löschen, dann sind wir als Plattformbetreiber auf der sicheren Seite. Der Entwurf sieht im Kern genau eine Sache vor: Die Strafbarkeit für Urheberrechtsverletzungen auf den Betreiber der Plattform auszuweiten. Das heißt, dass wenn hier ein User ein geschütztes Werk hochlädt, wir dafür verklagt werden können, obwohl wir selber keinen Verstoß begangen haben. Anderen solcherlei Verstöße zu auch nur im Ansatz zu ermöglichen, soll in Zukunft ebenfalls ein Vergehen sein. Daran finde ich für meinen Teil in der Idee nicht wirklich etwas auszusetzen. Das Internet funktioniert eben anders als analoge Medien und ermöglicht es überhaupt erst einmal, unmoderierte Plattformen anzubieten. Was immer in der Zeitung oder im Radio landet, läuft eben immer schon durch einen menschlichen Filter. Das Problem mit der Reform ist in ihrer aktuellen Fassung die Implementation der Forderungen. Ja, es wird zu keinem Zeitpunkt das Wort "Uploadfilter" erwähnt, obwohl es überall benutzt wird, um Leute anzustacheln. Aber schauen wir uns doch direkt mal das für uns alle am ehesten interessante Beispiel an: Unity-Insider. Es gibt einen kleinen Absatz, der kleinere Plattformen vor der Verantwortung schützen soll. Dieser Absatz verlangt, dass die Plattform nicht älter als drei Jahre ist und nicht mehr als 10 Mio. Euro pro Jahr eingenommen hat. Alleine, weil es Unity Insider schon eine Weile gibt, sind wir dadurch nicht geschützt. Es ergibt sich daher für uns die Herausforderung, mit "technischen Mitteln" sicherzustellen, dass keine Sekunde lang Urheberrechtsverletzungen in diesem Forum passieren. Und da gibt es potentiell drei Möglichkeiten: Wir machen einen Pauschaldeal mit Verwertungsgesellschaften, wie Youtube einen mit der Gema hat. Dafür gibt es keinen standartisierten Weg und würde vermutlich eine Menge rechtskräftiger Unterstützung bedürfen. Es ist nicht davon auszugehen, dass wir in der Lage sind so etwas zu erwirken. Uploadfilter. Wir müssten ein Stück Software besorgen, der auf irgendeine Art jeden Forenbeitrag überprüft und checkt, ob eine Urheberrechtsverletzung vorliegt. Wir stellen das Forum so ein, dass wir manuell jeden Post freischalten müssen. Merkste selbst. 1. und 3. kommen absolut nicht in die Tüte. 2., also Uploadfilter, sind extrem problematisch, und das aus zwei Gründen: Es gibt sie nicht in verfügbarer Form. Google hat auf Youtube das "Content ID"-System laufen, ansonsten gibt es diese Software einfach nicht. Woher sollen wir die kriegen? Wie viel würde sie kosten? Selber schreiben kommt höchstwahrscheinlich nicht infrage. Darüber haben sich die Befürworter des Entwurfs scheinbar keine Gedanken gemacht. Selbst Youtubes "Content ID" ist echt schlecht. Der "Praxistest", wie man "Content ID" im Rahmen der Artikel 13-Debatte bezeichnen könnte, löscht regelmäßig Derivate und Parodien, die eigentlich keine Urheberrechtsverletzungen darstellen. Darüber hinaus hat Youtube ein autmatisiertes System, mit dem man Urheberrechtsverletzungen geltend machen kann. Wie gut das funktioniert, hat sich in der Vergangenheit mehrfach gezeigt. Es wird oft gesagt, dass es die großen bösen Plattformen wie Youtube sind, die Versuchen, die kleinen Rechteinhaber über's Ohr zu hauen. Und ja, Youtube und andere große Plattformen sind gegen Artikel 13, weil sie tatsächlich verringerte Einnahmen zu erwarten haben. Das wahre Problem mit Artikel 13 liegt meiner Ansicht nach aber bei den kleinen Plattformen. Plattformen wie Unity Insider, die beim aktuellen Stand des Entwurfs keine Möglichkeit sehen, die Auflagen zu erfüllen und daraufhin schlecht dicht machen müssen. Kleine Plattformen, die einfach nur Meinungsaustausch oder Support anbieten wollen, sind allein durch die theoretische Möglichkeit der Urheberrechtsverletzung die wahren Gelackmeierten. Zusammenfassend ist Artikel 13 im Kern lediglich eine Anpassung der Gesetzeslage für das Internet, um dort die Rechteinhaber zu schützen, wie es in der analogen Welt schon lange der Fall ist. Das Problem ist der Inhalt des Textes, denn er schafft eine Menge Probleme für kleine Plattformen, für die keinerlei Lösungen angeboten werden. Es ist das typische "lasst uns erst einmal Gesetze auf den Weg bringen", und über die Folgen denkt man vielleicht noch einmal nach, wenn es denn zu spät ist. Als kleiner Zusatz eine Überlegung bezüglich der Meinungsfreiheit. In direkter Weise stellt Artikel 13 keinen Angriff auf die Meinungsfreiheit dar und bringt auch keine Zensur. Wer das erzählt, hat das Thema meiner Meinung nach nicht verstanden. Es gibt aber zwei Punkte, die indirekt eine Gefahr für die Meinungsfreiheit im Internet darstellen: Es gibt keine staatlichen Plattformen im Internet, die zum Meinungsaustausch genutzt werden. Selbst politische Diskussionen, so dumm die Idee auch ist, finden auf Twitter, Youtube, Facebook statt. Das sind alles private Plattformen und diese haben selbstverständlich das Recht, Meinungen nach Lust und Laune besser zu finden. Wenn Twitter einen politischen Tweet löscht, der nicht gegen Gesetze oder Richtlinien der Plattformen verstößt, dann ist das schade, aber deren gutes Recht. Da Artikel 13 in seiner aktuellen Form kleinere Plattformen angreift, bedeutet das indirekt, dass große Plattformen Einfluss auf die Meinungslandschaft des Internets gewinnen. Und damit wird es schwieriger, frei seine Meinung zu äußern. Es ist scheinbar bereits bekannt, dass die so genannte "Terrorverordnung" auf die Gesetzeslage, wie sie duch Artikel 13 entsteht, aufbauen würde. Nach dem Motto "Hey, wir haben bereits auf allen Plattformen Filter, wir sorgen jetzt dafür, dass terroristische Dinge auch rausgefiltert werden". Oder anders gesagt: Mit den einzuführenden Mechanismen, bestimmte Inhalte noch beim Posten/Hochladen zu verhindern, ist die technische Grundlage geschaffen, tatsächliche Zensur einzuführen. Ja, der Entwurf selber birgt keine Zensur, aber wer noch nicht gemerkt hat, dass das Einführen eines Überwachungsstaats immer schleichend und schrittweise passiert, der hat im Geschichtsunterricht gepennt. Ein Entwurf wie Artikel 13 ist daher immer auch nach seinem Potential zu beurteilen, Teil eines größeren Prozesses zu sein, der letztendes dann eben doch gegen Meineungsfreiheit geht. Meine Empfehung für euch ist: Informiert euch. Was ich geschrieben habe, habe ich selbst wieder aus anderen Quellen. Ich habe den Entwurf nicht gelesen. Meines Wissens nach ist der Entwurf nicht einmal öffentlich einsehbar. So oder so - plappert nicht einfach etwas nach, dass ihr von einer einzelnen Quelle erfahren habt. Wenn ihr dann gegen Artikel 13 seid, und wenn es nur gegen die aktuelle Form des Entwrufs ist, dann informiert euch weiter, was ihr dagegen tun könnt. Es finden vermehrt große Demos statt. Die Flut an E-Mails, die initial kam, wurde von den Witzfiguren der CDU als Bot-basierte Aktion von Google abgestempelt, weil so viele der Absender mit @gmail.com aufhörten. Kein Witz. Wenn ihr also wollt, dass die Kritik ernst genommen wird, dann werdet laut. Aber bleibt dabei auf dem Boden der Tatsachen. Denn wenn Leute unreflektiert "ZENSUR" brüllen, dann verstehen die Leute im Parlement nicht, wo das Problem ist.
  2. 3 points
    Hi, ich habe in den letzten zwei Jahren immer wieder an einem Flüssigkeit Simulations Shader gearbeitet und seit Mitte letzten Monats ist er jetzt im AssetStore erhältlich. Mit Fluid Flow kann man in Echtzeit simulieren wie beispielsweise Blut oder Farbe an einer Oberfläche herunter fließt. Es ist keine 100% physikalisch korrekte Simulation, sondern das Asset versucht mit möglichst geringen Performance Einbußen überzeugend Flüssigkeit zu simulieren. Dazu werden die Berechnungen mithilfe eines Compute Shaders auf die Grafikkarte ausgelagert. Compute Shader benötigen allerdings mindestens DirectX 11 oder OpenGL 4.3 support! Zudem sind Android und iOS momentan nicht unterstützt! Fluid Flow Echtzeit Flüssigkeit Simulation dynamisches Anpassen der Flussrichtung unterstützt animierte Objekte Tropfen* * werden asynchron von der GPU zur CPU gelesen. Dieses Feature gibt es erst seit Unity 2018.2, und mit OpenGL wird es nicht unterstützt! Demo (win): https://drive.google.com/drive/folders/1ewcJn2Cc56Pcg3IVXPgvDDYucfRrU2mg Asset Store: https://assetstore.unity.com/packages/vfx/shaders/fluid-flow-143786
  3. 2 points
    Hallo, ich bin viel in Discord unterwegs und ja auch hier von Forum. Ich finde man kann aus dem Discordserver viel mehr machen. Für mich sieht der Discordserver eher nach einem Chatroom aus. Sehe da auch selten ein Admin oder so unterwegs. Wahrscheinlich sind sie aber nur unsichtbar ^^. Klar es gibt ein Channel für den Unity Support, aber der Server hat viel mehr potenzial, aber es wird nicht ausgenutzt. Z.B. Warum gibt es sowas wie #work-in-progress nicht? Manche zeigen gerne ihre aktuellen Arbeiten z.B. per Video oder Screenshots. Das sorgt für interessante Gespräche und für mehr Informationsaustausch. Oder #release, #completed-projects oder so, wenn es um fertige Projekte geht. Sowas wie #unitytips, wo man Tipps über jegliche Art zeigt (Twitterlink, Youtubelink, Bild oder einfach nur Snippet Code) Was ich auch cool finden würde wäre, wenn man Rollen zuweisen kann. Programmierer, Designer oder sowas. Weiß allerdings nicht, ob man dafür irgendwas scripten muss (z.B. wegen commands). Das war es erst mal.
  4. 2 points
    Hallo Unity Insiders 🖐️ ich habe die letzten Wochen ein kleinen Prototypen erstellt von einer Spielidee. Diesen möchte ich mit euch teilen und mir erstes wichtiges Feedback von euch einholen. Zum Spielprinzip: Du schuldest einen Drogenbaron Geld, dieser hat seine Schläger losgeschickt um dich zu finden. Dein Ziel ist es das Geld aufzutreiben und zu überleben. Halte dein Fadungslevel im Auge, sonst jagen dich nicht nur die Schläger, sondern auch die Polizei. Schläger greifen dich nur an, wenn sie keine Polizisten sehen. Screenshots: Controlls: WASD => Walk Right => Targeting/Rob Left + Right => Shoot R => Reload E => Pickup Video: Prototype-Download-Link: https://dock17.itch.io/tba-game-prototype Feedback Ich würde mich über Feedback/Anregungen/Kommentare freuen 😉 Best Grüße John / Dock
  5. 2 points
    So, ich hab jetzt mal etwas herumgebastelt, dabei ist dieser kleine Prototyp entstanden:
  6. 2 points
  7. 2 points
    Was ich noch dazu sagen möchte: PlayerPrafs sind nicht dazu da, wie Variablen gehandhabt zu werden! Man liest die Werte mit Get aus und speichert sie in Variablen. Mit diesen Variablen wird dann gearbeitet, nicht mit den Playerprefs direkt. Erst wenn es Zeit ist, die Variablen auf die Platte zurück zu schreiben, weil jetzt das Spiel beendet wird oder ein Szenenwechsel stattfindet , werden sie mit Set geschrieben. Du machst mit der ws3FasterShooting komische Dinge. Du liest mit GetInt das Playerpref w3sFS aus und übergibst sie dieser Variable. Hat sie z.B. den Wert 1, dann soll sie in der Funktion den Wert 2 bekommen. Anstatt du aber jetzt ws3FasterShooting direkt beschreibst, speicherst du den Wert in w3sFS, nur um ihn direkt wieder auszulesen und der Variable ws3FasterShooting zu übergeben. Das ist schon mal nicht so dolle. Aber dein Problem, was da jetzt entsteht, ist: ws3FasterShooting hat jetzt den Wert 2 und somit ist die Bedingung für die nächste If Abfrage erfüllt. Da drin bekommt die Variable jetzt den Wert 3 und nun ist auch die Nächste If Abfrage erfüllt! Also entweder drehst du die If-Abfragen um, fängst also mit der Abfrage 3 an, dann die 2 dann die 1, denn kleiner kanns ja nicht werden, oder aber du nutzt else if. if(wert==1){ // ich bin 1 also mache was } else if(wert==2){ // ich bin nicht 1, ich bin 2 also mache was anderes } else{ // ich bin weder 1 noch 2 also mache das was noch übrig bleibt }
  8. 2 points
    Allem voran der übliche Hinweis dass hier keiner Anwalt ist und keiner dir eine richtige Rechtsberatung geben kann. Eigentlich kannst du nicht einfach geistiges Eigentum von anderen nehmen und für dein eigenes Werk verwenden. Da gibt's den Urheber des Werkes und den Rechteinhaber, von denen mindestens einer dir die explizite Erlaubnis geben muss. Etwas in Richtung Grauzone geht's dann bei Fair Use. Das ist amerikanisches Recht, nachdem du die Erlaubnis der Rechteinhaber nicht mehr brauchst, wenn du bei der Verwendung der Werke bestimmte Kriterien erfüllst. Unter anderem können Parodien darunter fallen. Das ist aber kein Recht, das weltweit gilt, und von einem deutschen Äquivalent wüsste ich nichts. Da müsste man dann auch mal schauen, ob die Rechte gelten, in denen du sitzt, in denen du vertreibst oder in denen die Rechteinhaber sitzen. China z.B. gibt kein Stück auf westliches Copyright. Entsprechend kopieren da alle wie wild alles mögliche, weil die Regierung da kein Problem mit hat. Was wollen westliche Firmen auch tun, außer Lobbyarbeit zu leisten, sodass die Politiker Sanktionen gegen Chin....oh. Der ganze Kram mit dem (internationalen) Urheberrecht ist ein wildes Dickicht aus völlig verschiedenen Rechtssystemen, von denen jedes einzeln genommene schon immer komplett undurchsichtig ist. Das ist ja auch das Problem mit Artikel 13/17... Nichtmal Anwälte schaffen es, da definitive Antworten zu gebe, geschweige denn irgendwelche Algorithmen. Aber egal. Meine Empfehlung ist: Lass es sein. Selbst, wenn es theoretisch Möglichkeiten gibt - mit der Verwendung anderer Leute geistigen Eigentums begibst du dich immer in eine Welt des Schmerzes.
  9. 2 points
    Hast du das auch wirklich so gemacht, wie der Sascha es geschrieben hat? Einem GameObjekt untergeordnet und dann das Vaterobjeket auf 1,1,0 skaliert???
  10. 2 points
  11. 2 points
    Ich muss da Jomnitech zustimmen du machst dir das leben schwerer als es sein muss. Stell dir vor du willst die Scallierung der Buttons ändern das dauert dann wieder unnötig lange. Ich würde tatsächlich mit den Unity Buttons mit verändertem Sprite arbeiten. Aber wenn du das tatsächlich so machen willst schau dir mal die Erweiterung: TextMeshPro im Unity Store an. (ist for free) Damit haste mehr UI-Optionen als in Vanilla Unity vielleicht geht es mit dem Tool besser. LG Peanut :3
  12. 2 points
    Der erste Testlauf einer Kartengenerierung mit PerlinNoise ist erfolgreich abgeschlossen. Etwas mehr fein Tuning beim Algorithmus und mehr als 3 Kartenfeldtypen sollten es aber schon sein sonst ist das nicht sehr ansehnlich. Aber immerhin, es funktioniert und geht ins nächste NightlyBuild.
  13. 2 points
    Habe gerade ein Spiel laufen, deshalb sind die absoluten Werte etwas hoch, geht ja aber nur um die relativen Meine Funktion: 15ns (a - b).sqrMagnitude: 48.2ns Vector3.Distance: 65.2ns Die Benchmark-Werte schwanken natürlich immer etwas. Und wie gesagt, das Spiel im Hintergrund scheint da etwa +55% draufzupacken. Ansonsten braucht Vector3.Distance natürlich etwas länger als sqrMagnitude weil's dasselbe mit Wurzel hintendran ist.
  14. 2 points
    Ist jetzt nicht nötig, aber vielleicht trotzdem interessant. Das kannst Du auch (gut leserlich) kürzen: bool direction = true; if (Input.GetKeyDown(KeyCode.Space)) { direction = !direction; //direction wird einfach negiert }
  15. 2 points
    Ich hatte nicht viel Zeit für dein Mesh, aber ich konnte erkennen, dass deine Wichtungen nicht gut sind. Die Meshpunkte haben alle Wichtungen von allen 5 Joints des Armes. Die Punkte , die von jedem Joint die gleiche Wichtung haben, sehen gut aus, die die unterschiedlich gewichtet sind, verzerren schon beim Einfügen in der Szene. Sobald du einen Unterjoint drehst, verstärkt sich die Verzerrung, was klar ist, denn der Überjoint bleibt ja stehen. Warum von vornherein, schon Verzerrungen da sind, weiß ich jetzt erstmal nicht. Kann aber an der Animationsspur liegen. Evtl. ist dort im ersten Frame schon eine Änderung der Drehung der Joints drin. Egal. Seh zu, dass deine Punkte maximal von 2 Joints Wichtungen bekommen (an den Gelenken). Und versuch's erstmal nur ohne Animationsspuren um den Fehler einzugrenzen.
  16. 2 points
    Moinsen! Ich habe mich vorhin nach langer Zeit dann doch dazu aufgerafft, mir einen Blog aufzusetzen, in dem ich einfach mal beliebige Themen behandeln kann... geht aber schon noch um Unity Ich habe heute Nacht zwei Artikelchen geschrieben, und mit der Zeit sollen es mehr werden. Die beiden sind soweit auf englisch. Deutsche Übersetzungen sind nicht ausgeschlossen, aber im Moment nicht sonderlich weit oben auf der Liste. Wer Lust hat, kann ja mal reinschauen. http://blog.13pixels.de/
  17. 2 points
    Sehr gute Idee! Coroutinen funktioneren so: Du hast eine Methode, die ganz normal abläuft mit dem kleinen Unterschied, dass du eine Anweisung zur Hand hast, mit der du eine beliebige Anzahl an Frames warten kannst. Du kannst damit also dasselbe machen wie mit Update, aber eben als zusammenhängender Ablauf. Wenn du z.B. diesen Code hast: private int frameCounter = 0; private void Update() { if (frameCounter < 60) { frameCounter++; if (frameCounter == 60) { Debug.Log("Ich habe 60 Frames abgewartet."); } } } dann hast du genau die Probleme, die du bereits angemerkt hast. Deine Zählervariable ist irgendwo abseits des Codes, der damit arbeitet, und darüber hinaus läuft da eine Update-Methode, die die meiste Zeit über gar nichts sinnvolles macht. So sieht das Äquivalent in einer Coroutine aus: private IEnumerator CountToSixtyFrames() { for (var frameCounter = 0; frameCounter < 60; frameCounter++) { yield return null; // warte einen Frame } Debug.Log("Ich habe 60 Frames abgewartet."); } Es gibt hier nur zwei Dinge zu bemerken: Die Methode hat als Rückgabetyp "IEnumerator". Mit "yield return null" wird die Methode unterbrochen und im nächsten Schritt des Update-Zyklus an dieser stelle fortgesetzt. Statt null kann man auch andere Dinge zurück geben, Z.B. ein WaitForSeconds-Objekt, dann wird nicht einen Frame lang gewartet, sondern so viele Frames, dass die angegebene Zeit in Sekunden verstrichen ist. Gestartet wird eine Coroutine so: StartCoroutine(CountToSixtyFrames()); In deinem Fall kannst du also etwa so etwas machen: private IEnumerator AnimateRotationSpeed(float targetValue, float duration) { var startValue = rotationSpeed; for (var time = 0f; time < duration; time += Time.deltaTime) { var progress = time / duration; rotationSpeed = Mathf.Lerp(startValue, targetValue, progress); yield return null; } rotationSpeed = targetValue; } und dann in Start aufrufen: private void Start() { StartCoroutine(AnimateRotationSpeed(targetRotationSpeed, 1f)); } Kann man natürlich auch noch etwas modularer machen, statt fest rotationSpeed zu beeinflussen einfach einen ref-Parameter oder ein Callback anbieten und schon hat man sein eigenes Tweening-System
  18. 2 points
  19. 2 points
    Naja, wenn's um Kollisionen geht, dann ist das mit Layern schon sinnvoll. Irgendwo muss man seine Grenze ziehen. Natürlich könnte man jetzt versuchen, alles über Layer zu machen. Theoretisch gibt's performancemäßige Vorteilchen, wenn du Trigger, in denen nur der Player etwas auslösen soll, auch nur mit dem Player kollidieren lässt. Aber irgendwann wird's auch einfach albern und unübersichtlich. Bei Performance gilt immer: Mach dich erst krumm, wenn's zum Problem wird. Ich bevorzuge es, wenn ich eine einfache Änderung vornehme, wenn ich eine einfache Änderung haben will. Wenn ich ein neues System baue und dann doch Trigger sein sollen, wo Player und Gegner drin etwas auslösen, will ich nicht erstmal die gesamte Kollisionsmatrix überarbeiten. Physik-Engines haben sowieso Beschleunigungsstrukturen und Optimierungen des Todes - da geht dem Rechner erst sehr spät die Puste aus. Da sind sind Bedenken wie "Ich will einen Raycast haben der durch Dinge durch kann ohne dafür mein Erstgeborenes zu verkaufen" schon viel besser. Also... lange Rede, kurzer Sinn: Guter Code und sauberes Projekt > Performance, solange bis die Performance ein Problem wird. Und Layer managen ist nicht so ganz geil, also würd ich's vermeiden, solange dein Code nicht drunter leidet, wie er's beim Raycast tun würde.
  20. 2 points
    Okay... ist für mich schwer zu entscheiden, wo ich ansetzen soll. Einerseits kommt einige Verwirrung daher, dass deine Schleifenvariable ("Durchlauf") keine lokale Variable ist, sondern auch nach Beendigung deines Schleifencodes weiterhin bestehen bleibt und du deshalb manuell den Wert zurücksetzt. Aber anstatt darauf einzugehen, würde ich lieber noch ein, zwei Schritte zurückgehen und darauf hinweisen, dass es mehr Datensammelstrukturen als Listen gibt. Wenn dein Ziel ist, eine Sammlung von Elementen zu haben, in der kein Element doppelt vorkommt, und du willst wissen, ob ein bestimmtes Element drin ist oder nicht, empfiehlt sich ein HashSet. Das entspricht nämlich genau dem mathematischen Konzept einer Menge und erlaubt dir superfixes Nachschauen, ob ein Element schon drin ist. Zwar hat die Liste auch eine "Contains"-Funktion, aber es gibt gute Gründe, bei einer solchen Situation das Set zu nehmen. Performance ist nur einer davon, und nicht einmal der beste Hier ein Beispiel, wie man HashSets benutzt: var menge = new HashSet<int>(); menge.Add(5); menge.Add(10); Debug.Log(menge.Contains(5)); // true
  21. 2 points
    Ich weiß nicht, was dein Inputdisplay Text ist und wo du das Textelement beschreibst. Kann es sein, dass du den Text von deinem InputField ändern möchtest? Wenn ja, dann musste Input.Text nutzen.
  22. 2 points
    Wie Sachsa schon sagt. Ich wollte aber noch mal kurz erklären, was die Vertreiber prüfen. Die prüfen nämlich nur die Funktionalität und Stabilität deines Programms. Apple gibt gewisse Richtlinien vor, was alles drin sein muss und was nicht sein darf. Da geht es hauptsächlich um die Zugriffe auf die Hardware und ob es mit diversen OS auch läuft und ob diverse Dinge genutzt werden, die Apple untersagt hat. Apple testet bei jedem Update aufs neue. STEAM macht das so ähnlich. Die Testen ob deine Anganben im Shop auch der Realität entsprechen. Wenn du z.B. volle Controller unterstützung angegeben hast, dann testen die auch, ob denn alles mit einem Controller auch zu machen ist. Da geht es hauptsächlich um das BigPicture und den STEAM Controller, damit du das Spiel ohne Tastatur auf dem Fernseher spielen kannst. Steam testet nur einmal bei der Veröffentlichung. Danach ist denen egal was dein Update beinhaltet. Wie das bei den anderen Verreibern, wie GooglaPlay, Microsoft usw., ist kann ich nicht genau sagen, aber auch da wird es hauptsächlich um die Funktionalität und Stabilität des Programmes gehen. Die internen Mechanismen sind denen egal und können auch gar nicht ohne weiteres überprüft werden.
  23. 2 points
    Das ist die Logik dahinter. Wenn du 2 Sachen zusammen abfragst, dann ist das ja ein logisches UND. Also nur wenn das Eine UND das Andere wahr ist, dann mache etwas. Soweit so gut. Aber du nutzt else und dort wird etwas ausgeführt, wenn eins der beiden Dinge in der Abfrage nicht wahr ist. Dummerweise setzt du aber eins der beiden Dinge dann auf wahr. In deiner Abfrage rundest du mit dem Befehl Truncate die Zahl in Richtung 0, also so ähnlich wie mit Floor. Aus der 10,xx wird die 10. Aus 0,xx wird die 0. Dann willst du mit dem Modulo Befehl den ganzzahligen Rest dieser Zahl ermitteln, wenn du sie durch 10 teilst. Da Modulo nichts anderes ist als : a -(a/b) * b kommt bei der Time= 0,xx eben auch ein Rest von 0 raus, denn 0- (0/10) *10 ist 0. Und bei 10-(10/10)*10 , was ja 10 - 1*10 entspricht, ist auch 0. Das ist schon mal der Grund, warum es nicht nur bei der 10 passiert. Und es passiert mehrmals bei der 0 und der 10, weil du zwar i auf false setzt, sobald die Bedingung wahr ist. Aber im nächsten Durchlauf, wegen dem i nicht wahr ist und somit else greift. Das else setzt das i wieder auf true und somit ins im darauf folgenden Durchlauf wieder die Bedingung für deine Abfrage erfüllt. Solange bei deinem Truncate also eine 10 oder eine 0 raus kommt, wirst du alle 2 Durchläufe einen Ausdruck bekommen.
  24. 2 points
    Grüß Dich ! wir schreiben dich an, weil wir unsere Community in Gefahr sehen. Es ist keine finanzielle oder personelle Frage, sondern eine gesetzliche. Mit dem auf uns zukommenden Artikel 13 basierend auf dem Entwurf des Springer Verlags und durchgesetzt durch Axel Voss (CDU), werden in der Zukunft Seitenbetreiber bzw Forumbetreiber dazu verpflichtet sogenannte Uploadfilter einzusetzen. An dieser Stelle ist es uns lediglich wichtig dich auf dieses Thema aufmerksam zu machen und dir zwei Links an die Hand zugeben: https://saveyourinternet.eu/https://saveyourinternet.eu/de/de/ https://twitter.com/ChangeGER/status/1095794493578719242 Ein Link fehlt noch: https://www.gofundme.com/plakate-gegen-artikel-13 Bei dieser Kampagne wird Geld gesammelt, um mit Plakaten auf diese Geschehnisse aufmerksam zumachen. So ein Plakat erreicht viele Tausende Menschen, die mit dem Thema gar nicht konfrontiert sind oder es garnicht mitbekommen. Es Grüßt die unity-community PS: geht gleich alles noch mal per Mail raus.
  25. 2 points
    Da hast du dir aber was vorgenommen. Ein Aktion-RPG hat sehr viele Dinge die man machen muss. Combat-System, Dialogue-System, Quests, Inventar, Waffen usw. Soll jetzt nicht negativ klingen, ich handhabe das ja genau so. Habe als totaler neuling den Sprung vom RPG-Maker zu Unity gemacht. Und mache selber auch lieber das Spiel was ich will statt kleine Spiele zum lernen. Aus meiner Erfahrung kann ich einfach folgendes sagen. 1. Wie Sascha schon gesagt hat, lern coden. Es ist wirklich nicht so schwer und es gibt tonnenweise sehr gute YT-Tutorials. Die Zeit die du in das lernen des PlayMakers investierst, kannst du auch gleich ins coden investieren. Ist mir genau so ergangen. 2. Verwende möglichst wenig aus dem Asset Store. Nichts gegen den Store selbst, finde gut das es Ihn gibt, aber jedes Asset ist anders aufgebaut. Du musst viel Zeit investieren um herauszufinden wie welches Asset funktionert. In der Zeit kann man meistens das Zeug selber erstellen und weiss dann genau wie es funktioniert. Dazu kommt noch das viele Assets die vielversprechend aussehen nicht das machen was du dir vorgestellt hast. Du kaufst also öfters Assets bis du dann das gefunden hast was du willst. 3. Ein grosses Projekt gibt einem oft das gefühl nicht weiter zu kommen, da man einfach nicht so schnell den Vortschritt sieht und teilweise das gefühl hat das kein Ende in sicht ist. Lass dich davon nicht beirren und bleib einfach dran. 4. Stell dich darauf ein das wenn du als Anfänger ein grosses Projekt machst, sehr sehr viel neu machen musst. Du lernst ständig dazu und merkst das was du vor einem halben Jahr gemacht hast einfach nicht gut ist. Ist zumindest meine Erfahrung. 3d ist auf jeden Fall viel aufwändiger als 2d. Wie Sascha auch schon gesagt hat betrifft das hauptsächlich Grafiken, Charaktere und Animationen. Du kannst das natürlich auch mischen. Habe ich auch gemacht. Welt in 3d und Charakter und Gegner in 2d. Wie z.B. in dem Spiel Octopath Traveler.
  26. 1 point
    Phu, so die Icons sind jetzt alle fertig gepixelt. Jetzt kann ich mit dem Code weitermachen.
  27. 1 point
    Hallo Zusammen Da ich momentan in meinem Hauptprojekt so gar nicht weiter komme, habe ich mal was kleiners angefangen. Was haltet Ihr davon bezüglich dem Artstyle und Animationen? Fängt es das retro Feeling ein oder eher nicht? Spielen: https://jomnitech.itch.io/kernslegend Steuerung mit Controller oder mit Maus und Tasta (ASDW/Pfeile,Space,LMT,RMT,MMT)
  28. 1 point
  29. 1 point
    Habe hierzu vor einer weile mal ein tut gesehen. Aber auch hier wird am Ende empfohlen ein bereits Existierendes Asset zu verwenden(kann man sich auf github runterladen), scheint also nicht so einfach zu sein einen sauberen Cam-Shake hinzubekommen.
  30. 1 point
    Hallo und danke für eure Unterstützung! Ich habe das ursprüngliche Problem übrigens gelöst, indem ich im Canvas die Reference Resolution auf 1920x1080 gesetzt habe und den UI Scale Mode auf "Scale With Screen Size" festgelegt habe. Außerdem hab ich den Screen Match Mode auf Expand gesetzt (weiß nicht, ob das positiven Einfluss hatte). Selbstverständlich ist mir eure Meinung wichtig, daher habe ich darüber nochmal nachgedacht. Prinzipiell gebe ich euch Recht, dass die Art und Weise (selbst wenn's von der Performance her Toaster-Kompatibel ist ), nicht so praktisch ist. Allerdings waren meine Beispiele nur die halbe Wahrheit. Es soll am Ende eher in diese Richtung hier gehen: Unterschiedliche Schriftgrößen und 3D. Die normale Button-Beschriftung in Unity gibt das möglicherweise nicht her. Heißt auch, dass die Buttons dann nicht den gleichen Sprite nutzen könnten. (Hintergrund ist gleich, aber die Schrift ist anders.) TextMeshPro sieht allerdings interessant aus! Hab mir mal paar Beispiele angeschaut, und auf einem Blog hab ich das hier gesehen, was wirklich beeindruckend ist: Auf die Schnelle habe ich jetzt das hier hinbekommen: Ein UI-Image eingefügt, als Source Image diesen grünen Kasten verwendet und innerhalb des UI-Images ein UI-TextMeshPro-Element eingefügt und darin die Schrift reingeschrieben und Farbe + Größe mit tags definiert. Die Option TextMeshPro war bei mir übrigens schon standardmäßig drin. Wenn es keine 3D-Schrift ist, dann ist das auch kein so großer Untergang. Hätte sonst alles mit Photoshop gemacht, aber so werde ich mich nur auf die Hintergründe konzentrieren und die Schrift in Unity machen. Viele Grüße
  31. 1 point
    Der Wert ist schon aktuell, es ist die direkte Position vom Player und diese siehst du auch auf der Karte (gelber Pfeil). Habe das Problem aber jetzt gelöst: Hab einfach das ganze umgebaut und verwende jetzt kein ScrollView mehr, sondern einfach ein Image mit Maske. Sieht jetzt immer noch alles genau gleich aus, aber kein ScrollView, das rein pfuscht. Danke
  32. 1 point
    Naja, wie gsagt, +55% Ach ja... Naja... so: if (CheckIfCloserThan(transform.position, otherTransform.position, 100)) { Debug.Log("Der andere ist näher als 100m!"); }
  33. 1 point
    Es lag beim Rig Einstellung, war auf Legacy eingestellt, hab es auf Generic getan und schwubdiwub geht alles wie gehabt. Lg Ricky-W
  34. 1 point
    Hi, ich glaube er meinte das etwas anders. Wenn ich dich richtig verstanden habe, willst du, dass sich der Ball die ganze Zeit bewegt und jedes mal, wenn die Leertaste gedrückt wird, sich die Richtung ändert. Das kannst du so umsetzen, dass du immer die aktuelle Richtung speicherst und beim Tastendruck den Wert umkehrst. Also etwa so: int direction = 1; void Update(){ if(Input.GetKeyDown(KeyCode.Space)){ direction *= -1; } if(direction > 0){ //move right } else{ //move left } }
  35. 1 point
    Dann hast du da leider keinen guten Kurs. Versuche, so viel davon mitzunehmen wie du kannst, und dann such dir ggf. noch einmal einen richtigen
  36. 1 point
    So, ich habe etwas experememtiert: - wenn ich "float plyRotAngelEnd = 179.0f;" eingebe ist das Ergebnis nach der Drehung für "Rotation" X, Y, Z: 1, -180,-1 - wenn ich nur über die X Achse drehe und nicht noch über Z Achse ist das Ergebnis nach der Drehung: -180, 0, 0 - wenn ich die X Achse und die Y Achse drehe ist das Ergebnis nach der Drehung: 0, 0, -180 Es scheint also so, dass Unity versucht die Werte für "Rotation" nach der Drehung zu optimieren - das mache ich mir doch zu Nutze für mein Problem Nummer 2. Dadurch, dass mein Schiff aufgrund des Wert "Rotation" Y = -180 gedreht ist, und die anderen Achsen nun wieder auf "0" stehen, nehme ich die Y Achse mit in meinem Script auf: Ich ergänze public float plyShipMainRotY; und in der Update Function plyShipMainRotY = plyShipMain.eulerAngles.y; und ändere in der FixedUpdate Function plyShipMain.eulerAngles = new Vector3(plyShipMainRotX, plyShipMainRotY, plyShipMainRotZ); Nun sieht die Drehung wie folgt aus - zur Verdeutlichung habe ich die Drehtzeit "plyRotUridiumDuration" etwas erhöht. Im Spiel drehe ich natürlich schneller. Edit: da ich weiter unten das fertige Video zeige, habe ich an dieser Stelle den Zwischenschritt gelöscht. Da ich nun wirklich alle Achse nutze könnte ich eventuell anstatt 3 float Variablen mit einer Vector3 Variable arbeiten. Ich setzte mich aber ersteinmal an meine weiteren Probleme und hoffe, dass nicht in einem Update die Optimierung der Werte für "Rotation" wieder aufgehoben wird.
  37. 1 point
    Ein 3D-Modell wird von einem MeshRenderer gezeichnet, der die Info über das Mesh aber nicht selber handhabt. Dafür gibt es die MeshFilter-Komponente. Wenn du nur das Modell austauschen willst (also das Material dasselbe bleibt), dann brauchst du den MeshFilter: private MeshFilter meshFilter; private void Awake() { meshFilter = GetComponent<MeshFilter>(); } Und zum Austauschen meshFilter.mesh = newMesh; newMesh kannst du wiederum über ein Feld besorgen, in das du dein Mesh aus den Assets reinziehst. public Mesh newMesh; Wenn du jetzt auch das Material austauschen willst, dann könntest du über den MeshRenderer gehen, der das Material handhabt. Allerdings ist spätestens hier der Punkt erreicht, wo ich sagen würde: Nutz einfach mehrere GameObjects. Man könnte Prefabs instanziieren, oder auch einfach alle Modelle gleichzeitig einem Parent unterordnen und alle durch Deaktivierung unsichtbar machen, die gerade nicht präsent sein sollen. Also Parent mit Austausch-Script und ggf. Collider zum Anklicken Würfel Kugel (GameObject deaktiviert) Das Austausch-Script würde dann so aussehen: public GameObject cube; public GameObject sphere; private void OnMouseDown() { cube.SetActive(false); sphere.SetActive(true); } Das ziehst du auf den Parent, und danach ziehst du den Würfel und die Kugel in die entsprechenden Slots im Inspektor. Sobald du mehr Objekte hast als zwei, würde ich aber zu einem Array wechseln.
  38. 1 point
    Hallo @Sascha und @Jomnitech, danke für die Tipps. Ich denke mir, dass der Tipp von Jomnitech auch funktioniert, nur schmirt mit in letzter Zeit bei einer "while" Schleife immer mein Unity (Version 2018.3.0f2) ab. Das hatte ich schon an anderer Stelle gehabt. Sascha: beim Aufrufen der Coroutine meinte Visual Studio, dass eine Klammer am Ende fehlt: StartCoroutine(AnimateRotationSpeed(backRotSpeed, slowRotDuration)); Die habe ich nachgetragen. Zudem hat Visual Studio bei "time += Time.deltaTime" gemeckert, weil der Typ "float" nicht in "int" konvertiert werden kann. Somit habe ich diese Zeile wie folgt abgeändert: for (var time = 0.0f; time < duration; time += Time.deltaTime) Der Unterschied ist im vordersten "time = 0.0f". Klappt wunderbar. Ich spare mir einige Variablen am Anfang (ist somit übersichtlicher), und die "Zeitschleife" ist aus der FixedUpdate Methode raus. Sollte der Code noch erweitert werden bleibt das somit übersichtlicher. Danke. So, und mit "Mathf.Lerp" muss ich mich nun dringend doch einmal auseinander setzen.
  39. 1 point
    Die Vererbung bietet dir ja die Möglichkeit auch Methoden der Klasse von der du erbst zu nutzen. z.B. könntest du in deiner Klasse "Mensch" Variablen für Lebenspunkte, Erfahrungspunkte usw. haben. Deine Klasse Supermensch hat dann z.B. Variablen und Methoden für Superkräfte die gewisse Dinge tun. Deine Klasse Mensch hat aber z.B. bereits Methoden um Lebenspunkte hinzuzufügen, abzuziehen usw. Diese müsstest du dann in der Klasse Supermensch nicht noch einmal schreiben sondern könntest die Methode aus der Basisklasse verwenden. Solltest du dann doch einmal eine Methode aus der Basisklasse "Mensch" ändern wollen in "Supermensch" kannst du diese "überschreiben" oder "erweitern". Override - https://docs.microsoft.com/de-de/dotnet/csharp/language-reference/keywords/override
  40. 1 point
    Jomnitech Ja ich überprüfe mit position.Count die Größe der List . Deshalb soll die forschleife solange durchgehen bis sie am Ende der List angelangt. Das ganze klappt auch solange ich im inspector vorgefertigte Zahlen habe und diese abfrage. Doch wenn ich neue Zahlen zufüge geraden immer wieder aufs neue die gleichen Zahlen hinein. Doch danke Sascha habe ich jetzt eine wesentlich bessere Alternative
  41. 1 point
    Versuchs mal mit: Instantiate (Obstacle, Player.transform.position + zusatz, Quaternion.identity); Edit: Zur Info: Du kannst bei Player.transform kein Vector 3 (zusatz) hinzufüngen, da es sich um die ganze Transform Komponente handelt. Diese beinhaltet mehrere Vektoren wie transform.position, transform.scale, transform.roation, transform.eulerAngles usw. du musst schon deklarieren wo du dein Vector3(zusatz) hinzufügen möchtest. ps: wenn du im Skript mit der Maus über den Befehl "Instantiate" fährst, siehst du welche Variablen verlangt werden.
  42. 1 point
    Das scheint echt ein Problem zu sein. Es gibt zwar wege mit Scripts, die das können, aber ohne weiteres scheint es nicht möglich zu sein. https://answers.unity.com/questions/15043/terrain-rotation.html Exportieren kann man glaube ich nur die hight Map, allerdings hast du dann keine Texturen. Ich denke du tust dir leichter wenn du die Kamera und dein Raumschiff bewegst statt das Terrain. Das scrollen des Terrains wird ja Ende des lvls null sein? da könntest du doch dann deine Rotationsanimation beginnen?
  43. 1 point
    Der Vollständigkeit halber: Mein neuer Flipper ist seit gut ner Woche draußen. Hier mal ein 3 Minuten GamePlayVideo:
  44. 1 point
    Meine Gründe waren ganz einfach. Ich wollte einfach mehr und etwas neues machen. Und der RPG-Maker ist hald eben doch stark limitert. Die Umstellung war ehrlich gesagt schon etwas heftig, ist eben alles neu und man hat am Anfang überhaupt kein Plan wie man etwas macht. Aber wenn ich darüber nachdenke hatte ich das beim RPG-Maker auch 🙃 Eigentlich habe ich noch ein paar Umwege über Clickteam Fusion, Construct 2 und wie sie alle heissen gemacht, weil ich mich immens gegen das coden gewehrt habe. Als ich dann mit Unity begonnen habe, weil ich mit den anderen Programmen nicht glücklich geworden bin, habe ich mir natürlich gleich den PlayMaker geholt. Aber an dem Punkt hatte ich schon fast die schnautze von Visual Scripting voll, weils einfach unübersichtlich ist, gerade wenn das Projekt wächst. Deswegen habe ich mich dann überwunden es mit coden zu versuche statt mich in den PlayMaker einzuarbeiten. Hängt stark von der Komplexität von dem ABS ab. Im Prinzip sind es ja nur onTriggerEnter Events. Aber wenn du noch verschiedene Elementarschäden hast und diverse Effekte wie DOTs und ev. noch ein Combo-System wird es sicher aufwändiger. Hier kommt auch wieder etwas der grafische Aspekt. Wenn du 2d Sprites hast und einen Collider drauf ist es sicher einfacher als wenn du ein 3d-Modell hast und noch verschiedene Trefferzonen haben möchtest wie Kopf, Beine, Arme. Edit: Ach ja, was ich noch sagen wollte. Eines der grössten Probleme die ich bei Unity sehe ist die grenzenlose Freiheit. Bei einem RPG-Maker bist du eben sehr stark limitert, aber dadurch kommst du auch gut voran. Deswegen würde ich empfehlen das du dir ev. selber Limits setzt. Möchtest du auf 3d gehen, muss dir bewusst sein, je besser etwas aussieht, desto mehr Arbeit steckt in allen Aspekten. Sei es Modelling, Textur, Animation. Z.B. hat ein RPG-Maker Charakter gerade mal 3 Frames für einen Walk-Cycle, würdest du das auf ein 3d Charakter anwenden, sehe das extrem lächerlich aus, es sei denn du möchtest natürlich genau das erzielen . Ein Beispiel aus eigener Erfahrung: Ich hatte zuerst einen Pixeligen Charakter, der hatte die Waffe in seiner Pixel-Klotz-Hand und es sah aus als hätte er die Waffe eben in der Hand. Danach habe ich das Konzept überarbeitet und ein Charakter mit mehr Details gewählt. Nun sieht es auf einmal doof aus weil er auf einmal Finger hat und die Waffe nicht zwischen Hand und Fingern ist. Und so kommt es das man sich mit Dingen beschäftigt die vorher kein Problem waren.
  45. 1 point
    Schön zu sehen das ihr am Ball bleibt! Die visuelle Darstellung vom Treffer des Gegners ist sehr gut dargestellt. Man spürt die Wucht förmlich.
  46. 1 point
    Der ist wirklich super geworden!
  47. 1 point
    Das ist schon richtig. Es wird einfach in dem Bereich nach dem Schlüssel Banane gesucht und true ausgegeben, wenn er da ist oder eben false, wenn er nicht da ist. Aber in deiner Abfrage steht if (!PlayerPrefs.HasKey("Bananen")) Mit einem ! vorneweg. Und ! bedeutet nicht . Deine Bedingung ist also erfüllt wenn es den Key Bananen NICHT gibt. Und dann willst du den Bananenwert auslesen. Das ist aber doch nicht möglich! Denn wenn etwas nicht da ist, kannst du auch keinen Wert auslesen. Du hast deinen Code komplett verdreht. Denn in der Awake fragst du ständig ab, ob die Keys NICHT da sind. Und wenn die nicht da sind willst du etwas auslesen. Anstatt die Keys überhaupt ersteinmal zu erzeugen. Du hast den Code scheinbar irgendwie zusammengebastelt ohne genau zu verstehen wie man Playerprefs behandelt. Ich hatte vor 4 Jahren mal ein kleines Texttutorial dazu geschrieben. Das solltest du dir mal anschauen:
  48. 1 point
    Da hier aktuell ja nicht viel los ist, ändere ich das jetzt mal. (Glücklicherweise habe ich auch mal was vorzeigbares) Generierung eines Straßenzuges, könnte zwar überall noch etwas mehr Varianz vertragen, aber immerhin funktioniert es.
  49. 1 point
    Moin, ich dachte mir mal ich zeige hier auch mal was Ich und mein Team arbeiten schon eine Weile an diesem Spiel, es wird ein Abenteuer-Überlebensspiel in der Savanne / Wüste mit einer starken Story. Hier eine kleine Kamerafahrt durch meine Test-Szene: Ich bin in diesem Spiel hauptsächlich für die Modelle und Texturen zuständig und habe u.a. die Felsen die zu sehen sind erstellt.
  50. 1 point
    Hi Leute hab mal gestern angefangen zu schrieben und zwar ein Ship drive Control. Bei mir hats supergeklappt und da wollte ich euch das Script zeigen vlt braucht das wer var speed = 1.0; var acceleration = 1.0; var maxspeed = 2.0; var minspeed = -0.25; var heading = 0.0; var rudder = 0.0; var rudderDelta = 2.0; var maxRudder = 6.0; var bob = 0.1; var bobFrequency = 0.2; private var elapsed = 0.0; private var seaLevel = 0.0; private var rudderControl; private var rudderAngle = 0.0; function Update () { // Bobbing elapsed += Time.deltaTime; transform.position.y = seaLevel + bob * Mathf.Sin(elapsed * bobFrequency * (Mathf.PI * 2)); // Steering rudder += Input.GetAxis("Horizontal") * rudderDelta * Time.deltaTime; if( rudder > maxRudder ){ rudder = maxRudder; } else if ( rudder < -maxRudder ){ rudder = -maxRudder; } if( rudderControl ){ rudderAngle = rudder / maxRudder; rudderControl.transform.localEulerAngles.y = (70 * rudderAngle) % 360; } heading = (heading + rudder * Time.deltaTime * Mathf.Sqrt(speed)) % 360; // transform.Rotate(0, rudder * Time.deltaTime, 0); transform.eulerAngles.y = heading; transform.eulerAngles.z = -rudder; // Sail speed += Input.GetAxis("Vertical") * acceleration * Time.deltaTime; if( speed > maxspeed ){ speed = maxspeed; } else if ( speed < minspeed ){ speed = minspeed; } transform.Translate(0,0,speed * Time.deltaTime); } function Awake () { seaLevel = transform.position.y; rudderControl = GameObject.Find("rudderControl"); } Viel Spass damit

Announcements

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

Weiterleitung zum Entwickler "daubit"



×
×
  • Create New...