Jump to content
Unity Insider Forum

Vermentex

Members
  • Content Count

    54
  • Joined

  • Last visited

Community Reputation

1 Neutral

About Vermentex

  • Rank
    Advanced Member

Recent Profile Visitors

1,067 profile views
  1. Das hatte ich sogar schon versucht. Leider mit dem gleichen Ergebnis. Die physische Rotation um die Z-Achse bewegt das Objekt in Unity um die Y- und Z-Achse, wobei die Rotation um die physische Y-Achse nicht verarbeitet wird.
  2. Verzeihung, ich habe nicht mitbekommen, dass ich hier eine Antwort erhalten habe. Leider funktioniert es nicht so. Nach oben und unten neigen funktioniert. Um die Y-Achse geht das nicht... Wenn ich das Smartphone wie ein Lenkrad rotiere, rotiert sich mein Objekt in Unity auch so, jedoch zusätlich auch noch um die Y-Achse.
  3. Hallo, ich habe ein kleines Problem mit der Benutzung des Gyroskops. Mein Setup: Ich habe eine Szene, in der sich eine Kamera (+ Cube als Repräsentierung des Handys) mit dem Gyroskop bewegen soll. Ich habe mein iPhone (mit der App Unity Remote) mit einem Kabel, an meinen Rechner angeschlossen und es über Edit > Projects Settings > Editor > Unity Remote > Device ausgewählt. Ich habe das Verwendete Skript mal herunter gekürzt: using System.Collections; using System.Collections.Generic; using UnityEngine; public class GyroTest : MonoBehaviour { private GameObject camHolder; // Start is called before the first frame update void Start() { camHolder = new GameObject("Camera Holder"); camHolder.transform.position = transform.position; transform.SetParent(camHolder.transform); camHolder.transform.rotation = Quaternion.Euler(90f, 90f, 0f); } // Update is called once per frame void Update() { transform.localRotation = Input.gyro.attitude * new Quaternion(0, 0, 1, 0); } } Das Problem: Ich sitze hier jetzt leider ratlos da, weil die Rotation nicht wie erwartet funktioniert. Ich versuche es mal zu beschreiben: Wenn ich mein Telefon entlang der Z-Achse rotiere, tut dies meine Camera auch. Rotiere ich es mit der Y-Achse, erhalte ich nur ein "Zittern". Um die X-Achse, rotiert die Kamera in Unity um mehrere Achsen. Ich weiß, dass diese Beschreibung das Problem eher semigut erläutert, daher habe ich mein Projekt als Unity Package beigefügt. Vielen Dank Gyroskop.unitypackage
  4. Danke für die Vorschläge. OnBecameVisible war mich nicht bekannt. Ich hatte hatte das probiert, indem ich selber Rays werde und schaue, ob der Cube getroffen wird, war aber am Ende langsamer. Ich probiere das. Die Voxeltechnik werde ich mir auch mal anschauen. Danke
  5. Das habe ich noch nicht probiert. Danke, werde ich heute mal versuchen.
  6. Oh. Ich hatte gehofft, dass man das dadurch verbessern kann. Danke für die Berichtigung.
  7. Hallo, ich benötige ein paar Ideen zum Thema Culling, bzw. allgemein verbesserte Performance. Ausgangssituation: Ich habe eine "leere" Scene. Auf start() werden (einmalig) Objekte instantiiert. Es entsteht mit Hilfe von PerlinNoise eine kleine Welt. 50x50x(max)7 Cubes. Wenn es nacher läuft, vielleicht mehr. Die Cubes können zur Laufzeit zerstört werden, bzw. neue Cubes können instantiiert werden. Problem: Die Anzahl der Cubes sorgt dafür, dass die Performance stark beeinträchtigt ist (Man kann sich als Spieler frei in der Welt bewegen). Hier sollte so etwas wie Occlusion Culling helfen. Leider kann ich das "build in Occlusion Culling" von Unity nicht nutzen, da meine Welt (zufällig) beim start generiert wird. Alle meine Ansätze, die Objekte auszublenden, wenn diese nicht im Sichtfeld sind, haben die Performance eher noch verschlechtert. Weiß jemand, wie man Viewing-frustum culling oder Occlusion Culling hier umsetzen kann?
  8. Oh Verzeihung. Ich hatte keine Nachricht erhalten, das hier geantwortet wurde. Die Probleme waren Versionsbedingt. Daher funktioniert jetzt alles. Danke Zum Thema animieren... Ich fühle mich da in Unity einfach wohler
  9. Hallo, Problem: ich habe ein simples Charaktermodel in Blender mit Bones ausgestattet und möchte dies nun in Unity importieren. (versucht mit der .blend und .fbx) Das Model und die Bones werden scheinbar auch korrekt importiert, wenn ich nun jedoch anfange die Bones zu bewegen, flackert das Model. Ich habe ein bisschen recherchiert, jedoch nichts zu diesem Problem gefunden. Vermutung: Ich vermute ein Problem mit meinem weight painting. Ich habe auch versucht, mit den Importeinstellungen zu experimentieren, hat jedoch zu keinem Ergebnis geführt. Setup: Model mit Rig ursprünglich aus Blender 2.79b (wurde aber auch schon aus der aktuellen Version exportiert) Neues 3D (without extras) Unity Projekt in der Version 2019.3.0f1 In den Anhängen habe ich das Model hinterlegt. Ich arbeite nicht viel mit Blender, hatte aber vorher noch nie solch ein Problem. (Das Model flackert nicht, wenn das Rig in den Importeinstellungen deaktiviert wurde. (Animationen sind nicht vorhanden, da ich diese in Unity machen möchte) Vielleicht hat jemand, der versierter ist als ich, eine Idee. Vielen Dank schonmal im Voraus. Edit: ich wollte noch ein Gif, mit dem Flackern beifügen, habe auf "diesem" Rechner nur die Unity-Version 2019.2.0f1 und kann hier das Flackern nicht feststellen. Hat eventuell Unity 2019.3 aktuell noch ein Problem/Bug mit imports von Blender Rigs? Edit 2: Ich habe meinen Unity Hub aktualisiert. Vor dem update wurde mir 19.3 unter "Latest Official Releases" angezeigt. Jetzt steht es unser "Latest Pre-Releases". Damit wechsel ich dann zu 19.2.15f1 und warte auf den offiziellen Release. charOnly.blend
  10. Die 2. Idee hätte ich so ähnlich schon Probiert. Da hätte ich Probleme mit dem Time.deltatime, jedoch klingt die erste wirklich perfekt für mich. Leider fällt es mir gerade schwer zu verstehen, wie ich aus der Rotation des untergeordneten Objekts die Bewegungsrichtung des übergeordneten Objekts beeinflusse. Ich habe folgendes Skript, welches meine Spielfigur bewegt. Zusätzlich habe ich einen float-Wert, aus dem anderen Script, welcher mir die gewünschte Rotation um die Y-Achse gibt: mouseRotation.y_Rotation. using System.Collections; using System.Collections.Generic; using UnityEngine; [RequireComponent(typeof(CharacterController))] public class FPS_CharacterController : MonoBehaviour { public float speed = 5f; public float jumpSpeed = 7f; public float gravity = 20.0f; private Vector3 moveDirection = Vector3.zero; private bool groundedB = false; private bool groundedA = false; public FPS_MouseRotation mouseRotation; void FixedUpdate() { if (groundedB || groundedA) { moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); moveDirection = transform.TransformDirection(moveDirection); moveDirection *= speed; if (Input.GetButton("Jump")) moveDirection.y = jumpSpeed; } moveDirection.y -= gravity * Time.deltaTime; CharacterController controller= GetComponent<CharacterController>(); CollisionFlags flags = controller.Move(moveDirection * Time.deltaTime); groundedB = (flags & CollisionFlags.CollidedBelow) != 0; groundedA = (flags & CollisionFlags.CollidedAbove) != 0; } } Ich muss das also irgendwie auf meine moveDirection drauf rechnen, richtig?
  11. Nein, das ist leider nicht mein Ziel. Der Spieler dreht sich um seine Y-Achse um sich umzuschauen und um seine Z-Achse um sich kopfüber zu rotieren. Wenn er sich um die Achse des Würfels dreht, liegt auch der Mittelpunkt beim Würfel. Somit ist die Position des Spielers nach der Rotation eine andere! Als Beispiel: Ich stehe auf dem Würfel und Rotiere nun. Richtig wäre, ich stehe immer noch auf dem Würfel, nur ist mein Kopf auf dem Würfel und die Beine in der Luft. Falsch ist, ich bin jetzt unter dem Würfel. Um das mal so zu sagen, es funktioniert, wenn ich einfach sage, dass der Spieler 180 Grad um die Z-Achse rotiert wird, sobald R gedrückt wird. Ich möchte das aber Animiert haben, damit der Spieler nicht die Orientierung verliert. Auf dem Weg, wie ich das gemacht habe, kollidiert es mit meiner anderen Rotation. Wenn es also eine Möglichkeit gibt, den Spieler über Zeit (1s) zu rotieren, auf einen Input, ohne meine andere Rotation um die Y-Achse dauerhaft zu stören, ist das die Lösung. Nochmals aber Danke für die Unterstützung.
  12. Ich habe hier einmal ein Video des unerwünschten Effekts gemacht. Der Spieler rotiert sich um die Achse des Würfels (als übergeordnetes Objekt), anstatt um seine eigene. Dadurch kann ich das so nicht machen. game.mov
  13. Das habe ich versucht. Wenn sich nun der Spieler bewegt und das übergeordnete Objekt rotiert, rotiert der Spieler um die Achse von dem Objekt und nicht um die eigene.
  14. Hallo, ich habe hier 2 Skripte, die mir ein Problem bereiten. Das erste Skript "FPS_MouseRotation" ist eine Adaption für meinen PlayerController, um meinen Spieler um die Y-Achse mit der Maus zu rotieren. (Und für die Kamera das gleiche mit der X-Achse) Das zweite Skript: "InverseGravity" sorgt dafür, dass die Gravitation des Spielers invertiert wird, sobald dieser "R" drückt. Damit die Rotation für den Nutzer erkennbar und "smooth" abläuft (außerdem verbessert das die Verständlichkeit, dass sich nun die Orientierung des Spielers verändert hat) verwende ich Vector3.Lerp mit Time.deltaTime. Nun zum Problem: Die beiden Skripte überschreiben jeweils die Rotation des Spielers, wodurch diese, um die Y-Achse immer wieder auf 0 gesetzt wird und das Bild somit "wackelt". Ich muss also beide Rotationen zu einer zusammen fassen. Meine Versuche sind dort an 2 Problemen gescheitert. 1. Trotz kombination beider Rotationen, wackelte das "Bild" bzw. der Spieler weiter vor sich hin. 2. Time.deltaTime wurde auch auf die Rotation der Y-Achse bezogen, was ich unbedingt vermeiden möchte, da der Input des Spielers (der Maus) direkt sein muss. Vieleicht hat jemand eine Idee, wie man das ganze Lösen könnte. Beide Skripte beziehen sich auf das selbe GameObject. Die Skripte können zusammen gefasst werden. Vielen Dank, für die Hilfe. using System.Collections.Generic; using UnityEngine; public class FPS_MouseRotation : MonoBehaviour { public float mouseSensitivityX = 1; public float mouseSensitivityY = 1; Transform cameraTransform; float verticalLookRotation; // Use this for initialization void Start() { cameraTransform = Camera.main.transform; } // Update is called once per frame void Update() { transform.Rotate(0, Input.GetAxis("Mouse X") * mouseSensitivityX, 0); // <- verticalLookRotation += Input.GetAxis("Mouse Y") * mouseSensitivityY; verticalLookRotation = Mathf.Clamp(verticalLookRotation, -60, 60); cameraTransform.localEulerAngles = Vector3.left * verticalLookRotation; } } using System.Collections; using System.Collections.Generic; using UnityEngine; [RequireComponent(typeof(FPS_CharacterController))] public class InverseGravity : MonoBehaviour { private FPS_CharacterController fpscontroller; public float rotationAmount = 180f; public float rotationSpeed = 10f; public Vector3 destEuler = new Vector3(0, 0, 0); private Vector3 currEuler = new Vector3(0, 0, 0); // Use this for initialization void Start () { fpscontroller = GetComponent<FPS_CharacterController>(); transform.eulerAngles = destEuler; } // Update is called once per frame void Update () { if (Input.GetKeyDown(KeyCode.R)) { destEuler.z += rotationAmount; fpscontroller.gravity = -fpscontroller.gravity; fpscontroller.jumpSpeed = -fpscontroller.jumpSpeed; } currEuler = Vector3.Lerp(currEuler, destEuler, Time.deltaTime * rotationSpeed); // <- transform.eulerAngles = currEuler; } }
  15. Vielen Dank, ich habe Saschas Methode übernommen, da ich die besser nachvollziehen konnte. Das hat wunderbar funktioniert und war für mich verständlich. Dennoch auch danke für die Lösung von Zer0Cool. Die werde ich mir auch noch einmal genau anschauen. Sehr geholfen hat mir vor allem die Erklärung, von Sascha, wodurch ich verstanden habe, was im Hintergrund funktioniert, wodurch ich in Zukunft besser darauf achten werde. Nocheinmal vielen Dank und einen schönen Nachmittag noch
×
×
  • Create New...