Jump to content
Unity Insider Forum

chefselber

Members
  • Content Count

    14
  • Joined

  • Last visited

Community Reputation

0 Neutral

About chefselber

  • Rank
    Member
  1. Das habe ich jetzt gelöst. Vielen Dank für die doch sehr saubere Codelösung. Ich hätte da noch eine Kleinigkeit. Gehört zwar nicht mehr Thread. Und zwar kann ich über eine Auswahlbox die ich aufziehe den Spieler oder mehrere selektieren. Das klappt auch, nur wenn ich dann einen Punkt auf der Karte mit der rechten MT anwähle kann es sein, dass nur mal ein, zwei Spieler dorthin laufen... private void FixedUpdate() { // Scrollen oder neue Position mit rechtem Mausklick Position(); // Angriff??? if ((Angriff_start_bew || Angriff_start) && !angriff_flucht) Angriff(); if (!click.userdragging) // click.cs -- Auswahlbox ; Keine Box aufgezogen dann Einzelselektion { if (Input.GetMouseButton(0)) { switch (cameraRaycaster.layerHit) { case Layer.Begehbar: // Wenn Spieler ausgewählt und klick ins freie Feld ---> abwahl if (Selected) { Selected = false; SelectRect.SetActive(false); } break; case Layer.Spieler: // Einzelselektion if (cameraRaycaster.hit.transform.gameObject.name.ToString() == this.gameObject.name) { if (!Selected) // Wenn nicht ausgewählt dann Auswahlrahmen aktivieren { if (SelectRect == null) SelectRect = Instantiate(Rect, transform.position, Quaternion.Euler(105, 0, 0)); else SelectRect.SetActive(true); Selected = true; break; } if (Selected && Angriff_start) { SelectRect.SetActive(false); Selected = false; break; } } break; default: return; } } if (!Angriff_start_bew && !Angriff_start) { navmeshagent.destination = currentClickTarget; if (navmeshagent.remainingDistance > 4f && navmeshagent.remainingDistance > navmeshagent.stoppingDistance) { animator.SetBool("running", true); navmeshagent.isStopped = false; } else { navmeshagent.isStopped = true; //m_Character.Move(Vector3.zero, false, false); animator.SetBool("running", false); // navmeshagent.destination = Vector3.zero; } } } // Auswahlbox USER is DRAGGING else { //Selected = false; Vector3 screenPos = cam.WorldToScreenPoint(this.transform.position); // Box von links oben aufziehen if (screenPos.x > click.auswahlbox.x && screenPos.x < (click.auswahlbox.x + click.auswahlbox.width) && (Screen.height - screenPos.y) > click.auswahlbox.y && (Screen.height - screenPos.y) < (click.auswahlbox.y + click.auswahlbox.height) // // Box von rechts oben aufziehen || screenPos.x < click.auswahlbox.x && screenPos.x > (click.auswahlbox.x + click.auswahlbox.width) && (Screen.height - screenPos.y) > click.auswahlbox.y && (Screen.height - screenPos.y) > (click.auswahlbox.y - click.auswahlbox.height) // Box von links unten || screenPos.x > click.auswahlbox.x && screenPos.x < (click.auswahlbox.x + click.auswahlbox.width) && (Screen.height - screenPos.y) < click.auswahlbox.y && (Screen.height - screenPos.y) > (click.auswahlbox.y + click.auswahlbox.height) // Box von rechts unten || screenPos.x < click.auswahlbox.x && screenPos.x > (click.auswahlbox.x + click.auswahlbox.width) && (Screen.height - screenPos.y) < click.auswahlbox.y && (Screen.height - screenPos.y) > (click.auswahlbox.y + click.auswahlbox.height) ) { if (!Selected && Input.GetMouseButtonUp(0)) { // Warten(); if (SelectRect == null) SelectRect = Instantiate(Rect, transform.position, Quaternion.Euler(105, 0, 0)); else SelectRect.SetActive(true); Selected = true; } } } und hier die klasse der Auswahlbox... ublic class click : MonoBehaviour { Camera cam; private Vector3 currentMousePosition; private Vector3 startMousePosition; public GUIStyle skin; private Vector2 DragStartPoint; public static bool userdragging = false; /* public delegate void dragger(); dragger dragit; */ public static Rect auswahlbox; // Use this for initialization void Start() { cam = GetComponent<Camera>(); } /// <summary> /// Prüfung ob Wert bei erstem Druck der Maustaste im Vergleich mit aktueller Mausposition sich geändert hat /// </summary> /// <param name="startPoint"></param> /// <param name="actualPoint"></param> /// <returns></returns> private bool Userisdragging(Vector2 startPoint, Vector2 actualPoint) { float x = Mathf.Abs(actualPoint.x - startPoint.x); float y = Mathf.Abs(actualPoint.y - startPoint.y); if (x > 5f || y > 5f) { return true; } else return false; } // Update is called once per frame void Update() { // Maustaste am Anfang gedrückt? if (Input.GetMouseButtonDown(0)) { DragStartPoint = Input.mousePosition; startMousePosition.x = Input.mousePosition.x; startMousePosition.y = Screen.height - Input.mousePosition.y; } // Maustaste aktuell gedrückt?? if (Input.GetMouseButton(0)) { userdragging = Userisdragging(DragStartPoint, Input.mousePosition); } else { userdragging = false; // Dragging stoppen } // Maustaste losgelassen?? Dragging Stop if (Input.GetMouseButtonUp(0)) { DragStartPoint = Input.mousePosition; userdragging = false; } } private void OnGUI() { if (userdragging) { float boxwitdh = Input.mousePosition.x - DragStartPoint.x; float boxheigth = DragStartPoint.y - Input.mousePosition.y; auswahlbox = new Rect(DragStartPoint.x, Screen.height - DragStartPoint.y, boxwitdh, boxheigth); GUI.Box(new Rect(auswahlbox), "", skin); } } } hier noch die Position -Methode! private void Position() { if (Selected) SelectRect.transform.position = Quadpos(transform.position); if (Messung()) // Wenn Player selektiert und unter 0.17 gedrückt wurde { switch (cameraRaycaster.layerHit) { case Layer.Feind: Angriff_start_bew = true; Feindname = cameraRaycaster.hit.transform.name.ToString(); TempGegner = richtigerGegner(Feindname); break; case Layer.Begehbar: if (Angriff_start || Angriff_start_bew) angriff_flucht = true; Angriff_start_bew = false; Angriff_start = false; TempGegner = null; animator.SetBool("Schuss", false); currentClickTarget = cameraRaycaster.hit.point; break; case Layer.Spieler: return; } } else currentClickTarget = currentClickTarget_old; messung = 0; // return; }
  2. Danke. Funktioniert soweit. Einfach und übersichtlich. Jetzt nur noch klären wie ich zähle. Von wo wohin ich gehe. Es gibt mehrere Brücken... Doch wieder bools, Zählerstände weiter leiten.
  3. Ja sieht schon mal besser und kürzer aus. Wie meinst du das ein Area Objekt hinzufügen? Vom Typ Area. Wie ein GameObject?
  4. So ist der Altstand. Mich würde nur interessieren wenn ich 2 spieler drüber schicke ab und zu 3x gezählt wird
  5. hier für die beiden "Boxen" ///////////////////// using System.Collections; using System.Collections.Generic; using UnityEngine; public class Uebertritt : MonoBehaviour { EnemyAI verwalter; // Use this for initialization void Start () { verwalter = GetComponentInParent<EnemyAI>(); } // Update is called once per frame void Update () { } private void OnTriggerEnter(Collider col) { if (col.tag == "Player") { if (this.name.ToString() == "Grenzstein5") { verwalter.grenzstein5_1_betreten = true; verwalter.enemymain_betreten = false; } if (this.name.ToString() == "Enemy_Main") { verwalter.enemymain_betreten = true; verwalter.grenzstein5_1_betreten = false; } } } private void OnTriggerExit(Collider col) { if (col.tag.ToString() == "Player") { if (this.name.ToString() == "Grenzstein5") { verwalter.grenzstein5_1_austritt = true; verwalter.grenzstein5_1_betreten = false; } if (this.name.ToString() == "Enemy_Main") { verwalter.enemymain_austritt = true; verwalter.enemymain_betreten = false; } } } }
  6. using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyAI : MonoBehaviour { public bool enemymain_betreten; public bool grenzstein5_1_betreten; public bool enemymain_austritt; public bool grenzstein5_1_austritt; private bool grenzstein5_1_drinnen; private bool enemymain_drinnen; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (enemymain_betreten) { print ("EnemyMainbetreten!"); enemymain_drinnen = true; } if (grenzstein5_1_betreten) { print("Grenzstein5 betreten"); grenzstein5_1_drinnen =true; } if (grenzstein5_1_austritt && enemymain_betreten) { grenzstein5_1_drinnen = false; enemymain_drinnen = true; print("Uebertritt in EnemyMain"); grenzstein5_1_austritt = false; } if (enemymain_austritt && grenzstein5_1_betreten) { enemymain_drinnen = false; grenzstein5_1_drinnen = true; print("Uebertritt in Grenzstein5"); enemymain_austritt = false; } } }
  7. Danke für den Tipp. Ich werde das mal probieren und die Player selber zählen lassen, ja ich schicke die Info´s an ein Auswertescript.... Der Gegner soll ja wissen wieviel Player sich in seinem Sektor befinden und reagieren!! Ich sende auch dann mal die Codeschnippsel... Edit. Es handelt sich um BoxCollider, hatte schon die Vermutung dass der Meshcollider vom Player Probleme macht und Doppelbelegungen!!!
  8. Vielen vielen Dank für die Antworten, Bisher habe ich sie soweit auseinander gelegt, dass der Spieler nicht in Trig1 und zugleich in Trig2 stehen kann. Ich versteh einfach nicht warum er da hin und wieder mehrfach zählt. @Malzbie ja ich habe bool variablen die sagen ob sich der Player im Trig1 befindet, oder ob er verlassen ist... Gibts noch andere Lösungen als Trigger???
  9. Hallo Gemeinde, ich arbeite zur Zeit an einem Projekt. So in der Art "Z". Wenn das noch jemand kennt?! ;) Ich würde gerne die Bereiche überwachen - hier Brücken - in welche Richtung die Brücke verlassen bzw. betreten wurde. Ich habe über die Brücke 2 Box Collider gelegt. Die überlappen sich ein wenig. Anhand von TriggerEnter und TriggerExit überwache ich ob sich der Spieler noch in Box 1 befindet, wenn die 2. Box betreten wird zähle ich hoch. Und umgekehrt. Funktioniert zu 70%. Oft zählt er doppelt. Die Spieler haben auch einen Box Collider. Wie löst ihr sowas? MfG Chef
  10. Danke schonmal für die Antworten. Werde ich heute Mal testen. Warum float[64,64] ?
  11. Hallo, ich kann mit Sphere´s Löcher in den Boden schiessen. Diese sollen aber beim Start wieder ausgeglichen werden. Benutze diesen Code: private Terrain boden; private int heightmapheight; private int heightmapwidth; private TerrainData terraindata; private float[,] heights; private bool hit = false; float x; void Start() { boden = GetComponent<Terrain>(); terraindata = boden.terrainData; heightmapheight = terraindata.heightmapHeight; heightmapwidth = terraindata.heightmapWidth; heights = terraindata.GetHeights(0, 0, heightmapwidth, heightmapheight); float[,] temp = new float[1, 1]; // [1,1] temp[0, 0] = 0.039f; // 0.038 for (int x = 200; x <=250; x++) for (int y = 200; y <= 250; y++) { terraindata.SetHeights(x, y, temp); Debug.Log(x+" "+ y); } } Das Spiel braucht schon ne ganze Zeit zum Laden. Kennt jemand einen anderen Weg? MfG
  12. Ach herrje, ein Klick auf den Gizmo Button. Das wars. Daaanke.
  13. Hallo Gemeinde, ich bin relativ neu in der Unity Welt und probiere mich grad so durch! Mich würde interessieren was das für eine weisse Linie ist (laufen, stehen) ? Wenn ich springe ist er weg. Siehe Bild! Den Character habe ich selber in Blender erstellt. Benutze den vorgefertigten Controller. MfG Chef
×
×
  • Create New...