Jump to content
Unity Insider Forum

Vermentex

Members
  • Content count

    45
  • Joined

  • Last visited

Community Reputation

1 Neutral

About Vermentex

  • Rank
    Advanced Member

Recent Profile Visitors

662 profile views
  1. Vermentex

    Verschiedene Rotationen kombinieren

    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?
  2. Vermentex

    Verschiedene Rotationen kombinieren

    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.
  3. Vermentex

    Verschiedene Rotationen kombinieren

    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
  4. Vermentex

    Verschiedene Rotationen kombinieren

    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.
  5. Vermentex

    Verschiedene Rotationen kombinieren

    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; } }
  6. Vermentex

    Wert kontinuierlich erhöhen

    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
  7. Vermentex

    Wert kontinuierlich erhöhen

    Hallo liebe Unity Insider :), Ich habe gerade ein kleines Problemchen, mit einem Wert, den ich erhöhen möchte, sobald dieser unter 100% fällt. Dazu habe ich den Wert: currentPoints und den dazugehörigen Maximalwert: maxPoints = 5. Wenn der Input "Mouse1" erfolgt, wird dieser Wert um 1 verringert. Das habe ich ganz einfach mit currentPoints-- gemacht. Jetzt kommt der für mich komplizierte Teil. Sollte der Wert currentPoint < maxPoints, soll currentPoints im langsam kontinuierlich um 1 erhöht werden, bis wieder maxPoints erreicht wird. Daran Scheiter ich gerade. Mangels Alternativen, wolle ich das wie folgt (siehe Code) lösen, was allerdings nicht so recht geklappt hat. Kennen mich mit dieser Thematik auch noch nicht so aus. Das Ergebnis ist auch nicht besonders schön gelöst und bringt auch viele Probleme mit sich. Es wäre sehr hilfreich, wenn ihr einmal drauf schauen könntet. Vielen Dank für eure Hilfe using System.Collections; using System.Collections.Generic; using UnityEngine; public class PointManager : MonoBehaviour { public float maxPoints = 5; public static float currentPoints; public float plusPoints = 10; void Start() { currentPoints = maxPoints; } void Update() { if (Input.GetButtonDown("Mouse1")) { currentPoints -= 1; } if (currentPoints > maxPoints) { currentPoints = maxPoints; } if (currentPoints < maxPoints) { StartCoroutine(PlusPoints()); } if (currentPoints < 1) { currentPoints = 0; } } IEnumerator PlusPoints() { yield return new WaitForSecondsRealtime(plusPoints); currentPoints += 1; yield return new WaitForSecondsRealtime(plusPoints); } }
  8. Vermentex

    Editor

    Ich suche nach dem passenden Editor für Unity
  9. Vermentex

    Terrain platziert Trees nicht richtig

    Danke nochmal, für eure Hilfe. Habe mich jetzt wieder diesem Projekt zugewandt. Zer0Cool hat mir die Lösung gezeigt. Einfach "Fade Lenght" hochstellen. War bei mir zu niedrig. Danke *Hinweis: Mir ist bewusst, dass Unity bessere Bäume darstellen kann. Ich versuche aber absichtlich einen Pixelstil zu generieren. Ich möchte damit nicht versuchen den beste Grafik Preis zu erhalten. Ich bin Fan von Pixel/Voxel-Games und möchte diesen Stil verwenden.
  10. Hallo Leute, ich habe gerade zum erstem mal das Treebrush-Tool des Unity-Terrains ausprobiert, da ich die Bäume in meinem Projekt ungern alle einzeln platzieren möchte. Leider funktioniert dieses Tool (bei mir) nicht wie erwartet. Die Bäume sehen qualitativ schlecht aus und schweben als Sprites in der Luft. Sie werden auch nicht vollständig angezeigt. Collider werden ebenfalls ignoriert. Um es besser begreiflich zu machen, habe ich hier ein Screenshot für euch. So sieht das jetzt in meinem Projekt aus. Ein von mir platzierter Baum in der Mitte und die mit dem Terrain-Tool erstellten außen. Könnt ihr mir sagen, wie ich das richtig hinbekomme? Habe mir auch schon ein paar Videos angeschaut, wo es richtig geklappt hat. Vielen Dank
  11. Hallo Leute, ich hoffe, dass mein Thema hier hinein passt. Ich habe ein Problem. In meinem UnityProjekt gibt es bisher 2 Szenen. Ich habe eine eigene Skybox erstellt (sehr simpel) und diese einfach in die Szene gezogen. In der Szene befinden sich 3D-Modelle im fbx-Format. Ein Directional Light habe ich auch, sowie ein paar ReflectionProbes. Nun zu meinem Problem. Beim start von Unity dauert es kurz, bis die Szenen richtig belichtet werden. Wenn ich dann die Szene starte, sieht alles so aus, wie es soll: Wenn ich jetzt aber über ein Script "LoadLevel" in die jeweils andere Szene wechsel, werden die Objekte falsch oder garnicht belichtet. Ich kann das nicht so gut beschreiben. Hier wie das aussieht: Weiß jemand woran das liegt? Wenn ich die Szene vom Editor aus starte ist alles normal. Nur wenn die Szenen von einer anderen Szene aus getartet werden, sieht es so aus wie in Bild 2. Vieleicht weiß da jemand mehr. Vielen Dank für die Hilfe
  12. Vermentex

    "static int" abfragen

    Ok, vielen Dank. Ich habe tatsächlich gesucht. Nicht so wie beschrieben, daher wohl auch nicht entdeckt. Vielen Dank für den Tipp :). Einen schönen Nachmittag wünsche ich noch.
  13. Vermentex

    "static int" abfragen

    Hallo Leute, ich habe in einer "static class" einen Wert, den ich in einem anderen Script (über if) abfragen muss. Kann mir dabei jemand helfen? Hier ist das Script, wo der Wert "weaponId" neu vergeben wird: Dieser Wert muss abgefragt werden. using UnityEngine; using System.Collections; static class WeaponID { private static int weaponId = 0; public static void ClearId() { weaponId = 0; } public static int GetId() { return weaponId; } public static void AddId(int id) { weaponId = id; } } Hier ist das Script, welches diesen Wert abfragen muss: using System.Collections; using System.Collections.Generic; using UnityEngine; public class Weapon_Activator : MonoBehaviour { public GameObject WeaponToActivate; public int ID; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (?????????) WeaponToActivate.SetActive(true); } } Wenn der Wert von "weaponId" (aus dem ersten Script), dem Wert von "ID" (aus dem 2. Script) entspricht, soll "WeaponToActivate.SetActive(true);" ausgeführt werden. Vielen Dank, für die Unterstützung
  14. Vermentex

    Score in Player.Prefs speichern (Szenenübergreifend)

    Danke, hat geklappt. Ich habe zuerst übersehen, dass der Score im Scormanager zurückgesetzt wird, beim start. Jetzt klappt alles. Vielen Dank, hat mir sehr geholfen.
  15. Vermentex

    Score in Player.Prefs speichern (Szenenübergreifend)

    Ich versuche es mal damit. Dankeschön
×