Jump to content
Unity Insider Forum

Sascha

Administrators
  • Content Count

    11,690
  • Joined

  • Last visited

  • Days Won

    588

Sascha last won the day on March 26

Sascha had the most liked content!

Community Reputation

2,398 Excellent

6 Followers

About Sascha

  • Rank
    Community Manager
  • Birthday 08/13/1990

Contact Methods

  • Website URL
    http://13pixels.de

Profile Information

  • Gender
    Male
  • Location
    Hamburg
  • Interests
    Programmierung

Recent Profile Visitors

45,157 profile views
  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...
×
×
  • Create New...