Jump to content
Unity Insider Forum

Kojote

Members
  • Gesamte Inhalte

    1.475
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    10

Alle erstellten Inhalte von Kojote

  1. Kojote

    Woltlab Forum zu verkaufen

    Grüße! Hätte einen kompletten WoltLab-Account inkl. aller Plugins zu verkaufen. Die Lizenz ist eine WoltLab Suite Forum 5.0 Lizenz. Folgende Plugins sind in meinem Account enthalten: WoltLab Suite Forum (89,99 €) woltlab.com/purchase/ Discord-Widget-Box (5,95 €) pluginstore.woltlab.com/file/2809-discord-widget-box/ Modern Shoutbox (3,99 €) pluginstore.woltlab.com/file/1584-modern-shoutbox/ Wer War Online? (2,95 €) pluginstore.woltlab.com/file/2458-wer-war-online/ Standard Avatare (2,98 €) pluginstore.woltlab.com/file/2562-standard-avatare-3-0/ Automatische Benachrichtigung (2,99 €) pluginstore.woltlab.com/file/1…ische-benachrichtigungen/ Account-Switcher/ Benutzer verlinken (2,98 €) pluginstore.woltlab.com/file/1…tcher-benutzer-verlinken/ Erweiterte Konversationen (Chat-System/cChat) (19,99 €) pluginstore.woltlab.com/file/2…tionen-chat-system-cchat/ Erweitertes Smiley System (4,95 €) pluginstore.woltlab.com/file/2275-erweitertes-smiley-system/ Mobile Einstellungen (2,95 €) pluginstore.woltlab.com/file/2173-mobile-einstellungen/ Ankündigungsbox 2 (3,99 €) pluginstore.woltlab.com/file/1596-ank%C3%BCndigungsbox-2/ Summa Summarum: 143,71 € Für alles zusammen stelle ich mir 100,00 € vor, jedoch lasse ich mich auch gern herunter handeln, macht mir ein gutes Angebot! Wie gesagt verkaufe ich den gesamten Account. Verkauf ausschließlich über PayPal. Sobald das Geld bei mir eingegangen ist bekommt ihr die Zugangsdaten. Screenshot des Accounts, dass er auch existiert über PN. Grüße Kojote
  2. Kojote

    Text Farbwechsel

    Grüße! Hier ein kleines Script mit dem ein UI-Text einen Farbwechsel vollführt. Das Farbspektrum kann im Bereich RGB angepasst werden. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /************************************* * Kojote - 21.07.2018 * https://forum.unity-community.de *************************************/ public class Text_Zufallsfarbe : MonoBehaviour { [Header("Min. und Max. von Rot")] [Range(0, 255)] public int minRot; [Range(0, 255)] public int maxRot; [Header("Min. und Max. von Gelb")] [Range(0, 255)] public int minGelb; [Range(0, 255)] public int maxGelb; [Header("Min. und Max. von Blau")] [Range(0, 255)] public int minBlau; [Range(0, 255)] public int maxBlau; [Header("Startfarbe für alle Texte")] public Color32 colStart; private Color32 colZiel; [Header("Texte zum Farbwechseln")] public Text[] texte = new Text[0]; [Header("Farbwechsel bei Spielstart?")] public bool farbwechselStart = true; private bool farbeWechseln = false; [Header("Farbwechselgeschwindigkeit")] private float geschwindigkeit = 0.5f; private float startZeit; void Start() { if (texte.Length == 0) { Debug.Log("FEHLER: Keine Texte zum Farbwechsel angegeben im GameObject: " + this.gameObject.name); return; } else { for (int i = 0; i < texte.Length; i++) { texte[i].color = new Color32(colStart.r, colStart.g, colStart.b, 255); } } if (minRot > maxRot) { Debug.Log("FEHLER: Min. Rot ist größer als Max. Rot in GameObject: " + this.gameObject.name); return; } if (minGelb > maxGelb) { Debug.Log("FEHLER: Min. Gelb ist größer als Max. Gelb in GameObject: " + this.gameObject.name); return; } if (minBlau > maxBlau) { Debug.Log("FEHLER: Min. Blau ist größer als Max. Blau in GameObject: " + this.gameObject.name); return; } if (((int)colStart.r >= minRot & (int)colStart.r <= maxRot) & ((int)colStart.g >= minGelb & (int)colStart.g <= maxGelb) & ((int)colStart.b >= minBlau & (int)colStart.b <= maxBlau)) { // Alle ingestellten Startparameter stimmen! } else { Debug.Log("FEHLER: Die Startfarbe ist außerhalb des Bereiches das für RGB angegeben wurde. GameObject: " + this.gameObject.name); return; } if (farbwechselStart == true) { startZeit = Time.time; FarbwechselAktivieren(); } } private void Update () { if (farbeWechseln == true) { FarbeWechseln(); } } private void FarbeWechseln() { float t = (Time.time - startZeit) * geschwindigkeit; foreach (Text text in texte) { text.color = Color32.Lerp(colStart, colZiel, t); } if (t >= 1) { startZeit = Time.time; colStart = colZiel; ZufallsfarbeErmitteln(); } } public void FarbwechselAktivieren() { ZufallsfarbeErmitteln(); farbeWechseln = true; } public void FarbwechselDeaktivieren() { farbeWechseln = false; } private void ZufallsfarbeErmitteln() { colZiel = new Color32(((byte)Random.Range(minRot, maxRot)), ((byte)Random.Range(minGelb, maxGelb)), ((byte)Random.Range(minBlau, maxBlau)), 255); } } Grüße von Kojote
  3. Kojote

    XML

    Grüße! Ich sitz gerade an einer XML-Frage, zu dieser soll eine DTD erzeugt werden. Das tolle, nach einer halben A4 Seite soll ich DTD und die verlinkung dahin verstehen, wollt mal fragen, ob ihr mir sagen könnt, ob das so richtig ist. XML: <?xml version="1.0" encoding="utf-8" ?> <!-- XML-Knoten --> <!DOCTYPE kartei [ <!ENTITY kartei SYSTEM "Kartei.dtd"> <!ENTITY autor "Autor"> ]> <kartei> <karte sachgebiet="XML"> <stichwort>XML-Element</stichwort> <abstract> <![CDATA[ <name>Start-Tag - Inhalt - End-Tag</name> ]]> </abstract> <autor>&autor;</autor> </karte> </kartei> DTD: <?xml encoding="UTF-8"?> <!ELEMENT kartei (karte)> <!ATTLIST kartei xmlns CDATA #FIXED ''> <!ELEMENT karte (stichwort,abstract,autor)> <!ATTLIST karte xmlns CDATA #FIXED '' sachgebiet NMTOKEN #REQUIRED> <!ELEMENT stichwort (#PCDATA)> <!ATTLIST stichwort xmlns CDATA #FIXED ''> <!ELEMENT abstract (#PCDATA)> <!ATTLIST abstract xmlns CDATA #FIXED ''> <!ELEMENT autor (#PCDATA)> <!ATTLIST autor xmlns CDATA #FIXED ''> Grüße von Kojote
  4. Kojote

    Unity Build Linux

    Grüße! Ich grüble schon den Morgen über, ob ich mein Spiel auch für Linux bereitstelle. Im Build gibt es ja die Möglichkeit hierfür. Frage wäre: Gibt es hier irgendetwas zu beachten oder kann ich einfach ein Build erstellen? Konnte bisher nichts über google finden, was man anderweitig beachten müsste. Rein bei Controllerunterstützung und Co. müsste man aufpassen. Aber Controller würde in meinem Fall entfallen, da das Spiel eine reine Maussteuerung hat. Grüße von Kojote
  5. Kojote

    Licht ausgrenzen

    Grüße! Mal ne Frage ich habe eine Fackel, welches gebackenes Licht hat. Unter "Culling Mask" habe ich eingestellt, dass der Layer "Kein_Licht" auch kein Licht abbekommen soll. Dann hätten wir noch ein GameObjekt, welches einen Layer trägt mit "Kein_Licht". Eigentlich sollte dieses GameObjekt doch nun kein Licht mehr von der Fackel bekommen. Tut es jedoch immer noch. Habt ihr eine Idee wo der Fehler sein könnte? Ach ja, die Scene neu berechnet habe ich schon, kein Unterschied. Grüße von Kojote EDIT: OK, wie ich heraus finden konnte ist es ein seit 3 Jahren bekanntes Problem, dass "Culling Mask" Probleme mit Baking Light hat und hier bei der Erstellung der Lightmaps das "Culling Mask" ignoriert wird. Eine Lösung habe ich jedoch noch nicht gefunden. Einzige die ich gerade austeste ist, alles was nicht beleuchtet werden soll und einen eigenen Glow hat, vor der Lightmap Berechnung deaktivieren und hinterher wieder aktivieren. Mal sehen was raus kommt. EDIT 2: Hat natürlich nicht geklappt! -,- EDIT 3: Wer den selben Fehler hat, ich habe durch "Anchor Override" etwas erreichen können. Nutzt dies bei den Flächen die falsch beleuchtet sind und holt euch die Lichtinformationen aus einer Ecke die eher passen. Andere Möglichkeit sehe ich jetzt nicht und da der Bug seit Unity 5.0.0 ist und bisher nicht gefixt wurde, bezweifle ich, dass demnächst eine Lösung kommt.
  6. Kojote

    Asynchrones Laden

    Grüße! Ich habe mittlerweile mehrere Scenen im Spiel und einen Ladesteuerung, die aktiv wird, wenn eine Scene geladen wird. Die Ladesteuerung lädt die nächste Scene asynchron, im Ladebildschirm wird der Fortschitt angezeigt. Im Hintergrund lasse ich ein Screenshot einblenden, so wirds dem User nicht langweilig.^^ Spaß beiseite, was mir aufgefallen ist, bei "normal" großen Szenen, wird die Scene ganz normal ausgeblendet, der Screenshot wird eingeblendet, dir Fortschrittsanzeige wandert nach rechts und sobald das asynchrone Laden beendet ist, wird der Screenshot ausgeblendet und die neue Scene eingeblendet. So, bis hier her alles OK. Ich habe aber für das Intro eine recht große Szene, was hier anders ist, der Screenshot wird ausgeblendet, dann ist noch gut 5 - 8 Sekunden der Ladebalken zu sehen und erst dann wird die neue Scene eingeblendet. Was ist hier der Unterschied? Ich Frage ja extra in der Steuerung ab, ob das asynchrone Laden beendet ist und erst dann wird der Screen ausgeblendet. Was macht Unity nach dem Befehl die Szene zu starten noch? Hier mal der Code: private IEnumerator Anzeige() { // Ladebildschirm aktivieren ladebildschirm.SetActive(true); // Bildschirm ausblenden MOTR_System_Bildschirmblenden.BildschirmAusblendenCallback(); while (MOTR_System_Bildschirmblenden.callbackCheck == false) { yield return new WaitForFixedUpdate(); // Warten bis das Ausblenden fertig ist } MOTR_System_Bildschirmblenden.callbackCheck = true; // Auf Startwert zuruecksetzen // Hintergrundbild einblenden tmp = loadingHintergrundbild.color; while (loadingHintergrundbild.color.a < 0.98f) { tmp.a += 0.025f; loadingHintergrundbild.color = tmp; yield return new WaitForFixedUpdate(); } tmp.a = 1f; loadingHintergrundbild.color = tmp; // Warten bis der Ladezyklus beendet ist do { yield return new WaitForFixedUpdate(); } while (async.progress < 0.9f); // Hintergrundbild ausblenden tmp = loadingHintergrundbild.color; while (loadingHintergrundbild.color.a > 0.05f) { tmp.a -= 0.025f; loadingHintergrundbild.color = tmp; yield return new WaitForFixedUpdate(); } tmp.a = 0f; loadingHintergrundbild.color = tmp; async.allowSceneActivation = true; } private IEnumerator LoadingScreen(int scene) { yield return new WaitForSeconds(1.5f); ladebildschirm.SetActive(true); async = SceneManager.LoadSceneAsync(scene); async.allowSceneActivation = false; do { float progress = Mathf.Clamp01(async.progress / 0.9f); slider.value = progress; yield return null; } while (!async.isDone); } private IEnumerator LoadingScreen(string scene) { yield return new WaitForSeconds(1.5f); ladebildschirm.SetActive(true); async = SceneManager.LoadSceneAsync(scene); async.allowSceneActivation = false; do { float progress = Mathf.Clamp01(async.progress / 0.9f); slider.value = progress; yield return null; } while (!async.isDone); } Grüße von Kojote EDIT: OK, macht Sinn, er lädt ja asynchron ja nur bis zu 90%, die restlichen 10% macht er dann, wenn "allowSceneActivision" auf True gesetzt wird. Problem ist halt, die letzten 10% dauern noch ein paar Sekunden. Von daher sieht das etwas unschön aus, wenn das Hintergrundbild verschwindet und es noch einige Sekunden dunkel bleibt, bis endlich das neue Level zu 100% geladen ist. Ich kenne jetzt nur zwei Abfragemethoden bwzüglich der Scenenladung: !async.isDone und async.progress < 0.9f Ersteres kann ich nicht zum abfragen meines Hintergrundbildes nehmen, weil er nun mal erst fertig ist, wenn er nun mal fertig ist und das ist 100%, vorher erreiche ich hier kein True um den Hintergrund auszublenden. Das untere nutze ich schon, aber hier blendet er eben das Bild zu früh aus. Man könnte noch trixen und vor dem ausblenden 2 - 3 Sekunden Wartezeit einsetzen, würde für die eine Scene funktionieren. Jedoch bei anderen Scenen die kleiner und schneller geladen sind, ist das Mist, da die wiederrum diese Wartezeit nicht brauchen und so das Bild nicht komplett ausgeblendet werden würde. Zumal, mein Rechner braucht diese Zeit, bei schnelleren Rechnern müsste man mehr oder weniger Zeit einsetzen. Habt ihr ne Idee?
  7. Grüße! Ich hab ein kleines Problem mit Prefabs, ich habe mein GUI als Prefab abgelegt und nun ist alles im Inspector fett gestellt. Im Prefeb sehe ich, dass alle Verbindungen verschwunden sind, warum? Ich habe nun schon mehrfach versucht über Apply das Prefab zu aktualisieren, aber es bringt nichts, er aktualisiert es im Prefab nicht. Kann mir einer sagen, was ich falsch mache? Kojote
  8. Grüße! Hab ein kleines Problem mit meinr Musiksteuerung, hier mal der Code: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Audio; public class MOTR_System_Audio_Mixer_Steuerung : MonoBehaviour { public static AudioSource musikAudioSource; public static AudioMixer masterMixer; public static float masterVolume; public static float sfxVolume; public static float musikVolume; private static MOTR_System_Audio_Mixer_Steuerung singleton; private void Awake() { if (singleton) { Destroy(gameObject); } else { singleton = this; DontDestroyOnLoad(this); } musikAudioSource = GameObject.FindWithTag("MainCamera").GetComponent<AudioSource>(); masterMixer = Resources.Load("Audio/MOTR Audio Mixer", typeof(AudioMixer)) as AudioMixer; } public static void SetMasterVolume(float masterVolume) { MOTR_System_Audio_Mixer_Steuerung.masterVolume = masterVolume; masterMixer.SetFloat("masterVolume", masterVolume); } public static void SetSfxVolume(float sfxVolume) { MOTR_System_Audio_Mixer_Steuerung.sfxVolume = sfxVolume; masterMixer.SetFloat("sfxVolume", sfxVolume); } public static void SetMusikVolume(float musikVolume) { MOTR_System_Audio_Mixer_Steuerung.musikVolume = musikVolume; masterMixer.SetFloat("musikVolume", musikVolume); } public static void SetMusikTrack(AudioClip audioClip) { musikAudioSource.clip = audioClip; } } Problem ist diese Stelle: public static void SetMusikTrack(AudioClip audioClip) { musikAudioSource.clip = audioClip; } In einer Scene übergebe ich den Track, der abgespielt werden soll, dieser Methode. Wenn ich nun die Scene wechsel, blende ich kurz den Master zum Laden aus und wieder ein. Das Musikstück soll somit erhalten bleiben. Problem ist nun, in der neuen ist ja auch schon ein AudioMixer drin. Wenn ich jetzt nicht falsch denke, müsste doch eigentlich nun der AudioMixer der aus der letzten Scene mit genommen wurde aktiv bleiben und der schon vorhandene in der Scene zerstört werden, oder? Das mal zur ersten Frage, könnte die Lösung für Frage zwei sein. Frage zwei wäre, warum vergisst er den AudioClip beim wechseln der Scenen, eigentlich müsste er ihn doch behalten, oder? Grüße Kojote EDIT: Problem wird wohl sein, dass die AudioSource nicht im selben Objekt ist wie meine Audiosteuerung und dadurch erst mal neu gefunden werden muss und es da Probleme gibt. Also müsste die Componente AudioSource mit in das GameObjekt der Mixersteuerung, damit es den Scenenwechsel überlebt. Frage ist nun, wenn ich die AudioSource diesem GameObjekt gebe, wie mache ich das dann mit der Reichweite der Musik? Irgendwann ist mal das Ender der Reichweite, der Musik, auf der Karte erreicht. Deswegen sollte man ja immer dem Charakter die AudioSource geben, damit er sie mit sich herum trägt. 🤔
  9. Kojote

    Occulsion Culling

    Grüße! Sagt mal kann mir mal einer in verständlichen Worten sagen, was diese beiden Einstellungen machen: "Smalest Occular" und "Smallest Hole" Ich habe mich nun schon durch einige Seiten gelesen, aber eine verständliche Antwort was die beiden Punkte machen, konnte ich nicht finden. Dass sie irgendwie die größe der Blauen Felder regeln ja, aber wie genau konnte ich nicht in Erfahrung bringen. Vielen Dank schonmal! Kojote
  10. Das kann viele Ursachen haben, du musst dir auf jeden Fall Android Studio herunter laden, damit arbeiten musst du nicht, du bruacht jedoch den SDK-Manager, hier sind einige GBs herunter zu laden, ohne wirds nichts, da Unity auch die Android-Versionen mit einbezieht und nicht in jeder Version des Android Betriebssystems funktioniert alles. Wie ich schon sagte, arbeiten kann man mit Android Studio nicht und muss man auch nicht.^^ Zum Glück, ich finde das Teil eine Gelungene Katastrophe! Nur das SDK brauchst du. Daran hab ich mir auch bald die Zähne ausgebissen. Es lag im Endeffekt nicht an Andoid Studio, auch nicht an Unity sondern an der JRE Version. Bei mir sind aktiv in Programme(x86): jre1.8.0_161 und unter Programme: jdk1.8.0_144 | jdk-9.0.4 | jre1.8.0_161 | jre-9.0.4 Ob das nun bei dir hilft kann ich nicht sagen. Ich habe auch X Versionen ausprobiert, bis ich eine Kombination fand, die bei mir kompatibel war.
  11. Grüße! Habe ziemlichen Ärger mit Occlusion Culling, die blauen Kästchen die er beim Culling erzeugt, werden erzeugt, Unity ist benutzbar und man kann weiter interagieren. Am Fortschrittssbalken sieht man dass nur ein kleiner Rest fehlt, ca. 95% sind fertig. Danach macht Unity nicht weiter. Geht man in den Task-Manager steht da, dass Unity noch arbeitet, bricht man ab, hängt sich Unity komplett auf. Die Scene ist sehr klein, nur die Scene des Hauptbildschirms. Sollte in wenigen Sekunden fertig berechnet sein, der Fortschrittsbalken geht ziemlich schnell nach hinten, aber immer bei ca. 95% ist Schluss. Habt ihr eine Idee an was es liegen könnte? EDIT: Ach ja, die Stelle wo er sich aufhängt ist: "Computing Occulsion" Grüße von Kojote
  12. Kojote

    Raycast Layer

    Grüße! Ich lese gerade etwas über Layer bei Rays. Ich wollte es gern so machen, dass ein Ray den ich habe nur auf Layer 10 reagiert, er Layer 5 nicht durchdringen kann und alle anderen Layer ignoriert. Kann mir jemand sagen, wie ich das mit Layern hin bekommen? Vielen Dank! Kojote EDIT: Habe ich jetzt gefunden, mit Layermask, klappt nur nicht, er prallt immer noch gegen Collider bzw. Layer die er eigentlich ignorieren sollte: mask = LayerMask.GetMask("UI", "Bodenplatte_zum_Charakter_setzen"); Des weiteren, gibt es ein weiteres Problem. Kann man sagen, dass nach UI schluss ist mit dem Ray? Ich habe das Problem das ich mehrere Slots in meinem UI auswählen kann und der Ray geht einfach durch das UI hindurch. Kann man da was machen? EDIT 2: OK, ich machs nun damit: if (EventSystem.current.IsPointerOverGameObject()) { return; }
  13. Kojote

    Doppelray?

    Hallo! Ich habe bei mir für Charaktere eine Slotauswahl, in der sind die Charaktere hinterlegt. Möchte ein Spieler nun einen Charakter nutzen und auf eine Spielfläche setzen habe ich hier ein kleines Script: private void FixedUpdate() { if (Time.timeScale == 0) { if (zuSetzenderCharakter > 0) { zuSetzenderCharakter = 0; } return; } // Charakter auf dem Spielfeld setzen und bewegen // Wichtig: Sollte der Charakter zwei mal hintereinander angeklickt werden, wird die Ausahl aufgehoben if (Input.GetMouseButtonDown(0) & !Input.GetMouseButtonDown(1) & spielGestartet == false) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit)) { if (hit.collider.gameObject.tag == "Charakter_1") { if (zuSetzenderCharakter != 1) { zuSetzenderCharakter = 1; CharkterAndereCharaktereAbwaehlen(zuSetzenderCharakter); outLineEffect.ChangeOutlineObjectsSingle(charaktere[0]); } else { outLineEffect.ChangeOutlineObjects(new List<GameObject>().ToArray()); zuSetzenderCharakter = 0; } } else if (hit.collider.gameObject.tag == "Charakter_2") { if (zuSetzenderCharakter != 2) { zuSetzenderCharakter = 2; CharkterAndereCharaktereAbwaehlen(zuSetzenderCharakter); outLineEffect.ChangeOutlineObjectsSingle(charaktere[1]); } else { outLineEffect.ChangeOutlineObjects(new List<GameObject>().ToArray()); zuSetzenderCharakter = 0; } } else if (hit.collider.gameObject.tag == "Charakter_3") { if (zuSetzenderCharakter != 3) { zuSetzenderCharakter = 3; CharkterAndereCharaktereAbwaehlen(zuSetzenderCharakter); outLineEffect.ChangeOutlineObjectsSingle(charaktere[2]); } else { outLineEffect.ChangeOutlineObjects(new List<GameObject>().ToArray()); zuSetzenderCharakter = 0; } } else if (hit.collider.gameObject.tag == "Charakter_4") { if (zuSetzenderCharakter != 4) { zuSetzenderCharakter = 4; CharkterAndereCharaktereAbwaehlen(zuSetzenderCharakter); outLineEffect.ChangeOutlineObjectsSingle(charaktere[3]); } else { outLineEffect.ChangeOutlineObjects(new List<GameObject>().ToArray()); zuSetzenderCharakter = 0; } } else if (hit.collider.gameObject.tag == "Charakter_5") { if (zuSetzenderCharakter != 5) { zuSetzenderCharakter = 5; CharkterAndereCharaktereAbwaehlen(zuSetzenderCharakter); outLineEffect.ChangeOutlineObjectsSingle(charaktere[4]); } else { outLineEffect.ChangeOutlineObjects(new List<GameObject>().ToArray()); zuSetzenderCharakter = 0; } } else if (hit.collider.gameObject.tag == "Charakter_6") { if (zuSetzenderCharakter != 6) { zuSetzenderCharakter = 6; CharkterAndereCharaktereAbwaehlen(zuSetzenderCharakter); outLineEffect.ChangeOutlineObjectsSingle(charaktere[5]); } else { outLineEffect.ChangeOutlineObjects(new List<GameObject>().ToArray()); zuSetzenderCharakter = 0; } } else if (hit.collider.gameObject.layer == 10 & zuSetzenderCharakter > 0) { int zaehler = 0; // Verhindert das mehrere Charaktere an die selbe stelle gesetzt werden for (int i = 0; i < charaktere.Length; i++) { if (hit.collider.gameObject.transform.position == charaktere[i].transform.position) { zaehler++; } } if (zaehler == 0) { // Wenn die Bodenplatte nicht belegt ist, kann der Charakter positioniert werden charaktere[zuSetzenderCharakter - 1].transform.position = hit.collider.gameObject.transform.position; // -1 Ausgleich wegen Arry, da es von 0 an rechnet gesetzteCharaktere[zuSetzenderCharakter - 1] = true; // -1 Ausgleich wegen Arry, da es von 0 an rechnet charakterSlot.SlotDeaktivieren(zuSetzenderCharakter); // -1 Ausgleich wegen Arry, da es von 0 an rechnet zuSetzenderCharakter = 0; outLineEffect.ChangeOutlineObjects(new List<GameObject>().ToArray()); if (buttonStart.GetComponent<Button>().interactable == false) { CharakterKontrolle(); } } else if (zaehler == 1 & (charaktere[zuSetzenderCharakter - 1].transform.position == hit.collider.gameObject.transform.position)) { // Ausnnahmeregel, sollte die Bodenplatte angeklickt werden, auf dem der Charakter schon steht, wird die Auswahl aufgehoben outLineEffect.ChangeOutlineObjects(new List<GameObject>().ToArray()); } } } } } Dieses Script sorgt zum einen dazu, den Charakter auf eine Bodenfläche zu setzen, wenn diese nicht belegt ist, zum anderen kann man den Charakter markieren und auf eine andere Fläche setzen. Funktioniert auch ganz gut soweit, habe nur leider einen sporadischen Bug. Genauer gesagt hier: if (Input.GetMouseButtonDown(0) & !Input.GetMouseButtonDown(1) & spielGestartet == false) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); } In diesem Abschnitt wird ein Ray abgeschossen auf eine Spielfläche, ist die Fläche leer, wird der Charakter hiermit positioniert: if (hit.collider.gameObject.layer == 10 & zuSetzenderCharakter > 0) { int zaehler = 0; // Verhindert das mehrere Charaktere an die selbe stelle gesetzt werden for (int i = 0; i < charaktere.Length; i++) { if (hit.collider.gameObject.transform.position == charaktere[i].transform.position) { zaehler++; } } if (zaehler == 0) { // Wenn die Bodenplatte nicht belegt ist, kann der Charakter positioniert werden charaktere[zuSetzenderCharakter - 1].transform.position = hit.collider.gameObject.transform.position; // -1 Ausgleich wegen Arry, da es von 0 an rechnet gesetzteCharaktere[zuSetzenderCharakter - 1] = true; // -1 Ausgleich wegen Arry, da es von 0 an rechnet charakterSlot.SlotDeaktivieren(zuSetzenderCharakter); // -1 Ausgleich wegen Arry, da es von 0 an rechnet zuSetzenderCharakter = 0; outLineEffect.ChangeOutlineObjects(new List<GameObject>().ToArray()); if (buttonStart.GetComponent<Button>().interactable == false) { CharakterKontrolle(); } } else if (zaehler == 1 & (charaktere[zuSetzenderCharakter - 1].transform.position == hit.collider.gameObject.transform.position)) { // Ausnnahmeregel, sollte die Bodenplatte angeklickt werden, auf dem der Charakter schon steht, wird die Auswahl aufgehoben outLineEffect.ChangeOutlineObjects(new List<GameObject>().ToArray()); } Layer 10 ist die Bedingung, dass der Charakter auf diese Bodenplatte gesetzt werden darf. Der Zähler kontrolliert ob eventuell schon ein anderer Charakter darauf steht, wenn nicht, ist der Zähler 0. Er wird gesetzt. Nun sollte eigentlich die Charakterauswahl aufgehoben werden: zuSetzenderCharakter = 0; outLineEffect.ChangeOutlineObjects(new List<GameObject>().ToArray()); Problem ist, sehr selten, wird die Auswahl nicht aufgehoben. Ich dachte erst dass der Zähler anderswo hochgesetzt wird oder der Outline Effekt einen Bug hat, aber Fehlanzeige. Es scheint, dass wenn der Ray abgeschossen wurde und der gesetzt wurde, der Ray entweder zwei mal abgeschossen wird, was ich eher nicht glaube. Alternativ, durch den Tastendruck der Maus, der Vorgang wiederholt wird. Habt ihr eine Idee wie man das verhindern könnte? Grüße Kojote
  14. Kojote

    Fragmente

    Grüße! Ich suche schon seit gestern die Lösung für dieses Problem: https://streamable.com/5g6wh Das Flackern auf der Pyramide als auch auf dem Charakter bekomme ich nicht weg. Merkwürdigerweise, der selbe Charakter macht in einer anderen Scene gar keine Probleme, also kanns nicht am Modell an sich liegen. Ich bin nun alle Einstellungen durch und finde keine Lösung. Habt ihr ne Idee was das sein könnte? Danke schon mal, Kojote EDIT: OK, wo der Fehler nun herkommt, konnte ich heraus bekommen. Cinemachine sorgt auf jeden Fall für die Bildfehler der Textur. Warum, kann ich noch nicht sagen. EDIT 2: So, ich glaube den Fehler konnte ich nun eingrenzen. Eigentlich sind es sogar zwei! 1. Komponente "Cinemachine Virtual Camera", die mag es nicht, wenn man während der Laufzeit "Follow" und "Look At" ändert. 2. Gleiche Komponente "Lookahead Smoothing" verursacht auch Grafikfehler, wenn der Wert zu hoch ist. Hoffe das wars mim am Fehlerursachen. EDIT 3: Zum Großteil sind die Fehler weg, jedoch nicht alle.
  15. Sehr schick, bin begeistert!
  16. Grüße! Kleine Frage, ich habe einen Chrakter mit Animation, dieser funktioniert in anderen Scenen tadelos. Nun habe ich ihn in eine neue Scene gepackt (Prefab) und gestartet. Problem, er kommt aus dem Idle heraus, macht einen halben Schritt, die Animation friert ein und auf einmal geht er zurück in den Idle. Ich habe nun schon das Script auf das nötigste beschränkt, er bekommt nur noch den Befehl zur Animation. Problem bleibt bestehen. Habt ihr ne Idee? Kojote
  17. Wieder mal sehr schön geworden, der Flipper!
  18. Grüße! Ich habe mal wieder mit Winkeln Probleme und komme einfach nicht weiter, hoffe ihr könnt mir helfen, es geht um folgendes. Ein Charakter läuft auf eine sich drehende, zylindrische Spielfläche, der Charkter soll von dieser herunter rutschen, was ich mit einer Kraft über den Ridgidbody mache. Die Rolle von der er herunter rutscht, dreht sich immer nach links. Je nach ob er nun von vorn oder hinten die Rolle betritt, muss ich den Charakter ja nun eine Kraft entweder nach rechts oder links verpassen. Dazu muss ich wissen, in welche Richtung der Charakter läuft und in welche Richtung die Rolle sich dreht. Darum dieses Script: private void AbrutschRichtungBestimmen(GameObject rolle) { Vector3 eulerCharakter = this.gameObject.transform.eulerAngles; Vector3 eulerRolle = rolle.transform.eulerAngles; print(eulerCharakter.z + " " + eulerRolle.z); if (eulerCharakter.z == 0 & eulerRolle.z == 0) { print("1. Chrakter und Rolle schauen Richtung Positiv Z, Rolle nach links " + eulerCharakter.z + " " + eulerRolle.z); } else if ((eulerCharakter.z == 180 | eulerCharakter.z == -180) & (eulerRolle.z == 180 | eulerRolle.z == -180)) { print("2. Chrakter und Rolle schauen Richtung Negativ Z, Rolle nach links " + eulerCharakter + " " + eulerRolle); } else if (eulerCharakter.x == 0 & eulerRolle.x == 0) { print("3. Chrakter und Rolle schauen Richtung Positiv X, Rolle nach links " + eulerCharakter + " " + eulerRolle); } else if ((eulerCharakter.x == -90 | eulerCharakter.x == 270) & (eulerRolle.x == -90 | eulerRolle.x == 270)) { print("4. Chrakter und Rolle schauen Richtung Negativ X, Rolle nach links " + eulerCharakter + " " + eulerRolle); } else if (eulerCharakter.z == 0 & (eulerCharakter.z == 180 | eulerCharakter.z == -180)) { print("5. Chrakter schaut Richtung Positiv Z, Rolle Richtung Negativ Z, Rolle nach rechts " + eulerCharakter + " " + eulerRolle); } else if ((eulerCharakter.z == 180 | eulerCharakter.z == -180) | eulerCharakter.z == 0) { print("6. Chrakter schaut Richtung Negativ Z, Rolle Richtung Positiv Z, Rolle nach links " + eulerCharakter + " " + eulerRolle); } else if (eulerCharakter.x == 0 & (eulerRolle.x == -90 | eulerRolle.x == 270)) { print("7. Chrakter schaut Richtung Positiv X, Rolle Richtung Negativ X, Rolle nach rechts " + eulerCharakter + " " + eulerRolle); } else if ((eulerCharakter.x == -90 | eulerCharakter.x == 270) & eulerRolle.x == 90) { print("8. Chrakter schaut Richtung Negativ X, Rolle Richtung Positiv X, Rolle nach links " + eulerCharakter + " " + eulerRolle); } } Da die Rolle auf dem Spielfeld verschieden liegen kann, gibt es einige Abfragen. Problem ist nun wie komme ich an die Winkel heran? Ich habs nun schon über Quaternions versucht und bin in die Streucher gelandet. Nun wollte ich es mit Euler-Winkeln versuchen, jedoch was ich mache, ich bekomme als Winkel immer 0 zurück, egal wie ich die Objekte am Start platziere. Wollte es gerne an den Globalen Winkeln ausrichten aber komme hier nicht weiter. Habt ihr ne Idee? Was ich auch nicht verstehe, vor der If-Struktur gibt er mir die Werte Richtig aus: (0.0, 270.0, 0.0) (0.0, 90.0, 0.0) (0.0, 180.0, 0.0) (0.0, 0.0, 0.0) (0.0, 90.0, 0.0) (0.0, 90.0, 0.0) Lasse ich mir in der if-Struktur die Werte ausgeben, kommt immer: "1. Chrakter und Rolle schauen Richtung Positiv Z, Rolle nach links 0 0" Vielen Dank schonmal. Kojote EDIT: Hat sich geklärt, Drehwinkel verwechselt. Alles dreht sich doch über die Y-Achse, nicht über Z und X.
  19. Farbe kann man zum Beispiel so ändern: https://docs.unity3d.com/ScriptReference/Material.SetColor.html https://docs.unity3d.com/ScriptReference/Material-color.html Auf RGB Basis: https://docs.unity3d.com/ScriptReference/Color32-operator_Color32.html
  20. Kojote

    Animation Länge

    Grüße! Ich tüftel gerade an einer Splitted-Sprung-Animation. Diese besteht aus den Teilen A - F. A = Einknicken der Beine B = Absprung vom Boden C = Sprungphase nach vorn D = Beine Sprung nach vorn ziehen E = Flugphase nach vorn F = Landen Ich möchte nun die Flugphase variable machen. Dazu müsste ich Phase E in der länge der Animation kontrollieren können. Habt ihr da einen Rat für mich? Da ich den Charkter auch in zwei Geschwindigkeitsstufen habe, kann ich auch nicht nach Zeit gehen, es müsste einen Auslöser geben. Der ihn aus der Schleife wieder heraus holt. Am besten wäre es, dies mit einem Event oder der gleichen zu verbinden, sobald er z.B. einen Abstand zum Boden von 0.2f hat, Loop beenden. EDIT: So, Idee gehabt! Ich habe mal zwischen "JumpTree" und "JumpSplited_F" einen Trigger gesetzt, somit verbleibt der Charakter nun dauerhaft in E. Könnte man nun noch ein Script anfügen, dass den Abstand zum Boden misst, könnte man den Trigger im richtigen Moment aktivieren und so die Landung in Auftrag geben. EDIT 2: Hat sich erledigt.
  21. Cool! Hast du es auch geschafft Querstriche einzufügen? Sieht so aus, ist dies auch in der Klasse enthalten bzw. mit ihr möglich? Findet zumindest keine Referenz die das zu machen scheint.
  22. Was mich am meißten am CC von Unity stört, ist das dieser nur für Zweibeiner genutzt werden kann. Bedingt allein schon durch die Kapsel als Collider ist es beinah unmöglich vernümpftig einen Vierbeiner zu spielen. Hatte mich vor gut einem halben Jahr auch mal an einen CC gesetzt, um dieses Problem zu beheben. Hatte mir den original CC vorgenommen und wollte ihn erweitern, bin jedoch leider irgendwann stecken geblieben. Grund war meißtens der Collider. Entweder hing er fest, verstand nicht mehr wann er Groundet ist oder nicht, Charakter kippte einfach um, oder oder oder. Eine vernümpftige Unterstützung für mehr als zwei Beine wäre ziemlich gut!
×
×
  • Neu erstellen...