Jump to content
Unity Insider Forum

BlackDullah

Members
  • Posts

    50
  • Joined

  • Last visited

Recent Profile Visitors

1,179 profile views

BlackDullah's Achievements

Advanced Member

Advanced Member (3/3)

2

Reputation

  1. Hi, vielleicht kann mir jemand helfen Ich möchte, dass mein Gegner alle paar Sekunden eine Axt wirft. Diese Axt soll schräg nach oben geworfen werden und dann in einem Bogen nach unten (halt wie man eine Axt wirft). Die Stärke des Wurfs sollte variieren. Entweder mit einem Random Wert, oder sie sollte sich am Spieler orientieren (eine Art Verfolgung). So ein Wurf ungefähr (https://www.youtube.com/watch?v=l8K3KmOJUsI&t). So sieht das Ding mittlerweile aus: using System.Collections; using System.Collections.Generic; using UnityEngine; public class Axt_Spawner : MonoBehaviour { public GameObject axtprefab; bool spawnerActive; void Start() { spawnerActive = false; } public void SpawnAxt() { if (spawnerActive == true) { Debug.Log("SpawnAxt"); GameObject axt = Instantiate(axtprefab); axt.transform.position = transform.position; } } public void InvokeRep () { spawnerActive = true; InvokeRepeating("SpawnAxt", 0, 1); } } In einer bestimmten Situation springe ich in das Script in die Methode "InvokeRep" . Ich denke dass mein Vorhaben in ein paar kleinen Zeilen in der "SpawnAxt()" sich umsetzen lassen würde. Leider bisher ohne Erfolg. Vielleicht isses ja einfacher als ich denke Vielen Dank, Black Dullah
  2. Hat sich erledigt. Habe in der If Abfrage etwas geändert, was meiner Meinung nach keinen Sinn ergibt. Jedoch funktioniert es jetzt. Komisch.
  3. Hallo, ich habe seit Tagen folgendes Problem. Ich rufe eine Animation auf, jedoch wird eine völlig andere aufgerufen. Ich finde den Fehler nicht. Code sieht folgendermaßen aus: IEnumerator Dead() { Debug.Log("4 Treffer"); isThrowing = false; isDead = true; anim.SetTrigger("isDead"); yield return new WaitForSeconds(4f); // isDead = false; bootscontroller.Spawn(); Destroy(gameObject); } Die Ausgabe "4 Treffer" erscheint. Die Animation ist auch richtig verknüpft. Es geht um einen Gegner, der die Animation aufrufen soll, dass er besiegt ist. Jedoch erscheint die Animation, dass er nur Schaden nimmt. Es gibt 4 Stufen: 1 Treffer: Animation 1 2 Treffer: Animation 2 3 Treffer: Animation 3 4 Treffer: Animation 4 (und diese funktioniert nicht) In dem Skript finde ich keinen Fehler. Vielleicht kann mit jemand nen Denkanstoß geben, wo ich nach dem Fehler suchen kann. Vielen Dank, Black Dullah
  4. Ah ok super. Das ganze funktioniert jetzt! 🙂 Vielen Dank!
  5. Hm, doch. Aber mir ist etwas aufgefallen. Wenn ich auf "Play" drücke, geht die Referenz verloren. Jedoch verstehe ich noch nicht warum.
  6. Hi, es geht um den bootscontroller: public class OrcController : MonoBehaviour { public HealthSystem healthsystem; private bool hitable; public float Hitpoints; //public float maxHitpoints = 5; public GameObject rolenderding; bool isHurting; bool isDead; bool isSlashing; public BootsController bootscontroller; public Vector3 startPos; public Vector3 newPos; public float orcSpeed = 10f; Animator anim; // Start is called before the first frame update void Start() { healthsystem = FindObjectOfType<HealthSystem>(); bootscontroller = FindObjectOfType<BootsController>(); hitable = true; anim = GetComponent<Animator>(); startPos = transform.position; } Zusätzlich muss ich im Inspector reinziehen.
  7. Hi Community, wie löse ich das am einfachsten, dass ein Gegner ein Item/Objekt spawnt? Ich habe mittlerweile etliche Möglichkeiten wie ich dachte es würde funktionieren ausprobiert. Leider immer ohne Erolg. Ich versuche es mal verständlich darzustellen. Ich befinde mich in dem ControllerScript meines Gegners in diesem IEnumerator: IEnumerator Dead() { isDead = true; yield return new WaitForSeconds(4f); isDead = false; Destroy(gameObject); DropItem(); } Springe nun in "Drop Item": public void DropItem() { bootscontroller.Spawn(); } Springe in ein anderes Script namens BootsController in die Spawn Funktion: public class BootsController : MonoBehaviour { public CharacterController2D ccontroller; public GameObject objectToDisable; //public static bool sichtbar = false; public int active = 0; // Start is called before the first frame update public void Start() { if (active == 0) { objectToDisable.SetActive(false); } else { objectToDisable.SetActive(true); } } public void Spawn() { active = 1; //objectToDisable.SetActive(true); Start(); } Ich hab sehr viel rumprobiert, mag sein, dass da momentan etwas verwurschtelt ist, was mir nicht auffällt. Fehlermeldung: NullReferenceException: Object reference not set to an instance of an object OrcController.DropItem () (at Assets/Scripts/Enemies/OrcController.cs:77) OrcController+<Dead>d__14.MoveNext () (at Assets/Scripts/Enemies/OrcController.cs:107) UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at <82ec470c913149358ad0c83ad628910c>:0) Gruß, BlackDullah
  8. Dann benötigst du vielleicht mehrere Sonnen
  9. Ich hab es gelöst. Oh man.. Ich habe die Schleife in die Start()-Methode geschrieben. Also insgesamt in: Start() RespawnPlayer() FindHeart() Mannoman. Vielen Dank für deine Hilfe Sascha!
  10. Falls Doppelposts hier nicht so gerne gesehen sind oder nicht Regelkonform tuts mir leid. Ich lasse jetzt das 4. Herz manuell anzeigen. Ich habe bei Spielbeginn nun 4 Herzen angezeigt, jedoch tatsächlich nur 3 wirkliche Leben. Lasse ich meinen Spieler 1 Leben verlieren, sieht es so aus: Also korrekt. Sammle ich bei Spielbeginn ein Leben, sieht das ganze so aus: Klar, 3 Herzen + 1 manuell Aktiv gesetzt Lasse ich meinen Spieler jetzt ein Leben verlieren, sieht das ganze so aus: Zusammenfassung: Egal auf welche Weg, die Subtraktion funktioniert grafisch einwandfrei. Nur die Addition weist Fehler auf. WICHTIG: Bei dem Problem geht es nur um das grafische Anzeigen der Herzen. Die Logik an sich funktioniert. Hmmm..
  11. Ah ok, danke für die Info. Das Thema muss ich mir demnächst auch mal anschauen 😀
  12. Ich habe dein Scrip eingefügt. Die Methode für das Aufsammeln sieht so aus: public void FindHeart() { //leben addieren leben = leben + 1; //Herzanzeige Debug.Log(leben); for (var i = 0; i < hearts.Length; i++) { hearts[i].enabled = leben > i; Debug.Log($"Setting {i} to {leben > i}"); } //lebensanzeige aktualisieren lebenText.text = leben.ToString(); } Ich denke das sieht korrekt aus In den Logs sieht das ganze so aus, wenn ich ein Leben aufsammle: Das sieht meiner Meinung nach auch korrekt aus. Im Spiel sieht es so aus:
  13. Der Wert des "Lebens" ist richtig. Bei Start habe ich 3. Sammle ich eins auf, habe ich 4. Das gibt mein Debug.Log dann auch korrekt aus. Ich zeige das ganze über eine "Horizontal Layout Group" an. Kann es sein, dass ich da auf etwas bestimmtes achten muss?
  14. Ja, die sind wirklich aus. Weiß nicht ganz wie ich das checken soll. Aber der Code ist genau gleich aufgebaut wie beim Abzug. public void RespawnPlayer() { //leben abziehen leben = leben - 1; //Herzanzeige for (var i = 0; i < hearts.Length; i++) { hearts[i].enabled = leben > i; } //lebensanzeige aktualisieren lebenText.text = leben.ToString(); //Überprüfen ob Spieler noch Leben hat if (leben > 0) { //falls ja -> respawn Player.transform.position = currentCheckpoint.transform.position; } else { //falls nein -> Spielende Time.timeScale = 0.0f; gameoverscreen.Setup(); } } public void FindHeart() { //leben addieren leben = leben + 1; //Herzanzeige for (var i = 0; i < hearts.Length; i++) { hearts[i].enabled = leben > i; } //lebensanzeige aktualisieren lebenText.text = leben.ToString(); } EDIT: Ich sehe gerade, die RespawnPlayer()-Methode sollte ich noch mehr aufteilen 🤐
×
×
  • Create New...