Jump to content
Unity Insider Forum
  • Announcements

    • Lars

      Allgemeine Forenregeln   03/13/2017

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

Leaderboard


Popular Content

Showing most liked content since 11/11/2017 in all areas

  1. 3 points
    Ab Unity 2018.1 wird sich in Sachen Performance einiges ändern, da kommt das neue C# Jobsystem und das neue Entity Component System, das vermutlich über lang das alte MonoBehaviour ersetzen wird. Die Art wie man Unity Spiele Programmiert wird sich ändern und einigen Stellen einiges am Umdenken erfordern. Z.B. im Jobsystem sind keine Referenztypen mehr erlaubt, alles nur structs. Das neue Komponentensystem teilt Daten und Businesslogik, das heißt in den Komponenten die man an das ""GameObject" (Entity im neuem System) hängt werden nur mehr die Daten als struct gehalten, kein Update() Start() usw. Das passiert alles in eigenen Klassen, denen Unity automatisch ein NativeArray der Komponenten übergibt, die man sich Wünscht. Wer sich mehr dafür Interessiert und es noch nicht kennt, hier ein Link zu einem Video dazu von der der Unite Austin 2017: https://www.youtube.com/watch?v=tGmnZdY5Y-E
  2. 3 points
    Kleines Update Options wurden etwas angepasst und erweitert: Und an eine neue Art von Objekten habe ich mittlerweile gearbeitet, die sich jetzt mit benachbarten Objekten verbinden können. Hier am Beispiel vom Holzzaun:
  3. 2 points
    Hab's nochmal um Invoke() erweitert und als Github Gist hochgeladen: https://gist.github.com/FlaShG/09b80bbc02a4bb6f9e2dda23ff9c5f8d
  4. 2 points
    Sodele. Ich musste ja einige Zeit in den Flipper investieren, weil da ein paar Problemchen mit dem XBox-Controler aufgeschlagen sind. Das hab ich aber fein gefixt. Außerdem habe ich noch den Portraitmodus hinzugefügt (damit man min nem Hochkantmonitor vollflächig spielen kann), ein paar kleiner Dinge geändert und einiges an der Physik geschraubt. Seit einige Tagen kann ich aber wieder an dem neuen" Sheriff" Tisch arbeiten. Ein neues Element ist inzwischen komplett fertig und das will ich euch mal als Video zeigen.
  5. 2 points
    Puh, ich habe es letztendlich doch hinbekommen, ich habe die Interpolation der Vertexfarben mit einbezogen und einen Texturmix damit berechnet: Render mit den original Farbtexturen: Das einzige was nun noch stört sind die "Kanten", aber ich befürchte, daß liegt an der aktuell verwendeten "Technik". Zudem schaue ich mir jeweils nur die 4 umgebenden Tiles an und ermittle damit einen Texturmix, ich vermute wenn man 8 Seiten einbezieht wird der Mix "runder" und die Kanten vermischen sich besser. So sehen die "Kanten" aus der Nähe aus: PS: Würde Unity diese Technik beim Terrainshader verwenden, dann würde es kaum noch ein sichtbares Tiling bei den Terraintexturen geben, aber ihr sehr ja selbst, nicht ganz so einfach das Ganze umzusetzen.
  6. 2 points
    Also, auf meinem Sony Xperia Z5 Compact läuft alles ohne Probleme. Zum Feedback: Ich finde die App wirklich sehr gelungen. Ist halt auf das Nötigste reduziert, aber das ist ja nichts schlechtes. Und optisch finde ich sie auch sehr schön und ich glaube, Kindern wird sie gut gefallen. Alles schön hell und übersichtlich. Auf dem Handy vielleicht, grad bei vielen Karten, etwas klein, aber auf einem Tablet kommt das bestimmt gut. Alles in Allem: Beide Daumen hoch
  7. 1 point
    Probier's mal mit var direction = targetPosition - transform.position; var targetRotation = Quaternion.LookRotation(Vector3.forward, direction); transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, speed * Time.deltaTime); in Update.
  8. 1 point
    Wow hammer Sache,Will nicht wissen wieviel Std da Reingesteckt hast^^ Nur weiter so
  9. 1 point
  10. 1 point
    Input.InputString ist genau das was ich gesucht habe. Vielen Dank für die schnelle Hilfe. Bei so vielen Methoden und Funktionen sieht man manchmal den Wald vor lauter Bäumen nicht
  11. 1 point
    Hallo Zer0Cool, ich habe in letzter Zeit nicht viel in Foren geschaut. Daher erst jetzt von mir eine Antwort. Dann bin ich mal auf deine ersten Ergebnisse gespannt. In dem vergangenen Monat habe ich an meinem Projekt weitergearbeitet. Meine Startlocation wird eine Insel sein. Die muss der Spieler erstmal erkunden und kommt dann so nach und nach in der Story an. Hier schon mal ein kleines Video von einer kleinen Quest die es zu absolvieren gilt. Wählt bitte als Qualität Full HD. Gruß, Andreas
  12. 1 point
  13. 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.
  14. 1 point
    Probier mal: Vector3 mousePosition = Event.current.mousePosition; Da du dich beim innerhalb der Gizmomethode vermutlich innerhalb des Editorkontextes befindest, funktioniert die Inputklasse nicht. Ist quasi ähnlich wie innerhalb "Editor.OnInspectorGUI". Ich hoffe du weißt, daß OnDrawGizmos() auch nur in der Szeneview des Editors wirksam ist,.
  15. 1 point
    So habe heute mal ein Build Gewagt, Das will ich euch nicht vorenthalten, Habe ja vor ein Multiplayer Game zu Basteln das eine (Geplant sind 2) Maps Bietet sowie einen Multiplayer Part hat, Kurz Gesagt ein Verschnitt aud Test Drive Unlimidet und Need vor Speed Underground:D Bin mit dem Jetztigen Ergebniss Recht zufrieden bis auf ein paar kleine Dinge, Texturen sind aktuell noch nicht so Schön Kleine Bugs (Beim Aktualisieren der Listen ,Profile, und Autos) Aber das Sollte ich nich in den Griff bekommen, Verbesserungs Vorschläge nehme ich Dankend an Hier das Video, Fals ich hier nun Falsch sein Sollte bitte ich um Entschuldigung, denn Schaut mal auf dem Tacho xD
  16. 1 point
    Zum ersten Problem: - den Spielerinput in der Update-Methode auswerten Du kannst die Velocity hier berechen aber nicht übergeben! - den Rigidbody2D in der FixedUpdate-Methode manipulieren Hier dann die im Updatezyklus berechnete Velocity übergeben. void Update() { int touchCount = Input.touchCount; for (int i = 0; i < touchCount; i++) { Touch touch = Input.GetTouch(i); if (touch.phase == TouchPhase.Began) { if (touch.position.y > Screen.height / 2.0f) { vel = new Vector2(0, 1.5f) * speed * Time.deltaTime; } else if (touch.position.y < Screen.height / 2.0f) { vel = new Vector2(0, -1.5f) * speed * Time.deltaTime; } } else if (touch.phase == TouchPhase.Ended) { vel = new Vector2(0, 0); } } } void FixedUpdate() { rb2d.velocity = vel; } Und bitte GetComponent() nur 1x aufrufen: private Vector3 vel; private Rigidbody2D rb2d; void Start() { Rigidbody2D rb2d = GetComponent<Rigidbody2D>(); } Ansonsten kann ich nicht mit Sicherheit sagen, ob du da die Touchphase richtig verwendest, hier ein paar Beispiele: https://docs.unity3d.com/ScriptReference/Input.GetTouch.html
  17. 1 point
    Soweit ich weiß, kann man entweder die Vertexinformationen im Originalmesh "abspeichern" (also im Asset vom Mesh im Projektfolder) oder man kann Vertex Streams verwenden. Speichert man diese Informationen im Asset gilt diese Änderung für alle Versionen dieses Meshs in der Szene! Leider kann ich dir nicht genau die Technik hinter Vertex Stream erklären, man kann damit aber scheinbar Vertexinformationen "abspeichern" und diese einem Mesh (=Instanz) in der Szene zuordnen: https://docs.unity3d.com/ScriptReference/MeshRenderer-additionalVertexStreams.html Vertex Streams: allows you to override per-instance data on meshes without paying the cost of duplicating a full mesh Soviel ich verstehe hat man einen anderen Mesh der die gewünschten Vertexinformationen besitzt und ordnet diesen Mesh via der obigen Property zu. Ich kann dir nur nicht sagen, wie man nun diesen "Streaming Mesh" persistiert oder erzeugt. Unity hat hier leider wieder mal nichts genau erklärt. Man könnte ein Asset anlegen und ihn "Streaming Mesh" nennen, dann hat man zumindest 1 Container für die Streamingdaten, aber du kannst damit dann nur eine Version der Farben deines Meshes als Asset speichern. Zudem nicht zu vergessen, man kann Assets nicht in einem Build dynamisch anlegen. Legt man diese Meshes zur Laufzeit an, dann hat man wieder das Problem wie man dieses Mesh persistiert. Notfalls die Farben aus allen Instanzen rausholen, in die Playerprefs schieben und in der neuen Szene wieder laden.
  18. 1 point
    Was du meinst sind vermutlich Sub States (oder auch Sub State Machines genannt), über die kannst du andere States gruppieren und damit quasi identifizierte "Teilnetze" in ein Subnetz (= Sub State) auslagern. Man kann so beispielsweise einen kompletten Ast eines Baumes in einen Substate legen. https://docs.unity3d.com/Manual/NestedStateMachines.html Layers würde ich eher nur fürs Überblenden verwenden. Hier kann man dann über eine Avatarmaske beispielsweise ein Statenetz für den Oberkörper aufbauen (aber beim Aufräumen im "Base Layer" hilft das nicht).
  19. 1 point
    So... fertig. CustomYieldInstruction ist Quatsch, einfach ne neue Coroutine schreiben. Hier hast du ne Klasse: using System; using System.Collections; using UnityEngine; public static class Invoker { public static IEnumerator InvokeRepeating(Action action, float initialDelay, float delay) { if(initialDelay < 0 || delay < 0) yield break; var countdown = initialDelay; while(true) { countdown -= Time.deltaTime; while(countdown <= 0) { countdown += delay; action(); } yield return null; } } } Benutzt wird sie so: StartCoroutine(Invoker.InvokeRepeating(MeineMethode, 2f, 3f)); // oder ohne ne fest definierte Methode StartCoroutine(Invoker.InvokeRepeating(() => Debug.Log("Hallo!"), 2f, 3f)); Also fast genauso wie MonoBehaviour.InvokeRepeating, nur ohne den doofen string. Wenn du das Ding abbrechen willst, merk dir die zurückgegebene Coroutine: private Coroutine stuffDoer; private void Start() { stuffDoer = StartCoroutine(Invoker.InvokeRepeating(MeineMethode, 2f, 3f)); } public void StopDoingStuff() { StopCoroutine(stuffDoer); }
  20. 1 point
    Ich vermute es gibt Opensource-Projekte in C C++ oder C#. Aus C oder C++ kann man in Windows DLLs erzeugen damit auch in Unity verwenden.. Für andere Plattformen muss man ggf. je Plattform compilieren ... http://blog.neospeech.com/top-5-open-source-speech-recognition-toolkits/ C oder C++ in Unity: https://docs.unity3d.com/Manual/NativePlugins.html
  21. 1 point
    Ich bin mir nicht ganz sicher, was du da genau machst (da ich deine Prefabs nicht kenne), aber ich vermute mal "ParentPanel" soll ein Canvas darstellen. Buttons auf einem (Overlay)-Canvas werden über sein RectTransform positioniert: https://docs.unity3d.com/ScriptReference/RectTransform.html Über ein normales Transform könnte man nur positionieren, wenn die Prefabs deiner Buttons jeweils ein eigenes Worldspace-Canvas besitzen würden und man dieses bzw. dessen Parent darüber positioniert.
  22. 1 point
    Das klingt nach einem Problem mit deinem GUI-Client. Oder deinem Hoster. Aber nicht nach Git.
  23. 1 point
    Du solltest eine Auflösung finden, die die Auflösungen deiner Zielgeräte möglichst breit repräsentiert. Die modernen Smartphones haben eine Auflösung von "1920 × 1080". Wie gesagt, laut meinen Tests ist folgende Einstellung ziemlich positionsgetreu auch bei verschiedenen Auflösungen: "Canvas Scaler" = "Scale With Screen Size" "Reference Resolution" würde ich mal "1920x1080" nehmen (damit ist man auch bei modernen Smartphones mit dabei) "Screen Match Mode" = "Match Width or Height" Match = 1
  24. 1 point
    Hallo, Ich hoffe das ich hier richtig bin. Habe noch einige Sounds die ich selbst erstellt habe die ich kostenlos zur Verfügung stelle. Nichts großartiges aber falls sie jemandem gefallen kann er sie gerne benutzen. Hier 2 beispiele. Mysterie_Backround.wav War_Backround1.wav Gruß Jog
  25. 1 point
    Hier mal ein Beispiel: http://catlikecoding.com/unity/tutorials/editor/custom-data/ PS: Nimm bei deiner Klasse mal die Vererbung von Editor weg. Ich denke dann sollte es auch ohne Customeditorklasse gehen: [System.Serializable] public class TextToMesh { public string charstring; public GameObject Gameobject; public float Heightoffset; }
  26. 1 point
    EDIT: Problem gelöst, hab im PlayMode alles immer geändert, daweil ist das Script erst ab AWAKE aktiv, daher hat es nie geklappt... Danke an den Admin für die schnelle Hilfe!
  27. 1 point
    Gedacht ist gut! Ich wurde genötigt! Ne, ich hatte das gar nicht auf dem Schirm und musste mich erstmal schlau machen, was die da wollten. Aber im Endeffekt ist es nur eine Kamera Ratio von 9:16 und dadurch natürlich auch eine andere Kameraposition. Sie muss jetzt schon fast senkrecht über dem Spielfeld stehen.
  28. 1 point
    Ok nevermind, habe das Problem soeben gelöst Habe neue Canvas Elemente hinzugefügt, die ebenfalls eigene sortingLayer werte hatte, zack, problem gelöst!
  29. 1 point
    using UnityEngine; public class PointManager : MonoBehaviour { public float pointAmount = 1; public float maxPoints = 5; public static float currentPoints; public float pointIncreaseTimer = 10; void Start() { currentPoints = maxPoints; InvokeRepeating("IncreasePoints", pointIncreaseTimer, pointIncreaseTimer); } void Update() { if (Input.GetButtonDown("Mouse1")) { currentPoints -= pointAmount; if (currentPoints < 1) currentPoints = 0; } } void IncreasePoints() { if (currentPoints <= (maxPoints - pointAmount)) currentPoints += pointAmount; else currentPoints = maxPoints; } } Such dir eine Lösung aus, ich hatte es auch schon soweit fertig
  30. 1 point
    Du kannst fürs Erste davon ausgehen, dass Update 60 Mal pro Sekunde aufgerufen wird. Das bedeutet hier, dass du 60 Mal pro Sekunde checkst, ob currentPoints kleiner als maxPoints ist und wenn das der Fall ist, startest du die Coroutine. Da die Coroutine genau zehn Sekunden (= Wert von plusPoints) braucht, damit currentPoints um eins erhöht wird, wird in der Zwischenzeit, bis es soweit ist, weiterhin 60 Mal die Sekunde festgestellt, dass currentPoints größer sein müsste. Du startest also 10 Sekunden lang 60 Mal pro Sekunde, also insgesamt 600 Mal diese Coroutine. Und die bricht natürlich nicht ab, nur weil currentPoints jetzt den Zielwert erreicht hat. Einmal gestartet, läuft die weiter, es sei denn, du brichst sie ab. Und das tust du nicht. Das heißt wiederum: Wenn du wirklich nur einen Punkt unter dem Ziel lagst, dann hast du dank 600-Maligen starten der Coroutine immer noch 599 Punkte zu viel am Ende, weil der Punktestand nach den ersten 10 Sekunden 60 Punkte pro Sekunde hochzählt - weil die Coroutinen jetzt alle ihre 10 Sekunden fertig haben. Soviel zum "Was hier alles falsch ist". Jetzt aber Mal zur Lösung. Du willst auf keinen Fall in Update ständig dieselbe Coroutine starten - sonst landest du ziemlich schnell bei dem, was ich gerade beschrieben habe. Du willst entweder eine Coroutine dauerhaft am Laufen haben - oder gar keine, und das ganze in Update klären. Ich denke, die Update-Variante ist hier erstmal einfacher und unproblematischer. Je nach Anwendungsfall kann aber immer mal etwas anderes sinnvoll sein. Du baust dafür einfach eine neue private float-Variable, die den Wert einer Stoppuhr annimmt: private float pointRegenTimer = 0; public float pointRegenDelay = 10; "pointRegenDelay" ist deine Variable "plusPoints", nur umbenannt, damit der Variablenname aussagekräftiger ist. In Update hast du ja deinen Check, ob Punkte aufgefüllt werden müssten. Diesen benutzt du jetzt nicht mehr, um deine Coroutine zu starten (die kommt ganz weg), sondern, um den Timer weiterlaufen zu lassen: if (currentPoints < maxPoints) { pointRegenTimer += Time.deltaTime; Time.deltaTime ist immer die jeweilige Zeit seit dem letzten Frame, also bei 60 FPS 0.16666... . Damit zählst du immer ziemlich gneau 1 pro Sekunde hoch. Dann kannst du nach dem hochzählen direkt mal checken, ob der Timerwert über dem Delaywert ist: if(pointRegenTimer > pointRegenDelay) { und wenn das der Fall ist, den Timer um ein delay zurücksetzen: pointRegenTimer -= pointRegenDelay; und gleich im Anschluss das tun, was auch immer du nach abgelaufenem Timer machen willst: currentPoints++; Dann noch Klammern zu: } } und fertig. Jetzt gibt es noch eine kleine Verbesserung für Extremfälle. Sollte dein delay sehr klein und/oder dein Time.deltaTime wegen niedriger FPS sehr groß sein, dann könnte es ja passieren, dass der Timer zweimal in einem Frame durchläuft. Komisches Beispiel: Wenn du also etwas 50 Mal pro Sekunde haben willst, aber das Spiel gerade leider nur auf 30 FPS läuft. Für diesen Fall solltest du die if-Abfrage noch in eine while-Schleife abändern. Eine while-Schleife funktioniert genau wie eine if-Abfrage, außer dass die so lange wiederholt, bis die Bedingung nicht mehr zutrifft. Der fertige Update-Code sieht dann so aus: void Update() { if (Input.GetButtonDown("Mouse1")) { currentPoints -= 1; } if (currentPoints < maxPoints) { pointRegenTimer += Time.deltaTime; while(pointRegenTimer > pointRegenDelay && currentPoints < maxPoints) { pointRegenTimer -= pointRegenDelay; currentPoints++; } } } Bemerke, dass die while-Schleife jetzt noch prüft, ob wir schon maxPoints erreicht haben. Wenn ja, kann sie direkt aufhören, die Punkte zu erhöhen - egal, ob der Timer weit genug durchgelaufen ist. Wenn du es richtig schick haben willst, kannst du noch nach der while-Schleife eine kleine Abfrage machen, die dafür sorgt, dass der Timer, wenn wir das erste Mal wieder unter maxPoints gehen, wieder genau bei 0 zu zählen anfängt: if(currentPoints == maxPoints) { pointRegenTimer = 0; }
  31. 1 point
    Hallo erstmal, ich bin der Falk oder Chris, 26 Jahre alt. Ich habe mich bisher hauptsächlich mit Scripting und Modellierung (Blender) beschäftigt und entdecke gerade Unity für mich. Mit viel Erfahrung kann ich in Unity nicht aufwarten. Habe aber bisher weniger Probleme damit mich zurecht zu finden. Allgemein habe ich in der Vergangenheit viel mit sqf, ein wenig c++ und Moddeling verbracht (ArmA 3 Modding), möchte nun aber tiefer in die Materie eintauchen. Über die Zeit die ich mich nun mit dem gesamten Thema beschäftigt habe, hatte ich viele Ideen für Spiele und Anwendungen, Die Quasi nur darauf warten umgesetzt zu werden. Wenn es sich anbietet arbeite ich auch gern mit anderen zusammen oder man Tauscht sich aus oder ergänzt sich in seinen Projekten. Allgemein hoffe ich hier an euren Erfahrungen zu wachsen und vielleicht auch meine Anfänger Erfahrungen teilen zu können. wenn ihr fragen habt stellt sie ruhig und ansonsten hoffe ich auf eine gute Zeit mit euch Gruß Chris
  32. 1 point
    Du kannst im Objekt selbst in der Start Methode abfragen ob "hasAuthority" true ist. Dann fängst du auf dem Objekt selbst praktisch das Object ab. Alternative wäre, eine ClientRpc-Methode zu schreiben, die das NetworkIdentity deines auf dem Server gespawnten Objektes übergibt. Somit sendest du parallel das Objekt hinterher. Beide Ansätze machen das gleiche, gehen nur anders an die Situation ran
  33. 1 point
    wird LogIn() irgendwo mal aufgerufen? ich vermute mal googleLogin ist da immer 0 und er kommt gar nicht zum einloggen. brauchst du dass mit dem ganzen playerprefs gedöhns?^^ So das minimum was man braucht using GooglePlayGames; using GooglePlayGames.BasicApi; using UnityEngine; public class PlayGamesScript : MonoBehaviour { public static void SignIn() { PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder().Build(); PlayGamesPlatform.InitializeInstance(config); PlayGamesPlatform.Activate(); Social.localUser.Authenticate(succes => { if (succes) Debug.Log("gp eingeloggt!"); else Debug.Log("gp login fail"); }); } public static void AddScoreToLeaderboard(string leaderboardId, long score) { Social.ReportScore(score, leaderboardId, succes => { }); } public static void ShowLeaderboardsUI() { Social.ShowLeaderboardUI(); } }
  34. 1 point
    Alle Tiles einem GameObject unterordnen und dann nur dieses bewegen?
  35. 1 point
    Wenn ich mir das Bild anschaue hat es weniger mit einem Feder-Aussehen zu tun sondern mit einer Federwirkung. Also wenn der Spieler umgedrückt wird soll er in die Gegenrichtung zurückknallen und dann irgendwann in der Mittelposition zum stehen kommen. Das ganze würde ich mit AddForce angehen. Und der Spieler braucht halt einen Punkt der in Festhält... Eventuell einen Hinge Joint.
  36. 1 point
    Machbar ist es aufjedenfall, out of the box bietet aber unity weder die feder noch ein Katapult. Du kannst das zu stoßende Objekt z.b. mit addForce einen Kraftstoß in eine definierte Richtung geben. https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html LG
×