Jump to content
Unity Insider Forum

Singular

Members
  • Content Count

    46
  • Joined

  • Last visited

Community Reputation

0 Neutral

About Singular

  • Rank
    Advanced Member
  • Birthday 12/08/1987

Profile Information

  • Gender
    Male
  • Location
    Königswinter

Recent Profile Visitors

148 profile views
  1. So krankheitsbedingt, habe ich es gerade erst geschafft mich mal da dran zu setzen. Keine Ahnung worin der Fehler genau lag aber jetzt ist er weg. Habe es gemacht wie du gesagt hast und habe den Button gelöscht und aus einem Funktionierenden ersetzt. Jetzt geht's. Ich danke dir.
  2. Werde ich heute Abend mal ausprobieren. Wenn der Fehler bleibt, muss ich wohl nochmal alles genau durchgehen, was ich in Unity gemacht habe und wo der Fehler sich eingeschlichen hat.
  3. Okay... ich habe den Fehler gefunden. Passiert wahrscheinlich auch nur, wenn man Objecte aus dem Asset Store nutzt. Mein Spieler hatte mehrere Collider. Ich habe ihm selber einen Mesh Collider gegeben aber in einem der Childs waren auch nochmal mehrere Collider. Als ich die gelöscht habe hat es so geklappt wie es sein soll... zumindest als ich es in die Start Methode geschrieben habe^^ Danke für die Hilfe! P.S.: Bitte den Inspektor hier Ignorieren ich bekomme ihn nicht aus dem Beitrag gelöscht. Habe den Beitrag von meiner Frage zurück zu der Nachricht oben geändert.
  4. Zur Abwechslung mal wieder ein etwas anderes Thema, was mir gerade Probleme macht. Ich scheine die Physics.IgnoreCollision noch nichts ganz begriffen zu haben. Ich nutze sie an mehreren stellen ab sie wird einfach ignoriert... obwohl er doch etwas anderes Ignorieren soll... Mein Projektil hat einen Collider als Trigger. public class ProjectileMovement : MonoBehaviour { public float projectileSpeed = 2f; private Transform tr; public int damage; public GameObject hit; public GameObject erzeuger; void Start() { Physics.IgnoreCollision(erzeuger.GetComponent<Collider>(), GetComponent<Collider>()); tr = GetComponent<Transform>(); Destroy(gameObject, 5); } void Update() { tr.position += tr.up * projectileSpeed * Time.deltaTime; } void OnTriggerEnter(Collider collision) { Collider c = collision; if (c.gameObject == erzeuger) { Physics.IgnoreCollision(c, GetComponent<Collider>()); } else if (c.gameObject.GetComponent<ProjectileMovement>() == true) { Physics.IgnoreCollision(c, GetComponent<Collider>()); } else { try { c.gameObject.GetComponent<Health>().TakeDamage(damage); } catch { } } OnHit(); Destroy(gameObject); } void OnHit() { GameObject h = Instantiate(hit, tr.position, tr.rotation); Destroy(h, 0.5f); } }
  5. Ich sehe gerade ich habe mich noch gar nicht bedankt. Du hast Direkt zwei meiner Probleme gelöst.^^ Ich liebe Listen Vielen Dank!
  6. Kann ich gerne machen... aber sei gewarnt und zieh den Kopf ein bevor du erschlagen wirst Nur zum Verständnis: "Kosten" gibt immer die Kosten für die nächste Aufwertung an. laserDamageKosten ist also der Preis um dem Laser mehr Schaden zu geben. "LevelC" = Level Current - Die Stärke, auf dem sich ein Upgrade derzeit befindet. laserDamageLevelC ist 1, da es derzeit 1 Schaden macht. "LevelN" = Level Next - Die Stärke auf der nächsten Stufe bei laserDamageLevelN also 2. Dann noch ganz kurz zu meinem Array für jede Aufwertung: laserDamageUP[0] = 0; Das derzeitige Level eines Upgrades. {get & set} (in diesen bereichen wird geschrieben und gelesen) laserDamageUP[1] = 150; Die kosten für die nächste Stufe (also in diesem Fall von 0 auf 1) {get & set} laserDamageUP[2] = 100; Die Preissteigerung pro gekauftes Level. Nach dem Kauf wird also [1] = [1] + [2] gerechnet {get} laserDamageUP[3] = 1; Die Änderung an der Spielmechanik also in diesem Fall bekommt der Spieler +[3] Schaden pro Level {get} laserDamageUP[4] = 0; Das Maximale Level für dieses Upgrade, wobei 0 keine Einschränkung ist. Und wenn du jetzt noch nicht erschlagen bist, dann sei es jetzt : public class TextManager : MonoBehaviour { //Diese 4 DataBases sind alles Scriptable Objects. Damit über die Level hinweg, die Upgrades gespeichert und mitgenommen werden können. public UpdateDataBase u; public WeaponsDataBase w; public EngineDataBase e; public SpezialDataBase s; public Text laserDamageKosten; public Text laserDamageLevelC; public Text laserDamageLevelN; public Text laserECKosten; public Text laserECLevelC; public Text laserECLevelN; public Text laserSpezialKosten; public Text laserSpezialLevelC; public Text laserSpezialLevelN; public Text raketeDamageKosten; public Text raketeDamageLevelC; public Text raketeDamageLevelN; public Text raketeAmmoMaxKosten; public Text raketeAmmoMaxLevelC; public Text raketeAmmoMaxLevelN; public Text raketeSpezialKosten; public Text raketeSpezialLevelC; public Text raketeSpezialLevelN; public Text raketeTurnKosten; public Text raketeTurnLevelC; public Text raketeTurnLevelN; public Text raketeReachKosten; public Text raketeReachLevelC; public Text raketeReachLevelN; public Text mineDamageKosten; public Text mineDamageLevelC; public Text mineDamageLevelN; public Text mineAmmoMaxKosten; public Text mineAmmoMaxLevelC; public Text mineAmmoMaxLevelN; public Text mineSpezial1Kosten; public Text mineSpezial1LevelC; public Text mineSpezial1LevelN; public Text mineReachKosten; public Text mineReachLevelC; public Text mineReachLevelN; public Text mineSpeedKosten; public Text mineSpeedLevelC; public Text mineSpeedLevelN; private void Start() { //Ich weiß wäre nicht nötig, wenn ich es schon in der Update Methode habe aber ich hatte versucht, ob der Fehler dann weg ist... UpdateTextLaser(); UpdateTextRaketen(); UpdateTextMinen(); } private void Update() { UpdateTextLaser(); UpdateTextRaketen(); UpdateTextMinen(); } public void UpdateTextLaser() { float fx; float f; //1 //Etwas zur Übersicht: Die Zeilen sind immer gleich aufgebaut, welcher Text aktualisiert werden soll. Kosten, LevelC, LevelN laserDamageKosten.text = u.laserDamageUP[1].ToString(); laserDamageLevelC.text = w.laserDamage.ToString(); f = (w.laserDamage + u.laserDamageUP[3]); laserDamageLevelN.text = f.ToString(); //2 laserECKosten.text = u.laserECUP[1].ToString(); laserECLevelC.text = w.laserEC.ToString("#.0"); fx = u.laserECUP[3] * 0.1f; f = (w.laserEC + fx); laserECLevelN.text = f.ToString("#.0"); //3 if (u.laserSpezialUP[0] == 1) { laserSpezialKosten.text = "X"; laserSpezialLevelN.text = "X"; laserSpezialLevelC.text = "2"; } else { laserSpezialKosten.text = u.laserSpezialUP[1].ToString(); laserSpezialLevelN.text = "2"; laserSpezialLevelC.text = "1"; } } public void UpdateTextMinen() { float f; //1 mineDamageKosten.text = u.mineDamageUP[1].ToString(); mineDamageLevelC.text = w.mineDamage.ToString(); f = (w.mineDamage + u.mineDamageUP[3]); mineDamageLevelN.text = f.ToString(); //2 mineAmmoMaxKosten.text = u.mineMaxAmmoUP[1].ToString(); mineAmmoMaxLevelC.text = w.minesAmmoMax.ToString(); f = (w.minesAmmoMax + u.mineMaxAmmoUP[3]); mineAmmoMaxLevelN.text = f.ToString(); //3 if (u.mineSpezial1UP[0] == 1) { mineSpezial1Kosten.text = "X"; mineSpezial1LevelN.text = "X"; mineSpezial1LevelC.text = "1"; } else { mineSpezial1Kosten.text = u.mineSpezial1UP[1].ToString(); mineSpezial1LevelN.text = "1"; mineSpezial1LevelC.text = "0"; } //4 mineReachKosten.text = u.mineReachUP[1].ToString(); mineReachLevelC.text = w.mineReach.ToString(); f = (w.mineReach + u.mineReachUP[3]); mineReachLevelN.text = f.ToString(); //5 mineSpeedKosten.text = u.mineSpeedUP[1].ToString(); mineSpeedLevelC.text = w.mineSpeed.ToString(); f = (w.mineSpeed + u.mineSpeedUP[3]); mineSpeedLevelN.text = f.ToString(); } public void UpdateTextRaketen() { float f; //1 raketeDamageKosten.text = u.raketeDamageUP[1].ToString(); raketeDamageLevelC.text = w.missileDamage.ToString(); f = (w.missileDamage + u.raketeDamageUP[3]); raketeDamageLevelN.text = f.ToString(); //2 raketeAmmoMaxKosten.text = u.raketeMaxAmmoUP[1].ToString(); raketeAmmoMaxLevelC.text = w.missileDamage.ToString(); f = (w.missileAmmoMax + u.raketeMaxAmmoUP[3]); raketeAmmoMaxLevelN.text = f.ToString(); //3 if (u.raketeSpezialUP[0] == 1) { raketeSpezialKosten.text = "X"; raketeSpezialLevelN.text = "X"; raketeSpezialLevelC.text = "1"; } else { raketeSpezialKosten.text = u.raketeSpezialUP[1].ToString(); raketeSpezialLevelN.text = "1"; raketeSpezialLevelC.text = "0"; } //4 raketeTurnKosten.text = u.raketeTurnUP[1].ToString(); raketeTurnLevelC.text = w.missileTurnspeed.ToString(); f = (w.missileTurnspeed + u.raketeTurnUP[3]); raketeTurnLevelN.text = f.ToString(); //5 raketeReachKosten.text = u.raketeReachUP[1].ToString(); raketeReachLevelC.text = w.missileReach.ToString(); f = (w.missileReach + u.raketeReachUP[3]); raketeReachLevelN.text = f.ToString(); } }
  7. Nein, weiß ich leider nicht, aber... ...das was passiert, wenn ich das in die Konsole reinschaue ist, dass er mit LaserDamage: 150 ausgibt. Das sind die korrekten kosten, die mir angezeigt werden müssten.
  8. void Update() { UpdateTextLaser(); UpdateTextRaketen(); UpdateTextMinen(); } Als hättest du mir meinen Code geklaut . Ich glaube auch nicht, dass dort der Fehler liegt...
  9. (Vorne weg, ich war jetzt nicht sicher ob das Problem mein Script ist oder die UI. Verschiebt den Thread wenn er eher zur UI gehört) Hallo Leute, ich habe ein kleines Problem und komme einfach nicht dahinter wo mein Fehler liegt. Ich habe sogar an einzelnen stellen den selben Code (mit anderen Variablen) verwendet und dort klappt es. Ich habe ein Upgrade Menü erstellt in dem der Spieler die Möglichkeit hat Punkte auszugeben um sein Raumschiff zu verbessern in einzelnen Bereichen. Funktioniert auch alles wunderbar. Jetzt ist der Fehler das meine Texte nicht immer aktualisiert werden. Der einfachhalt halber habe ich die Aktualisierung zunächst in die Update Methode reingeschmissen, damit ich das nicht jedem Knopf zuweisen muss. Das mache ich später. Um es euch besser zeigen zu können mal hier ein paar Screenshots: Sobald ich das Menü öffne werden die Kosten für die Aufwertung nicht angezeigt. Sobald ich jedoch ein Update gekauft habe: werden mir die kosten für die nächste Stufe angezeigt... wenn ich jetzt das Menü zu den Raketen wechsle und wieder zurück komme, wieder selbes Problem. Der Witz ist, den selben Code verwende ich auch für die Minen und die Raketen. Bei den Raketen das selbe Problem. Bei den Minen nicht. da funktioniert alles einwandfrei. Hier noch der Code. Wie gesagt steht alles in der Update Methode. public void UpdateTextLaser() { float fx; float f; laserDamageKosten.text = u.laserDamageUP[1].ToString(); //u ist meine UpgradeDataBase. Ein Scriptable Object, welches die Daten bezüglich Kosten für Aufwertgunen, derzeitiges Level usw. speichert. // Wobei [1] die kosten für die nächste Stufe sind. Diese werden geändert, wenn die Aufwertung gekauft wird. [...] } public void UpdateTextMinen() { float fx; float f; mineDamageKosten.text = u.mineDamageUP[1].ToString(); [...] }
  10. Wie sehen denn die Einstellungen im Inspektor aus? Normalerweise kannst du ohne Probleme Objekte Dublizieren und sie agieren eigenständig. Schau mal nach ob du versehentlich etwas im Inspektor geändert hast. Andere Frage. Funktioniert es nur bei dem einen nicht? Also du hast gebiet 1 und gehst als Mensch rein und es geht und du hast Gebiet 2 wo du als Mensch reingehst und es geht nicht oder wie darf ich das verstehen?
  11. Okay. Was ist denn die bessere Lösung. Ich denke mal für mein Beispiel oben ist ein Array besser. Wann macht es dann mehr Sinn eine Liste zu nehmen? Wenn ich beispielsweise schaue welche Objekte in der nähe meines Objektes sind (OverlappedSphere) speichere ich das auch in einem Array. Macht dann dort eine Liste mehr Sinn?
  12. Ahhhhhhles klar. Ich bin davon ausgegangen dass ein Array, wo nicht vorgegeben ist wie lang er ist auch wachsen kann. Wenn ich den Array zwischendrin wieder "null" setze und dann wieder neu befüllen, kann er dann wachsen bzw. Schrumpfen?
  13. Hallo zusammen, dieses Mal eine relativ simple Sache, die mir aber gerade Kopfzerbrechen verursacht auf deren Lösung ich gerade einfach nicht komme. Ich möchte, dass zum Beginn meines Spiels nach einer zufälligen Zeit der erste Gegner auftaucht. Diese Zeit steht in einem ein Dimensionalen Array. Allerdings kann ich schon die erste Zahl des Arrays nicht füllen. Entweder bin ich gerade zu Müde oder ich habe etwas grundlegendes nicht verstanden: [...] private int i; private int[] rnd; private bool end; void Awake() { rnd[i] = Random.Range(2, 5); //für diese Zeile kommt bereits der Fehler i++; rnd[i] = Random.Range(5, 10); i++; rnd[i] = Random.Range(10, 18); i++; rnd[i] = Random.Range(18, 24); i++; rnd[i] = Random.Range(24, 30); i++; rnd[i] = Random.Range(30, 38); } void Start() { gameManager = GetComponent<GameManager>(); i = 0; } [...] Ich bekomme die Fehlermeldung "NullReferenceException: Object reference not set to an instance of an object"
  14. Habe meinen Code Mal Komplett eingefügt. Hat jemand eine Ahnung, wo mein Fehler liegt, bzw wie ich die Line zwischen Punkt 2 und 3 nicht rendern lasse? Und wie gesagt das Ziel ist immer der gleiche Punkt. da geht es aber eher um mein Verständnis dieser gewählten Punkte.
  15. public class ShotLaser : MonoBehaviour { private LineRenderer lineRenderer; public Transform spawnPlaceLeft; public Transform spawnPlaceRight; public Transform noTargetLeft; public Transform noTargetRight; private Vector3 destinationLeft; private Vector3 destinationRight; private Transform tr; private float lasertimerMax = 1.5f; private float laserEC = 5f; private float lasertimer = 3f; private float laserSchaden = 1f; private bool leftHit; private bool rightHit; // Start is called before the first frame update void Start() { tr = GetComponent<Transform>(); lineRenderer = GetComponent<LineRenderer>(); lineRenderer.startWidth = 0.3f; lineRenderer.endWidth = 0.3f; } // Update is called once per frame void Update() { lineRenderer.SetPosition(0, spawnPlaceLeft.position); lineRenderer.SetPosition(3, spawnPlaceRight.position); if (lasertimer < lasertimerMax) //Dafür da um zwischen den Schüssen etwas Zeit zu haben um nicht dauerhaft schießen zu können. { lasertimer += Time.deltaTime; } if (leftHit) { Invoke("ClearTargets", 0.15f); //@Sascha: Ja ich weiß du und Invoke werden keine Freunde aber ein Problem nach dem anderen ;) } else { lineRenderer.SetPosition(1, spawnPlaceLeft.position); // Punkt 1 ist der Zielpunkt für die Linke Waffe lineRenderer.SetPosition(0, spawnPlaceLeft.position); // Punkt 0 ist Spawn der Linie für die Linke Waffe } if (rightHit) { Invoke("ClearTargets", 0.15f); // Same } else { lineRenderer.SetPosition(2, spawnPlaceRight.position); // Punkt 2 ist der Zielpunkt für die Linke Waffe lineRenderer.SetPosition(3, spawnPlaceRight.position); // Punkt 3 ist Spawn der Linie für die Linke Waffe } if (rightHit == false && leftHit == false) { lineRenderer.enabled = false; } else { lineRenderer.enabled = true; } LaserShot(); } private void LaserShot() { if (Input.GetKey(KeyCode.LeftControl) && lasertimer >= lasertimerMax) { if (GetComponent<PlayerMovement>().EC(laserEC)) { lasertimer = 0; RaycastHit hit1; if (Physics.Raycast(spawnPlaceLeft.position, tr.forward, out hit1, 50)) { try { hit1.collider.GetComponent<Health>().TakeDamage(laserSchaden); } catch { } leftHit = true; destinationLeft = hit1.point; lineRenderer.SetPosition(1, destinationLeft); } else { leftHit = true; lineRenderer.SetPosition(1, noTargetLeft.position); } RaycastHit hit2; if (Physics.Raycast(spawnPlaceRight.position, tr.forward, out hit2, 50)) { try { hit2.collider.GetComponent<Health>().TakeDamage(laserSchaden); } catch { } rightHit = true; destinationRight = hit2.point; lineRenderer.SetPosition(3, destinationRight); } else { rightHit = true; lineRenderer.SetPosition(2, noTargetRight.position); } } } } // Hier soll nur aufgeräumt werden für den nächsten Schuss private void ClearTargets() { leftHit = false; lineRenderer.SetPosition(1, spawnPlaceLeft.position); rightHit = false; lineRenderer.SetPosition(2, spawnPlaceLeft.position); // hier nehme ich wieder "Left" um zu verhindern, dass eine Linie zwischen beiden Punkten Sichtbar ist (Wenn auch nur für kurze Zeit) } }
×
×
  • Create New...