Jump to content
Unity Insider Forum

Sascha

Administrators
  • Content Count

    11,690
  • Joined

  • Last visited

  • Days Won

    588

Everything posted by Sascha

  1. Ist etwas schwer, zu erraten, wodran es hapert. Dass du die Kiste anschaust, machst du mit einem Raycast von der Kamera weg. Dass das Objekt, das vom Raycast getroffen wurde, von Interesse ist (also zu den Objekten gehört, wegen denen das Info-Panel aufgeht), definierst du am besten mit einer entsprechenden Komponente auf dem Objekt. Was in dem Panel steht, sollte als Datensatz auf der Komponente stehen, sodass du einfach die Daten vom getroffenen Objekt auslesen und an das UI weitergeben kannst. Beim Weitergeben der Daten an das UI gibt es mehrere Wege. Es wäre hier vermutlich in Ordnung, ein Pseudo-Singleton zu nutzen, um die Daten über einen statischen Weg weiterzugeben. Sollte irgendetwas davon (zu) unklar sein (mein Geld liegt auf Punkt 4. ), dann sag Bescheid und ich erzähle ein bisschen was
  2. Ganz ehrlich, da bin ich mir nichtmal so sicher. Wenn du deine Daten aufteilst in Klassen mit unveränderlichem Inhalt (die man nicht kopieren braucht, weil es aufgrund der Unveränderlichkeit okay ist, wenn einfach alle dasselbe Objekt referenzieren) und Structs für die temporären Daten einer Bestellung (wo man keine Deep Copy braucht, weil bei Listen von Structs die Struct-Objekte, also die Daten, direkt in der Liste stehen anstatt referenziert zu werden), dann solltest du ohne Deep Copy klar kommen. Verwirf mal den aktuellen Ansatz und versuche, dir deine Datenstrukturen entsprechend aufzubauen.
  3. Pack halt das Material und ggf. den Shader mit in das AssetBundle?
  4. Es gibt keine Möglichkeit, das zu machen, aber du brauchst auch keine. Dein Spiel wird immer wieder neu gezeichnet, und jedes Mal dazwischen findet ein "Update" statt. Wenn du innerhalb eines Updates ein Objekt spawnst und dann noch ein Objekt spawnst, dann sind beide Objekte im Frame davor noch nicht da und im Frame danach da. Der Spieler sieht nicht, was zwischen zwei Frames an Schritten passiert, der Spieler sieht nur das Endergebnis.
  5. List<FoodDrinkList> clonedList = new List<FoodDrinkList>(foodDrinkList); Das ist schon, wie man eine neue Liste erstellt, die dieselben Elemente beinhaltet. Ist aber eine "Flat Copy", das heißt: Wenn deine Elemente Referenzen sind, dann werden halt die Referenzne kopiert, nicht aber die Objekte, die da referenziert werden. Es klingt, als wolltest du eine "Deep Copy", bei der die referenzierten Objekte auch kopiert werden? Du könntest sonst überlegen, ein Struct statt einer Klasse zu verwenden, die haben keine Referenzsemantik. Wenn du eine Liste von Structs hast, dann sind die Elemente entsprechend keine Referenzen, sondern Objekte selbst. Um Verwirrung und Problemen vorzubeugen, solltest du außerdem überlegen, deine Datenhalter in feste Informationen über Gerichte und Bestellungen aufzuteilen. Wenn ich mich nicht irre, ist die Eigenschaft "amount" in "Fooddetails" dazu da, um die Menge eines Gerichts in einer Liste darzustellen. Damit steht diese Eigenschaft im Kontrast zu den anderen Feldern, die fixe Informationen über das Gericht beinhalten. Mal als Beispiel, wie das anders aussehen könnte: [System.Serializable] public class FoodDetails { public string name; public Sprite picture; piblic int happiness; } Wenn du Propertys benutzt, kannst du diese Informationen auch readonly machen, sodass da kein™ Code geschrieben werden kann, der da in den Werten rumfummelt. Falls du das probieren willst, sag bescheid, aber ich lasse das der Einfachheit halber gerade Mal weg. Dann baust du noch ein Struct für einen Bestellpunkt: [System.Serializable] public struct OrderItem { public FoodDetails food; public int amount; } Und dann machst du davon eine Liste. Da du dann eine Liste von Struct-Objekten hast, kannst du OrderItems beliebig umherschieben und kopieren. Das "FoodDetails"-Objekt, das da referenziert wird, wird nicht mitkopiert, da "FoodDetails" eine Klasse ist. Ist ja aber in Ordnung, weil in diesen Objekten nichts mehr drinsteht, das wir ändern würden. Die Daten in diesen Objekten sind also statisch, ändern sich nicht und gelten für alle gleich. Diese Daten also mehrfach zu haben wäre Platzverschwendung.
  6. Hab's gerade mal ausprobiert... mir war nicht bewusst, dass der Lautstärke-Parameter von PlayOneShot relativ zur Lautstärke der AusioSource gemeint ist... alles klar!
  7. Gibt da mehrere Wege... willst du, dass das GUI in der 3D-Welt schwebt (wie in Borderlands) oder eher, dass es auf einer festen Position auf dem Bildschirm aufploppt?
  8. Naja, halt nicht. Mit PlayOneShot kannst du einen Einmal-Sound von derselben AudioSource abspielen, die den Sound auf Schleife abspielt.
  9. Warum packst du nicht einfach jeweils eine AudioSource auf jedes Objekt, das tatächlich auch den Ton erzeugt? Du hast doch nur zwei Sounds - den einen lässt du als Loop laufen und den anderen spielst du mit PlayOneShot ab.
  10. Kann man so machen. Wenn du nur zwischen 0 und 1 wechselst, wäre es aber eleganter, den Sound mit Stop anzuhalten und mit Play anzuspielen. Für den Hit einfach eine andere AudioSource nehmen. Ansonsten kannst du für den hit auch PlayOneShot benutzen, das läuft dann unabhängig vom eigentlichen Sound der AudioSource. Du arbeitest ja hoffentlich nur an der AudioSource des Steins und nicht an irgendwelchen anderen. Was du mit einer AudioSource machst, ist den anderen egal.
  11. Da ein Satz beliebig viele Wörter hat, kannst du nicht die richtige Menge Variablen definieren, daher nimmst du eine Sammlung, z.B. ein Array. string[] words; Mit String.Split kannst du einen String an einem Zeichen zerlegen, zum Beispiel dem Leerzeichen: words = "Das ist ein Satz".Split(' '); Dann kannst du schauen, wie viele Worte du hast: words.Length und auf die Worte zugreifen: words[0] words[1] words[2] // ...
  12. Du kannst mit GameObject.SetActive Objekte an- und ausschalten.
  13. Also... prinzipiell sagst du "Ich krieg das nicht gebacken, mach das mal für mich" Wie wäre es stattdessen damit, dass du dir das ganze genau anschaust und dann mal erzählst, wodran es hapert.
  14. Das ist nicht, was ich meine. Eine LayerMask ist nicht dasselbe wie ein Layer. Ein Layer ist eine einzelne Nummer, und jedes Objekt hat eine solche Nummer uns ist damit auf einem Layer. Eine LayerMask ist ein 32-Bit-Integer, das sind 32 Bits, die entweder 0 oder 1 als Wert haben. Damit kannst du dann für alle (bis zu 32) Layer, die dein Projekt hat, angeben, ob er ignoriert werden soll oder nicht. Habe aber mal gerade nachgeschaut und wenn man dem Raycast-Aufruf keine LayerMask mitgibt, dann werden standardmäßig alle Layer beachtet außer dem "Ignore Raycast"-Layer. Du kannst also tatsächlich deine Wände darauf einstellen, darauf achten, dass dein Methodenaufruf keine LayerMask mitkriegt und dann werden die Wände ignoriert. Denke aber daran, dass es egal ist, was irgendein übergeordnetes Objekt für einen Layer hat - Das GameObject mit dem Collider muss selbst auf dem richtigen Layer sein.
  15. Dein Code macht in die Richtung ja nix, da kann ich also schlecht etwas zu sagen...
  16. "Material" ist keine Komponente. Auf Obwohl der Inspektur untenrum ein Material anzeigt, ist das Material nicht als Komponente auf dem GameObject. Nur die Elemente der Liste im Inspektor (von oben) sind das. Wenn du ein Material im Inspektor siehst, dann liegt das an dem Renderer, der da draufliegt. Also vermutlich ein MeshRenderer, SkinnedMeshRenderer, SpriteRenderer oder ein LineRenderer. Du kannst nach der gemeinsamen Superklasse "Renderer" fragen: GetComponent<Renderer>().material
  17. Hier ist erstmal eine Erklärung zu NameToLayer, und warum man für LayerMasks lieber GetMask verwenden will. Am allerliebsten sollte man aber meistens einfach eine LayerMask deklarieren und sie im Editor einstellen. Zur eigentlichen Frage: Die Raycast-Methode hat einen Haufen "Überladungen", das sind unterschiedliche Konfigurationen von Parametern. Wenn du auf der Seite zum Raycast schaust, siehst du dort diese unterschiedlichen Konfigurationen. Einige davon haben eben einen "layerMask"-Parameter und wenn du eine dieser Überladungen benutzt, dann ignoriert der Raycast alle Objekte auf allen Layern, die nicht Teil der LayerMask sind.
  18. "Klappt nicht" ist keine Fehlerbeschreibung. Wenn du Hilfe möchtest, gib immer an, was schief läuft bzw. was passiert im Gegensatz dazu, was passieren sollte. Ich hab das halt so runtergetippt. Grundsätzlich gilt bei Code aus dem Internet: Niemals einfach übernehmen. Das allermeiste funktioniert nämlich gar nicht, weil's nicht getestet wurde, und es haben sich sehr oft ein paar Fehler versteckt. Wenn du Code im Internet kriegst oder findest, dann musst du ihn immer lesen und verstehen, was der Code machen soll. Dann schreibst du ihn am besten mit diesem Verständnis noch einmal selbst.
  19. Musst du das Programm zählen lassen und dann ggf. ein Ergebnis forcieren: private int flippedInARow = 0; private int sameInARow = 0; private bool previouslyRight; public void Spin() { bool right; if (flippedInARow >= 4) { right = previouslyRight; // Letztes Ergebnis wiederholen } else if (sameInARow >= 3) { right = !previouslyRight; // Gegenteil von letztem Ergebnis } else { right = Random.value >= 0.5f; // Zufallsergebnis } if (right == previouslyRight) { sameInARow++; flippedInARow = 0; } else { sameInARow = 0; flippedInARow++; } previouslyRight = right; DoSomethingWithResult(right); }
  20. Kein Code, keine Infos... Da kann man ja nicht einmal raten.
  21. Sorry, hab das auch nicht so ganz verstanden. Da wird wohl irgendein Schritt an- und ausgeschaltet im Lightmapping-Prozess. Scheint, als würden u.U. für verschiedene Dinge verschiedene Normalen benutzt, aber mehr weiß ich auch nicht. Müsstest ein bisschen experimentieren.
  22. Lightmaps sind, zusammen mit Sounds und Texturen generell, der Grund warum moderne Spiele Gigabyte um Gigabyte verschlingen. Für Tests solltest du die Qualität runterstellen und mitcommitten solltest du so Binär-Assets so oder so nicht. Also ja, ist normal.
  23. Gibt halt das Häckchen daneben und wenn das gesetzt ist, macht Unity dads automatisch.
  24. Du solltest dir aber so oder so einmal Versionierungssysteme anschauen.
×
×
  • Create New...