Jump to content
Unity Insider Forum

devandart

Members
  • Content Count

    391
  • Joined

  • Last visited

  • Days Won

    15

devandart last won the day on May 6

devandart had the most liked content!

Community Reputation

96 Excellent

About devandart

  • Rank
    Advanced Member

Profile Information

  • Gender
    Male
  • Location
    Hamburg
  • Interests
    game development, software engineering, audio engineering/mixing/mastering

Recent Profile Visitors

3,579 profile views
  1. Moin, Du suchst die Buttons, wenn Du ToggleButtons() aufrufst. Das Problem hierbei ist, dass Unity keine GameObjects in der Scene findet, die inaktiv sind. Die einfachste und sauberste Lösung ohne zu viel zu ändern wäre die folgende Änderung, einmal beim Start die Buttons zu finden und dann nur noch das Array zu nutzen. using System.Collections; using System.Collections.Generic; using UnityEngine; public class PanelToggle : MonoBehaviour { private bool buttonStatus = true; // Mit wahr initialisieren private GameObject[] buttonArray; void Start() { //Buttons beim Start einmal suchen und im Array cachen. buttonArray = GameObject.FindGameObjectsWithTag("Button"); // Array aus allen GameObjects generieren, die Buttons sind } public void ToggleButtons() // Alle Buttons ein- bzw. ausblenden { buttonStatus = !buttonStatus; // buttonStatus togglen foreach (GameObject button in buttonArray) // Für alle Buttons: { button.SetActive(buttonStatus); // Aktuellen Button ein- bzw. ausblenden Debug.Log("Buttons sind: " + buttonStatus); // OK } } } Grundsätzlich würde ich aber von "FindGameObjectsWithTag" und anderen Suchfunktionen mit String-Namen abraten, weil das sehr fehleranfällig ist. Entweder direkt nach Components suchen, oder ein im Inspector zugängliches Feld machen, wo Du die Buttons einfach im Editor reinziehst. //Hierfür müsste die Komponente auf dem Panel liegen und dann alle Unterelemente durchsuchen GetComponentsInChildren<Button>() //oder so, mit dem SerializeField Attribut erlaubst Du Unity, ein privates Feld im Inspector sichtbar zu machen [SerializeField] private Button[] buttonArray;
  2. Hast Du ein Beispielbild, wie das Ergebnis aussehen soll?
  3. Wenn ich das richtig sehe, könnte das beim ersten Mal funktioniert haben. Aber setzt Du die PlayerPref Variable "w3sFS" irgendwo wieder auf 0? Weil sonst ist sie bei jedem Start bereits auf 3, was dazu führt, dass Du immer in die letzte Bedingung springst (PlayerPrefs sind sessionübergreifende Speicherzustände).
  4. Hi, das geht mit StreamingAssets. Wie Du diese einrichtest, kannst Du hier nachlesen https://docs.unity3d.com/Manual/StreamingAssets.html
  5. 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 }
  6. Ohje, wer lesen kann ist klar im Vorteil. Sorry. Das habe ich in der Tat überlesen, dass Du das schon versucht hattest. Dass Cloth nur Sphere oder Capsule Collider unterstützt hat bestimmt gute Gründe. Vielleicht auch solche, dass eckige Collider Vertices festhalten bzw. feststecken bleiben und es somit zu komischen Verhalten kommt. Aber keine Ahnung... Wie schaut es mit IK (Inverse Kinematics) aus? Damit sollte man sowas auch hinbekommen.
  7. Ich weiß nicht, ob @Sascha bei dieser Lösung an eine der "bescheuerten" denkt. Aber Du kannst sowas auch relativ schnell und einfach mit der Cloth Komponente lösen. Einfach das Plane Mesh in mehrere ("genug") Segmente unterteilen und dann die Cloth Komponente zuweisen. Anschließend im Editor oben die Fixpunkte "reinmalen", damit das Teil nicht runterfällt. Als Collider musst Du dann am einfachsten eine Capsule zuweisen, auf die die Lamellen reagieren und diese musst Du einfach mit der aktuellen Kiste durch das "Tor" schieben. https://docs.unity3d.com/Manual/class-Cloth.html
  8. Kleiner Hinweis: man kann Meshes in Blender auch zusammenführen. Z.B. kannst Du alle Objekte in der Blender Szene markieren und dann mit STRG-J alle zu einem Objekt machen.
  9. Die Betonung lag auf dem Virtual Ich möchte meinen, dass es Visual heißen soll. Aber wir wollen mal nicht kleinkariert sein.
  10. Moin, das ist ein relativ komplexes Thema, welches man auf 1001 Arten lösen kann. Aber anfangen zu suchen könntest Du mit den Stichworten "Streaming", "World Streaming", "Object Culling" und vielleicht (bei vielen gleichen Objekten) "Hardware instancing". Wenn sich Objekte bereits inaktiv in der Welt befinden, sprich diese schon instanziert wurden, wird mindestens der Arbeitsspeicher belastet. Weil irgendwo müssen die Objekte ja schon existieren.
  11. Coole Idee und der Artikel über component based design gefällt mir.
  12. Moin und willkommen hier! Solange Du unter den besagten 100.000$ liegst und Dein Kunde Dir das Spiel im Sinne eines fertigen Produktes abkauft, wird Unity von niemandem irgendwas verlangen. Auch wenn Du wem Deinen Code verkaufst nicht. Einzig, wenn Du mit wem anders kooperierst und im Team am Code arbeitest, müssen alle Entwickler die gleiche Lizenz nutzen, soweit ich weiß.
  13. Und auf die Frage, wie Du das Problem bzw. dessen Lösung umsetzen kannst, gibt es viele Möglichkeiten. Eine einfache wäre, das Objekt zu markieren, dass dieses bei einem Szenenwechsel nicht gelöscht wird. Ein Beispiel für "DontDestroyOnLoad" findet sich hier unten auf der Seite https://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html Damit bleibt das Objekt auch bei Szenenwechsel erhalten und wenn irgendwo ein weiteres vorkommt, löscht sich dieses selbst um Duplikate zu vermeiden.
  14. Wenn Du in einer erbenden Klasse Parameter im Konstruktor übergibst, musst Du diese an die Basisklasse weiterreichen. public class Mensch { protected readonly int alter; public Mensch(int alter) { this.alter = alter; } } public class SuperMensch : Mensch { public SuperMensch(int alter) : base(alter) { } } Statt im Konstruktor kannst Du auch Eigenschaften beim Erzeugen vom Objekt setzen. Dies hat Vor- und Nachteile. public class Mensch { private int alter; private string name; public int Alter { get { return alter; } set { alter = value; } } public int Name { get { return name; } set { name = value; } } } public class SuperMensch : Mensch { } //... irgendwo var superMensch = new SuperMensch() { Alter = 10, Name = "Hans Wurst" };
  15. Moin aus ebenfalls Hamburg und herzlich willkommen hier! Viel Spaß! War "Virtual Basic" Autokorrektur?
×
×
  • Create New...