Jump to content
Unity Insider Forum

Objekt per Maus bewegen


Kojote

Recommended Posts

Grüß! :)

Ich möchte gern ein Objekt mit der Maus bewegen. Die Kamera hängt an dem zu bewegenden Objekt, halte ich nun eine Maustaste gedrückt, soll sich das Objekt bewegen. Bis hier hin komme ich. Problem ist, ich möchte eine maximale Reichweite vorgeben, bis wohin sich das Objekt bewegen kann.

Ich habs nun schon mit Collidern versucht, Problem ist, bewege ich die Maus zu schnell, fällt das Objekt um mitsamt Kamera einfach um. Rechnerisch komme ich nicht weiter. Sobald sich das Objekt dreht, klappen meine Abfragen nicht.

Hier mal der Code:

private void Update(){
	if (Input.GetAxis("Mouse X") > 0) {
                Vector3 pruefung = kameraPositionTransform.transform.localPosition;
                Vector3 moveX = new Vector3(Input.GetAxisRaw("Mouse X") * Time.deltaTime * kameraBewegungsEmpfindlichkeit, 0.0f, 0.0f);
                pruefung += moveX;
                if (pruefung.x < kameraBewegungRandPositionPositivX) {
                    var mausInputX = Input.GetAxis("Mouse X");
                    var mausInputY = Input.GetAxis("Mouse Y");
                    kameraPositionTransform.Translate(Time.deltaTime * mausInputX * kameraBewegungsEmpfindlichkeit, 0.0f, 0.0f, Space.Self);
                }
            }
            if (Input.GetAxis("Mouse X") < 0) {
                Vector3 pruefung = kameraPositionTransform.transform.localPosition;
                Vector3 moveX = new Vector3(Input.GetAxisRaw("Mouse X") * Time.deltaTime * kameraBewegungsEmpfindlichkeit, 0.0f, 0.0f);
                pruefung += moveX;
                if (pruefung.x > (kameraBewegungRandPositionNegativX * -1)) {
                    var mausInputX = Input.GetAxis("Mouse X");
                    var mausInputY = Input.GetAxis("Mouse Y");
                    kameraPositionTransform.Translate(Time.deltaTime * mausInputX * kameraBewegungsEmpfindlichkeit, 0.0f, 0.0f, Space.Self);
                }
            }
            if (Input.GetAxis("Mouse Y") > 0) {
                Vector3 pruefung = kameraPositionTransform.transform.localPosition;
                Vector3 moveZ = new Vector3(0.0f, 0.0f, Input.GetAxisRaw("Mouse Y") * Time.deltaTime * kameraBewegungsEmpfindlichkeit);
                pruefung += moveZ;
                if (pruefung.z < kameraBewegungRandPositionPositivZ) {
                    var mausInputX = Input.GetAxis("Mouse X");
                    var mausInputY = Input.GetAxis("Mouse Y");
                    kameraPositionTransform.Translate(0.0f, 0.0f, Time.deltaTime * mausInputY * kameraBewegungsEmpfindlichkeit, Space.Self);
                }
            }
            if (Input.GetAxis("Mouse Y") < 0) {
                Vector3 pruefung = kameraPositionTransform.transform.localPosition;
                Vector3 moveZ = new Vector3(0.0f, 0.0f, Input.GetAxisRaw("Mouse Y") * Time.deltaTime * kameraBewegungsEmpfindlichkeit);
                pruefung += moveZ;
                if (pruefung.z > (kameraBewegungRandPositionNegativZ * -1)) {
                    var mausInputX = Input.GetAxis("Mouse X");
                    var mausInputY = Input.GetAxis("Mouse Y");
                    kameraPositionTransform.Translate(0.0f, 0.0f, Time.deltaTime * mausInputY * kameraBewegungsEmpfindlichkeit, Space.Self);
                }
            }
}

Könnt ihr mir weiter helfen? Vielen Dank!

Kojote

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich glaube du machst dir das komplizierter als es eigentlich ist.

 

public Vector2 MinMaxX;
public Vector2 MinMaxY;
public float sensitivity;

private void Update(){
 Vector3 kameraPosition = kameraTransform.position;
 Vector2 movement = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y")) * sensitivity * Time.deltaTime;

 kameraPosition.x = Mathf.Clamp(kameraPosition.x + movement.x, MinMaxX.x, MinMaxX.y);
 kameraPosition.z = Mathf.Clamp(kameraPosition.z + movement.y, MinMaxY.x, MinMaxY.y);
  
 kameraTransform.position = kameraPosition;
}

 

"fällt das Objekt um mitsamt Kamera einfach um"

Hat dein Objet einene Rigidbody Componente? 

Wenn ja, solltest du nicht mit Translate() arbeiten.

 

Außerdem holst du dir immer wieder die mausInputX, mausInputY und Position der Kamera.

Das kannst du alles einfach einmal am Anfang machen. Das ist performanter und kürzer..

 

edit:

Wenn du noch willst, dass die Bewegung abhängig von der Rotation ist, kannst du das so machen:

Vector3 movement = kameraTransform.TransformDirection(new Vector3(Input.GetAxis("Mouse X"), 0, Input.GetAxis("Mouse Y")) * sensitivity * Time.deltaTime);

Und dann natürlich noch "kameraPosition.z + movement.y" zu "kameraPosition.z + movement.z" ändern..

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zitat

"fällt das Objekt um mitsamt Kamera einfach um"

Hat dein Objet einene Rigidbody Componente? 

Wenn ja, solltest du nicht mit Translate() arbeiten.

Jap, er hatte einen RB, kannst du mir sagen was bei Translate anders ist?

Bei deinem Code ganz oben, was machst du mit den Negativ-Werten? Es gibt ja sowohl positiv als auch negativ x, y und z.

EDIT:

Fällt mir jetzt gerade auf. So ähnlich hatte ichs am Anfang auch schon mal. Das Problem ist, wenn ich das Objekt drehe. Wenn ich jetzt die Maus nach vorn bewege, geht das Objekt auch nach vorn. Wenn ich das Objekt drehe und bewege die Maus nach vorn, bewegt sich das Objekt zur Seite.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 36 Minuten schrieb Kojote:

was bei Translate anders ist

Ob du Translate benutzt, oder wie ich die Position direkt setzt, macht keinen Unterschied. Bei beiden wird das Objekt einfach an die neue Position 'teleportiert'.

Wenn du einen Rigidbody verwendest, solltest du zum einen die Bewegung in FixedUpdate ausführen, und mit der 'velocity' / ApplyForce() vom Rigidbody arbeiten.

 

vor 40 Minuten schrieb Kojote:

Es gibt ja sowohl positiv als auch negativ x, y und z

Stimmt, aber ich wüsste nicht, was das für einen Unterschied machen soll? Ist der Input negativ, ist die Bewegung negativ und umgekehrt.

 

vor 42 Minuten schrieb Kojote:

Wenn ich jetzt die Maus nach vorn bewege, geht das Objekt auch nach vorn

Hast du mein 'edit' gesehen?

Mit 'transform.TransformDirection()' kannst du den Bewegungsvektor entsprechend der Ausrichtung deines Objekts drehen. https://docs.unity3d.com/ScriptReference/Transform.TransformDirection.html

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...