Jump to content
Unity Insider Forum
  • Announcements

    • Lars

      Allgemeine Forenregeln   03/13/2017

      Forenregeln Nimm dir bitte einen Moment um die nachfolgenden Regeln durchzulesen. Wenn du diese Regeln akzeptierst und die Registration fortsetzen willst, klick einfach auf den "Mit der Registrierung fortfahren"-Button. Um diese Registration abzubrechen, klick bitte einfach auf den "Zurück" Button deines Browsers. Wir garantieren nicht für die Richtigkeit, Vollständigkeit und Brauchbarkeit der Nachrichten und sind auch nicht dafür verantwortlich. Die Beiträge drücken die Meinung des Autors des Beitrags aus, nicht zwangsläufig das, wofür die Forensoftware steht. Jeder Nutzer, der denkt, dass ein veröffentlichter Beitrag unzulässig bzw. störend ist, ist aufgefordert uns unverzüglich per E-Mail zu kontaktieren. Wir haben das Recht störende Beiträge zu löschen und bemühen uns, das in einem realistischem Zeitraum zu erledigen (sofern wir beschlossen haben, dass die Löschung notwendig ist). Du akzeptierst, durchgehend während der Nutzung dieses Services, dass du dieses Forum nicht dazu missbrauchen wirst, Inhalte zu veröffentlichen, welche bewusst falsch und/oder verleumderisch, ungenau, beleidigend, vulgär, hasserfüllt, belästigend, obszön, sexuell belästigend, bedrohlich, die Privatsphäre einer Person verletzend oder in irgend einer Art und Weise das Gesetz verletzen. Des Weiteren akzeptierst du, dass du keine urheberrechtlich geschützte Inhalte ohne Erlaubnis des Besitzers in diesem Forum veröffentlichst. Mit dem Klick auf den "Mit der Registrierung fortfahren"-Button, akzeptierst du zudem unsere Datenschutzerklärung und stimmst der Speicherung deiner IP-Adresse und personenbezogenen Daten zu, die dafür benötigt werden, um dich im Falle einer rechtswidrigen Tat zurückverfolgen zu können bzw. permanent oder temporär aus dem Forum ausschließen zu können. Es besteht keine Pflicht zur Abgabe der Einwilligung, dies erfolgt alles auf freiwilliger Basis.   Zusatzinformationen Der Forenbetreiber hat das Recht, Nutzer ohne Angabe von Gründen permanent aus dem Forum auszuschließen. Des Weiteren hat er das Recht, Beiträge, Dateianhänge, Umfrage, Blogeinträge, Galleriebilder oder Signaturen ohne Angabe von Gründen zu entfernen. Mit der Registrierung verzichtest du auf alle Rechte an den von dir erstellten Inhalten, bzw. treten diese an das Unity-Insider.de und Unity-Community.de ab. Dies bedeutet im Klartext, dass das Unity-Insider.de und Unity-Community.de frei über deine Texte verfügen kann, sofern diese nicht wiederum die Rechte anderer verletzen. Es besteht weiterhin kein Anspruch von registrierten Nutzern bzw. ehemaligen registrierten Nutzern darauf, dass erstellte Inhalte und/oder die Mitgliedschaft (User) wieder gelöscht werden (Erhaltung der Konsistenz dieses Forums).   Einwilligungserklärung Wenn du mit der Speicherung deiner personenbezogenen Daten sowie den vorstehenden Regeln und Bestimmungen einverstanden bist, kannst du mit einem Klick auf den Mit der Registrierung fortfahren-Button unten fortfahren. Ansonsten drücke bitte Zurück. Stand: 07.03.2011

3ncrypt0

Members
  • Content count

    139
  • Joined

  • Last visited

  • Days Won

    2

3ncrypt0 last won the day on September 16 2016

3ncrypt0 had the most liked content!

Community Reputation

7 Neutral

About 3ncrypt0

  • Rank
    Advanced Member

Recent Profile Visitors

1,572 profile views
  1. Boooooahr Ja, genau das war es - Es gibt Tage, da sollte man besser im Bett liegen bleiben... Die Scripte als Requirement anzugeben hatte mich aber auch nicht weiter gebracht, da ich den gleichen Fehler bekommen hatte. Super wäre es, wenn man einen Fehler hat, diesen in der Console anklickt und er dann auf das Object springt.
  2. Hi, beide Klassen hängen ja am selben Gameobject. Genau das ist es ja, was mich wundert. Auch dass die Log Ausgabe aus Test() in der Console ausgegeben wird. Ich habe die Klassen nun mal als Requirement gesetzt, was mich aber nicht weiter bringt. Hier mal ein Screenshot:
  3. Hi zusammen, ich arbeite gerade an meiner AI und und habe nun folgendes Problem: Ich arbeite mit relativ vielen Klassen, die meisten sind jedoch einem Objekt zugeordnet. Ich habe eine Klasse AIBrain in der ich mehr oder weniger für die jeweilige AI alles lokal steuer. Dann habe ich z.B. noch eine Klasse AISight in der ich prüfe, ob der Player sich in der Nähe befindet und ob ich freie Sicht auf diesen habe. Teilausschnitt AIBrain.cs: public class AIBrain : MonoBehaviour { public GameObject parent; private GameObject Player; private GameObject centerOfMap; private AIManager AIManager; private AI AI; private AIWaypoint AIWaypoint; private AITransition AITransition; private AISight AISight; private AeroplaneAiControl AeroplaneAiControl; private AISensitivity AISensitivity; public GameObject DefendObject; public AIFunctions.AIStates currentState; private bool playerDetected = false; void Start() { AIManager = GameObject.FindGameObjectWithTag("EnemyManager").GetComponent<AIManager>(); AI = parent.GetComponent<AI>(); AIWaypoint = parent.GetComponent<AIWaypoint>(); AITransition = GetComponent<AITransition>(); AISight = GetComponent<AISight>(); AeroplaneAiControl = parent.GetComponent<AeroplaneAiControl>(); AISensitivity = GetComponent<AISensitivity>(); centerOfMap = GameObject.FindGameObjectWithTag("CenterOfMap"); currentState = AI.AIState; Player = GameObject.FindGameObjectWithTag("Player"); } void Update(){ { if (AISight.Test()) //FEHLER - NullReferenceException { AI.AIState = AIFunctions.AIStates.ATTACKING; } else if (!AISight.Test() && playerDetected) { AI.AIState = AIFunctions.AIStates.IDLE; } } Bei AISight.Test() wirft er mir die Exception. AISight selber ist aber da. Hier die AISight.cs: public class AISight : MonoBehaviour { [SerializeField] private float distance = 300f; // how far they can see the target [SerializeField] private float arc = 60f; // their field of view public bool Test() { Debug.Log("Detect"); return true; } Das Komische ist, dass er "Detect" in der Console ausgibt. Die Test() wird aber nur aus der AIBrain aufgerufen. Ich sehe den Fehler einfach nicht. Kann mir da mal jemand auf die Sprünge helfen? Danke und VG
  4. SmoothFollow mit Rotation für Flugzeuge

    Hi, das Fadenkreuz ist immer in der Mitte vom Bildschirm - Das Flugzeug kann sich aber komplett frei bewegen. Also nicht so wie in dem Video. Ich konnte es nun so lösen, dass ich ein ChildObject in meinem Flugzeug erstelle, dieses etwas über und hinter das Flugzeug positioniere und dann die Kamera dann dieses als Target bekommt. In dem Fall dann die Offsets entfernen.
  5. Hi, ich suche seit gestern nach einer Lösung für ein SmoothFollow Script mit Rotation - Die Kamera soll ein Flugzeug verfolgen. Das Flugzeug kann sich natürlich auch auf den Kopf drehen, und die Kamera sollte die Drehung verfolgen. Ich habe anfangs mit LookAt() rumprobiert, konnte aber das Problem mit der Verfolgung der Rotation nicht lösen. Bei folgender Lösung bin ich nun: public Transform aircraft; public float speed = 5f; public float offsetY; public float offsetX; public float offsetZ; private void LateUpdate() { transform.rotation = transform.rotation = Quaternion.Lerp(transform.rotation, aircraft.rotation, speed * Time.deltaTime); transform.position = Vector3.Lerp(transform.position, new Vector3(aircraft.position.x+offsetX, aircraft.position.y+offsetY, aircraft.position.z+offsetZ), Time.deltaTime * speed); } Da es 3rdPerson ist und ich auch ein Fadenkreuz habe, sollte das Flugzeug immer unter dem Fadenkreuz sein - hier ist es aber so, dass wenn ich das Flugzeug um z.B. 180° um Z drehe (also eine Rolle auf den Kopf), dieses sich dann oberhalb meines Fadenkreuzes befinden. Drehe ich es um 90°, ist es links oder rechts neben dem Fadenkreuz. Mit offsetX und offsetY würde ich die Position nun gerne anpassen, weiß aber nicht wie ich das berechnen soll. Wenn initial offsetY auf 8 steht, ich dann eine 180° Rolle mache, müsste offsetY ja -8 sein. Kann mir da mal jemand helfen? Oder kennt jemand vllt. eine bessere Lösung für ein SmoothFollow Script für Flugzeuge? Danke! EDIT: Das gleiche Problem habe ich natürlich bei eine Drehung um die X Achse, also Pitch.
  6. Enemy detection mit Raycast in FOV inkl. Kopfbewegung

    Hi, Danke! Das hatte funktioniert - allerdings schien das nicht die beste Lösung zu sein - also grundlegend einer EnemyDetection. Ich hab es nun ein wenig anders gelöst: void EnemyDetection(Transform player) { if (Vector3.Distance(transform.position, player.position) < distance) { var playerDir = (player.position - transform.position).normalized; if (Vector3.Dot(transform.forward, playerDir) > 0 && Vector3.Angle(transform.forward, playerDir) < arc) { Debug.DrawLine(transform.position, transform.position + playerDir * distance, Color.red); RaycastHit hitInfo; if (Physics.Raycast(transform.position, player.transform.position - transform.position, out hitInfo) == true) { if (hitInfo.collider.gameObject.tag == "PlayerCollider" && !this.detected && player != null) { this.parent.GetComponent<AeroplaneAiControl>().SetTarget(hitInfo.collider.gameObject.transform); this.detected = true; } } } } else if(Vector3.Distance(transform.position, player.position) > distance && this.detected) { this.parent.GetComponent<AeroplaneAiControl>().SetTarget(this.currentWaypoint.transform); } } Ich prüfe erst den Abstand zwischen meinem Player und der AI, kommen sich beide relativ nah, prüfe ich ob der Player sich in einem bestimmten Winkel vor der AI befindet, dann feuer ich einen Raycast und prüfe ob es wirklich mein Player ist und ob ich diesen erreiche oder ob andere Gegenstände dazwischen sind.
  7. Enemy detection mit Raycast in FOV inkl. Kopfbewegung

    Ja - Ich habe ja auch das selbe Problem, wenn wir den Kopf mal ignorieren. Lege ich das Script direkt auf das MainObject (ohne Kopfnicken), so darf ich das MainObject auch nur um Y drehen. Der Raycast ist also nicht starr nach vorne vom MainObject aus gesehen.
  8. Enemy detection mit Raycast in FOV inkl. Kopfbewegung

    Hi, Danke für deine Antwort - habe ich leider schon probiert mit dem selben Ergebnis. Es funktioniert nur bei einer Drehung um die Y Achse, also so wie bei meinem Beispiel oben.
  9. Hi zusammen, ich möchte gerne für eine AI via Raycast eine Enemy Detection umsetzen - Das Ganze soll in einem fliegendem Objekt eingesetzt werden. Der Raycast soll sich über eine FOV erstrecken (links rechts). Damit auch oben und unten Objekte entdeckt werden können (da es ja ein fliegendes Objekt ist), habe ich meinem Flugzeug ein ChildObject hinzugefügt, welches kontinuierlich auf der X Achse zwischen -60° und 60° rotiert und somit eine Art Kopf simulieren soll. Hierarchie: MainObject (Rigidbody und ein paar Scripte) - Empty Object (Kopf) mit Script für Kopfbewegung und Raycast Hier mal ein paar Snippets: Das ist für die Kopfbewegung void HeadShaking() { float angle = Mathf.Sin(Time.time) * 70; //tweak this to change frequency transform.rotation = Quaternion.AngleAxis(angle, Vector3.right); } Und hier für Raycast: Quaternion startingAngle = Quaternion.AngleAxis(-60, Vector3.up); Quaternion stepAngle = Quaternion.AngleAxis(5, Vector3.up); void EnemyDetection() { RaycastHit hit; var angle = transform.rotation * startingAngle; var direction = angle * Vector3.forward; var pos = transform.position; for (var i = 0; i < 24; i++) { Debug.DrawRay(pos, direction * this.enemyDetectionRange, Color.red); if (Physics.Raycast(pos, direction, out hit, this.enemyDetectionRange)) { var enemy = hit.collider.gameObject; if(enemy.tag == "Player") { Debug.Log("Player entdeckt"); } } else { Debug.Log("Weiter auf Waypoint Flug"); } direction = stepAngle * direction; } } Mein Problem ist, dass die Raycasts nicht in die Richtung der Kopfbewegung gucken - Sie erstrecken sich zwar nach links und recht und fahren auch hoch runter, dabei verschieben die sich aber immer wieder, es sei denn der "Kopf" hat auf der X Achse 0° erreicht. Drehe ich das MainObject, drehen die Raycasts sich nicht mit... Ich hab nun schon einiges ausprobiert aber komme zu keinem Ergebnis. Setze ich das Script mit EnemyDetection() auf das MainObject und drehe dieses um die Y Achse, ist alles gut. Sobald ich aber das um die X Achse drehe, passieren komische Dinge.. Im Endeffect will ich ja nur ein FOV simulieren für die AI, damit die auch Gegner entdecken kann. Oder sollte man nicht auf Raycast setzen sondern eher auf Trigger Collider? Die Raycast Function habe ich übrigens hier her: http://answers.unity3d.com/questions/457184/how-to-detect-all-gameobjectsie-enemies-in-field-o.html VG
  10. Ich habe nun noch was anderes via Google gefunden: (Zum Testen im Editor mit Maus) - OnMouseDrag funktioniert nun super. Das Sprite dreht sich in die gewünscht Richtung. Allerdings sollte es sich auch bei MouseUp weiterdrehen mit der Kraft, die ich durch die "Länge" und Geschwindigkeit des Swipes berechnet habe/werde... Ich dachte ich bekomme in der DragFunction angularVelocity, dem ist aber nicht so. Wie könnte ich denn nun am besten das Rad weiterdrehen? using System.Collections; using System.Collections.Generic; using UnityEngine; public class RotateController : MonoBehaviour { private float baseAngle = 0.0f; private float velo = 0; void OnMouseDown() { Vector3 pos = Camera.main.WorldToScreenPoint(transform.position); pos = Input.mousePosition - pos; baseAngle = Mathf.Atan2(pos.y, pos.x) * Mathf.Rad2Deg; baseAngle -= Mathf.Atan2(transform.right.y, transform.right.x) * Mathf.Rad2Deg; } void OnMouseDrag() { Vector3 pos = Camera.main.WorldToScreenPoint(transform.position); pos = Input.mousePosition - pos; float ang = Mathf.Atan2(pos.y, pos.x) * Mathf.Rad2Deg - baseAngle; //transform.rotation = Quaternion.AngleAxis(ang, Vector3.forward); this.GetComponent<Rigidbody2D>().MoveRotation(ang); //this.velo = this.GetComponent<Rigidbody2D>().; Debug.Log("Drag: "+this.velo); } private void OnMouseUp() { Debug.Log("Up: "+this.velo); this.GetComponent<Rigidbody2D>().AddTorque(velo); } }
  11. Hi, seit gestern zerbreche ich mir den Kopf darüber, wie ich ein Sprite (in dem Fall einen Kreis) mittels Touch.move in die richtige Richtung drehen kann. Hier mal eine Zeichnung wie das gemeint ist: Fall 1-4 habe ich mehr oder weniger hinbekommen. Ich habe den Bildschirm einfach in 4 Sektionen unterteilt und prüfe bei Touch.began wo ich anfange. Bei Touch.ended prüfe ich den direction Vector2, was größer war, X oder Y um zu erfahren, ob ich quer oder längs gewischt habe und daraus kann ich dann entscheiden, wie der Kreis sich drehen sollte. Wenn ich nun aber wie in Bild 5 z.B. von oben rechts nach unten Links wischt und eigentlich mehr nach links als rechts, Y aber länger ist, dreht sich der Kreis im Uhrzeigersinn anstatt gegen den Uhrzeigersinn. Soweit verständlich? Ich habe nun schon einige Spiele gesehen wo man ein Sprite mit dem Finger so drehen kann, wie es normal wäre, aber ich komme einfach nicht dahinter, wie ich dieses Lösen kann und bei Google werde ich auch nicht wirklich fündig. Hier mal mein Code bei dem ich jedes mal ein Schmunzeln habe, da dieser wirklich nicht sauber ist: Hier prüfe ich, wo ich auf dem Bildschirm beginne zu wischen. switch (touch.phase) { // Record initial touch position. case TouchPhase.Began: startPos = touch.position; startTime = Time.time; moveTime = 0; //top left if (touch.position.x < Screen.width / 2 && touch.position.y > Screen.height / 2) { this.touchBeganLocation = 0; } //top right else if(touch.position.x > Screen.width / 2 && touch.position.y > Screen.height / 2) { this.touchBeganLocation = 1; } //bottom left else if(touch.position.x < Screen.width / 2 && touch.position.y < Screen.height / 2) { this.touchBeganLocation = 2; } //bottom right else if(touch.position.x > Screen.width / 2 && touch.position.y < Screen.height / 2) { this.touchBeganLocation = 3; } this.location.text = "Loc ID: " + this.touchBeganLocation.ToString(); break; Hier prüfe ich die Wischrichtung und wie sich der Kreis drehen sollte. Die Funktion wird in der touch.ended aufgerufen: void calculatePower(float force, Vector2 direction, int touchBeganLocation) { switch (touchBeganLocation) { //top left case 0: if(Mathf.Abs(direction.x) > Mathf.Abs(direction.y)) { //horizontal if(direction.x > 0) { //cw this.GetComponent<Rigidbody2D>().AddTorque(-force, ForceMode2D.Impulse); } else { //ccw this.GetComponent<Rigidbody2D>().AddTorque(force, ForceMode2D.Impulse); } } else { //vertically if(direction.y < 0) { //ccw this.GetComponent<Rigidbody2D>().AddTorque(force, ForceMode2D.Impulse); } else { //cw this.GetComponent<Rigidbody2D>().AddTorque(-force, ForceMode2D.Impulse); } } break; //top right case 1: if (Mathf.Abs(direction.x) > Mathf.Abs(direction.y)) { //horizontal if (direction.x > 0) { //cw this.GetComponent<Rigidbody2D>().AddTorque(-force, ForceMode2D.Impulse); } else { //ccw this.GetComponent<Rigidbody2D>().AddTorque(force, ForceMode2D.Impulse); } } else { //vertically if (direction.y < 0) { //ccw this.GetComponent<Rigidbody2D>().AddTorque(-force, ForceMode2D.Impulse); } else { //cw this.GetComponent<Rigidbody2D>().AddTorque(force, ForceMode2D.Impulse); } } break; //bottom left case 2: if (Mathf.Abs(direction.x) > Mathf.Abs(direction.y)) { //horizontal if (direction.x > 0) { //ccw this.GetComponent<Rigidbody2D>().AddTorque(force, ForceMode2D.Impulse); } else { //cw this.GetComponent<Rigidbody2D>().AddTorque(-force, ForceMode2D.Impulse); } } else { //vertically if (direction.y < 0) { //ccw this.GetComponent<Rigidbody2D>().AddTorque(force, ForceMode2D.Impulse); } else { //cw this.GetComponent<Rigidbody2D>().AddTorque(-force, ForceMode2D.Impulse); } } break; //bottom right case 3: if (Mathf.Abs(direction.x) > Mathf.Abs(direction.y)) { //horizontal if (direction.x > 0) { //ccw this.GetComponent<Rigidbody2D>().AddTorque(force, ForceMode2D.Impulse); } else { //cw this.GetComponent<Rigidbody2D>().AddTorque(-force, ForceMode2D.Impulse); } } else { //vertically if (direction.y < 0) { //cw this.GetComponent<Rigidbody2D>().AddTorque(-force, ForceMode2D.Impulse); } else { //ccw this.GetComponent<Rigidbody2D>().AddTorque(force, ForceMode2D.Impulse); } } break; } } Ich finde das irgendwie viel zu umständlich...oder befinde ich mich auf dem richtigen Pfad? Danke für Eure Hilfe und Kritik Jochen
  12. Moin, @Zer0Cool Ich habe da nur einen Fehler, der mich noch einmal daran erinnert, dass das System unerwartet heruntergefahren wurde. Ansonsten ist alles. Mein System ist zwar schon etwas älter, aber Spiele wie BF1 oder Arma3 etc. funktionieren tadellos. (Enter geht hier gerade nicht...) @Mabenan Treiber sind alle auf dem neusten Stand. Ich habe dieses Problem wirklich häufiger und habe dabei auch schon komplette Scenen verloren da diese nach einem Neustart nicht mehr zu öffnen waren. Der Fehler ist auch bei früheren Unity Versionen aufgetreten.
  13. Hi zusammen, ich bin heute mit einem neuen Projekt gestartet. Eine 2D App. Jetzt habe ich das Problem, dass wenn ich ein Build erstelle, ich 3 mal Shader compiler failed bekommen und dann Bluescreen oder aber die Kiste startet ohne Meldung einfach neu. Ich habe das Package PostProcessing hinzugefügt da ich Motion Blur benötige. Entferne ich dieses komplett, funktioniert es. Aber das kann es doch nicht sein?!?! Bei meinem anderen Projekt habe ich das Gleiche mit SpeedTrees. Ich muss aber auch dazu sagen, dass wenn ich Motion Blur anhabe, ich diesen Effekt im Editor nicht sehen kann. Ich hatte vorgestern auf meinem MacBook einen Prototypen von dem Spiel erstellt und dort auch MotionBlur eingesetzt (Aber das alte) und habe es im Editor und Smartphone gesehen und ich hatte auch keine Probleme beim Build. Auf meiner Windows Maschine sehe ich nicht einmal das alte Motion Blur im Editor. Meine Unity Verion: 5.6.0f3 Da meine Kiste auch durchstartet habe ich keine Möglichkeit einen Bericht zu speichern. Was kann ich tun? Im TaskManager sehe ich, dass 8 Prozesse für den Shader beim Build laufen und meine CPU auf 100% rennt (wobei sie immer auf 100% bei einem Build rennt). VG Jochen
  14. Hi, warum nimmst Du hier die Z Achse: Kann das der Fehler sein? VG
  15. Hi, @Zer0Cool Das habe ich gerade eben mal ausprobiert. Ich habe alle Objekte in ein EmptyGO gepackt, dieses dann auf 0.1 runterskaliert und den Bake Prozess angeworfen. Nach 30sec war er fertig. Dann habe ich Lightmap Resolution auf 40 gesetzt und es dauerte insgesamt ca. 3min. Dann habe ich das Objekt wieder auf 1 skaliert, jedoch ist das Ergebnis nicht sooo hübsch. Ich taste mich gerade einmal ran und erhöhe immer weiter die Lightmap Resolution. Auch interessant ist, dass ich nun anstatt 20MB Lightmaps nur noch 2,7MB habe. Sobald ich z.B. die Skalierung auf 0.15 setze, geht garnichts mehr - dann dauert es 5 mal so lange. Hier mal ein vergleich: Hier jetzt einmal das Ergebnis mit einer Lightmap Resolution von 200. Bakezeit ca. 7-8min. Lightmapgröße 5,3MB. Allerdings finde ich die "Dreiecke" an den Balken komisch. Da dürfte eigentlich kein Schatten sein, da aus der Richtung das Licht kommt. Scheint so, als würde dass von den inneren Balken gespiegelt werden. Kann auch sein, dass ich da einen UVW Fehler eingebaut habe....
×