Jump to content
Unity Insider Forum

KaBau

Members
  • Content Count

    107
  • Joined

  • Last visited

  • Days Won

    3

KaBau last won the day on May 8

KaBau had the most liked content!

Community Reputation

12 Gut

About KaBau

  • Rank
    Advanced Member
  • Birthday 08/03/1973

Profile Information

  • Gender
    Male
  • Location
    Hildesheim

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Mit dem Hub kanst du doch verschiedene Versionen nebeneinander installieren und deine Projekte dann den installierten Versionen zuweisen. Somit sollte der Schritt zurück doch immer einfach sein. Trotzdem an alle hier zur Wiederhohlung ein wichtiges Wort:
  2. Irgendwie hast du verschiedene Pixelauflösungen. Die Berge im Hintergrund sind sehr grob (wirken wie 8-Bit, auch von der Anzahl der Farben), die Kisten und der Player sind feiner aufgelöst (und wirken deshalb fast wie 16-Bit). Bei den Animationen der wackelden Elemente wirkt es zudem komisch, das die Pixel kippen. Also ich meine, das ein pixelieges Bild gedreht wird, obwohl eigendlich je nach Neigungswinkel ein eigenes pixelieges Bild erscheinen müßte. Mich, der damals noch vor solchen 8-Bit Spielen gesesen hat, stört das leider.
  3. Mit den Parameter StartCoroutine(cameraShake.CamShake(.3f, .4f, 4)); sieht es nun so aus: cameraShake.mp4
  4. Ich nutze "maxHealth" noch um zu überprüfen, ob bei der Aufnahme eines Erste Hilfe Kasten "currentHealth" nicht über "maxHealth" steigt, sprich der im Inspector eingetragene Wert nicht überschritten wird. Leider erscheint nach jeder Änderung eines einzelnen Script diese Fehlermeldnungen für ALLE Scripte. Und da ich häufig damit Arbeite, dass ein GameObjekt ein anderes GameObjekt an- und ausschaltet, ist diese Liste sehr lang. Gibt es zu diesem Vorgehen alternativ die Möglichkeit, dass ein Script in einem ausgeschaltetes GameObjekt doch irgendwie aktiv ist und verschiedenes überprüft? Ist vielleicht ein eigenes Thema wert, aber würde mir bei vielen dieser Fehlermeldungen helfen.
  5. Hi, ich erhalte seit längerem zu verschiedenen Scripten folgende Fehlermeldung (hier ein Beispiel): "Assets\scripts\Lvl6\EnyB6CornerFireYes.cs(10,16): warning CS0649: Field 'EnyB6CornerFireYes.boltYes' is never assigned to, and will always have its default value null". Nach meinem Verständnis wird mir mitgeteilt, dass die Variable "boltYes" nicht zugewiesen ist oder sich nicht ändert und somit immer den Vorgabewert "null" behält. OK, gelesen, aber es stört mich doch auch gar nicht. Die Variable (in diesem Fall das GameObjekt) selber ändere ich ja auch gar nicht, sondern schalte es nur an und aus. Das dazugehörende Script: public class EnyB6CornerFireYes : MonoBehaviour { [SerializeField] GameObject fireYes; [SerializeField] GameObject boltYes; private void Start() { fireYes.SetActive(false); boltYes.SetActive(true); } private void Update() { if(fireYes == null) { Destroy(gameObject); } } private void OnTriggerEnter(Collider other) { if (other.name == "FireYesCollider") { fireYes.SetActive(true); boltYes.SetActive(false); } } private void OnTriggerExit(Collider other) { if (other.name == "FireYesCollider") { fireYes.SetActive(false); boltYes.SetActive(true); } } } In einem anderen Fall wird diese Fehlermeldung bei einer Float-Variable "maxHealth" geschrieben. Dort ändere ich diese Variable auch nicht, stimmt. Ich nutze die Variable nur, um einen Wert aus dem Inspector in das Script zu überführen: [SerializeField] int maxHealth; int currentHealth; private void Start() { currentHealth = maxHealth; ... Wie kann ich diese (für mich unnötigen) Fehlermeldungen unterbinden, bzw. muss ich irgend etwas unternehemen, damit diese Fehlermeldungen nicht mehr auftauchen?
  6. Geschafft: Das von @Jomnitech genannte Tutorial hat mich auf dem richtigen Weg gebracht. Ich habe nicht wie am Ende vorgeschlagen das Asset verwendet, sondern lieber etwas eigenes programmiert (da weis ich besser, was in meinem Spiel passiert). Wer das Video nicht gesehen hat: Die Camera wurde einen EmtyGame Objet "CameraHolder" untergeordnet. Somit kann ich dieses unabhängig von der Camera bewegen (welche ein eigenes Bewegungsscript hat). In meinem "PlyHealth.cs" Script habe ich folgenes eingebaut: Am Anfang: public CameraShake cameraShake; und in dem Abschnitt, welcher prüft, ob der Player getroffen wurde: bool shakeYes = cameraShake.cameraHolderShakeYes; if (!shakeYes) { StartCoroutine(cameraShake.CamShake(.2f, .5f, 4)); // Wackeln der Camera mit Script CameraShake.cs } Im Inspektor habe ich dann die entsprechende Zuweisung zum "CameraHolder" erstellt. Das "CameraHolder" Objekt hat folgendes Script: public class CameraShake : MonoBehaviour { public bool cameraHolderShakeYes = false; //Script PlyHealth.cs greift hierrauf zu Vector3 cameraHolderPos; private void FixedUpdate() { if (cameraHolderShakeYes) { transform.position = cameraHolderPos; } } // wird im Script PlyHealth.cs gestartet public IEnumerator CamShake(float duration, float magnitude, int steps) { cameraHolderShakeYes = true; Vector3 originalPos = new Vector3 (0,0,0); int shakeSteps = steps - 1; float stepDuration = duration / steps; float startCamHolderX = transform.position.x; float startCamHolderZ = transform.position.z; float targetCamHolderX; float targetCamHolderZ; for (int i = 1; i <= shakeSteps; i++) { targetCamHolderX = Random.Range(-1f, 1f) * magnitude; targetCamHolderZ = Random.Range(-1f, 1f) * magnitude; for (var time = 0.0f; time < stepDuration; time += Time.deltaTime) { var progress = time / stepDuration; cameraHolderPos.x = Mathf.Lerp(startCamHolderX, targetCamHolderX, progress); cameraHolderPos.z = Mathf.Lerp(startCamHolderZ, targetCamHolderZ, progress); yield return null; } startCamHolderX = targetCamHolderX; startCamHolderZ = targetCamHolderZ; magnitude *= 0.6f; yield return null; } float lastStepDuration = stepDuration + 0.1f; for (var time = 0.0f; time < lastStepDuration; time += Time.deltaTime) { var progress = time / stepDuration; cameraHolderPos.x = Mathf.SmoothStep(startCamHolderX, originalPos.x, progress); cameraHolderPos.z = Mathf.SmoothStep(startCamHolderZ, originalPos.z, progress); yield return null; } cameraHolderShakeYes = false; } Einige Anmerkungen: - die Variable "magnitude" reduziere ich zwischenzeitlich um einen sanfteren Auslauf des Effekt zu bekommen. - Vor der letzten Schleife habe ich die "stepDuration" für diesen Durchgang mit der Variablen "lastStepDuration" erhöht, da die Endposition 0,0,0 nie richtig eingenommen wurde. - ich habe es mit "Mathf.Lerp" und "Mathf.SmoothStep" probiert. Auch wenn der Unterschied minimal ist gefällt mir letzteres besser.
  7. Sag mal, wie häufig willst du eigentlich noch ein Thema mit dem Titel "Finde die Fehlerquelle nicht" erstellen? Versuch doch im Titel dein Problem zu benennen. Das macht es uns als Forenmitglieder einfacher zu Wissen, ob wir eventuell helfen können.
  8. Hi, ich möchte gerne, dass bei einem Treffer meines Player die Camera etwas zittert. Bevor ich mich auf einem komplett falschen Weg begebe: Ich stelle mir vor, dass ich mit "Mathf.PingPong" die Bewegung ermittle und mit einer zweiten "Mathf" Berechnung die "float length" (gemäß https://docs.unity3d.com/ScriptReference/Mathf.PingPong.html ) verändere um diese auf "0" zu bekommen. Ob ich nun mit "Mathf.Lerp" oder "Mathf.SmothStep" oder einer anderen Berechnung arbeite werde ich noch testen. Meine Fragen hierzu: 1: kann bzw. darf ich überhaupt mit einer "Mathf" Berechnung in eine andere "Mathf" Berechnung eingreifen? 2: gibt es eventuell einen eleganteren Weg um ein Zittern zu erstellen?
  9. Hi, ich denke mir, dass du nicht "VC2015" meinst, sondern "VS" für "Visual Studio". Aktuell ist derzeit die Version 2019. Ich hatte mit der Version 2017 (welche ich nun nutze) auch mal das Problem nach einem Update von Unity. Mir blieb nichts anderes übrig, als Visual Studio komplett zu deinstallieren und bei der Installation von Unity Visual Studio mit zu installieren. Danach klappte alles wie gewollt. Edit: jetzt lese ich erst, dass dieses Thema schon recht alt ist. Eventuell hilft meine Antwort ja doch noch.
  10. Zum Thema der verschiedenen Bewegungsmöglichkeiten hat @malzbie ein tolles Video erstellt: Ist zwar schon etwas älter, aber im Grunde noch immer aktuell. Hier wird auch auf das eingegangen, was @Sascha oben zu den RB geschrieben hat.
  11. OK, ich verschiebe nun immer vor dem Bearbeiten mein gesamtes Empty Game Objekt mit alle Terrain um "40" nach oben, um es danach wieder nach unten zu schieben. Ist zwar etwas nervig, aber ich komme wenigstens zu einerm Ergebnis.
  12. Hallo, nach dem Update auf die Version 2019 scheint beim Terrain der Befehl "Set Height" nicht mehr richtig / wie früher zu funktionieren. Ich habe folgendes Problem: da ein Terrain ja nicht unter der eigenen Höhe "0" liegen kann habe ich mein Terrain auf World Höhe "-40" gelegt und früher mit "Set Height" und der Eingabe der Höhe "20" ersteinmal eine Mittelhöhe erstellt. Wenn ich nun weiter das Terrain geändert habe und zwischendurch etwas wieder auf eine Höhe bringen wollte habe ich "Set Height" genutzt und mit gedrückter SHIFT Taste eine vorhandene Höhe in der Nähe ausgewählt. Nun wurde mein Gelände auf diese Höhe angepasst. Diese Höhe war natürlich als World Höhe z.B. bei "-10", als Höhe des Terrain aber bei "30". Nun in Version 2019 ist es so, dass bei der Eingabe des Wert "0" mein Gelände zur World Höhe "0" gebracht wird. Das bedeutet aber bei meinem Gelände, welches auf "-40" liegt, dass dieses unmöglich aussieht und nicht mehr zu bearbeiten ist. Ich kann auch keinen negativen Wert eingeben, um irgendwie weiter unten zu bleiben. Ich hoffe, ihr versteht was ich meine und könnt mir helfen. Edit als Ergänzung: Da ich ein längliches Terrain benötige habe ich viele Einzelterrain in ein Empty Game Objekt gelegt und dieses auf die Höhe "-40" gelegt.
  13. Zu 1: Ich habe nun Unity deinstalliert. Im Unity-Verzeichnis waren noch etliche GB, welche ich manuell gelöscht habe, da noch immer der Hub zur Version 2018.3 gestartet werden konnte. Nach einer Neuinstallation habe ich nun nicht mehr so viel weniger GB. Passt also. Zu 2: Ich habe gesehen, dass ich im Package Manager auch die Version von TextMeshPro aktualisieren könnte. Das habe ich aber nicht gemacht, sodern ich habe TextMeshPro im Package Manager rausgenommen. Die entsprechenden Fehlermeldungen sind nun weg - Danke.
  14. Erstelle doch ein Emty GameObject, welches direkt an der Maus hängt - bzw. den Mausbewegungen folgt, und keine Kollisionen mit anderen Objekten hat. Zusätzlich erstellst du ein zweites sichtbares GameObjekt, welches dem ersten folgt. Bei mir mache ich das für die Touch Steuerung mit folgendem Script: public GameObject plyTarget; private Transform plyTargetPos; public float plyMoveSpeed = 0.16f; void Start() { plyTargetPos = plyTarget.GetComponent<Transform>(); } private void FixedUpdate() { if (plyTarget != null) { transform.position = Vector3.Lerp(transform.position, plyTargetPos.position, plyMoveSpeed); } } Somit kannst du für dieses zweite GameObject die Kollisionen besser koordinieren.
  15. Du zerstörst doch dieses GameObjekt bevor das Script komplett durchgelaufen ist. Eventuell liegt es daran.
×
×
  • Create New...