2017-09-06 1 views
1

Ich möchte die Position des Objekts in die Position der Maus ändern, indem ich langsam von der ersten zur zweiten Position gehe.Langsam bewegendes Spielobjekt zur Mausposition

Mein Objekt bewegt sich langsam in die zufällige Richtung, die mit der unteren linken Ecke verbunden zu sein scheint. Wenn ich höher als die Ecke gehe, bewegt sich mein Objekt nach oben, dasselbe mit links und rechts.

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class Rocket : MonoBehaviour 
{ 
    public float speed = 10f; 

    private Vector3 shippos; 

    void Start() 
    { 
     shippos = transform.position; 
    } 

    void FixedUpdate() 
    { 
     if (Input.mousePosition.x > shippos.x) 
      shippos.x=shippos.x+speed*Time.deltaTime; 
     if (Input.mousePosition.x < shippos.x) 
      shippos.x=shippos.x-speed*Time.deltaTime; 
     if (Input.mousePosition.y > shippos.y) 
      shippos.y=shippos.y+speed*Time.deltaTime; 
     if (Input.mousePosition.y < shippos.y) 
      shippos.y=shippos.y-speed*Time.deltaTime; 
     transform.position = shippos; 
    } 
} 
+2

Sie scheinen 3 verschiedene Fragen zu stellen. Es ist auch nicht ganz klar, was Sie unter diesen dreien erreichen wollen. Können Sie Ihre Frage bitte so bearbeiten, dass klar ist, wofür Sie Hilfe benötigen. – ryeMoss

+0

@ryemoss Bearbeitet, vielleicht ist es jetzt klarer? – sswwqqaa

Antwort

3

Die Mausposition wird in Bildschirmkoordinaten zurückgegeben. Was Sie tun müssen, ist dies in Weltkoordinaten zu konvertieren, so dass sie im selben Koordinatenraum wie die Transformation (shippos) verglichen werden.

void FixedUpdate() 
{ 
    if (Camera.main.ScreenToWorldPoint(Input.mousePosition).x > shippos.x) 
     shippos.x = shippos.x + speed * Time.deltaTime; 
    if (Camera.main.ScreenToWorldPoint(Input.mousePosition).x < shippos.x) 
     shippos.x = shippos.x - speed * Time.deltaTime; 
    if (Camera.main.ScreenToWorldPoint(Input.mousePosition).y > shippos.y) 
     shippos.y = shippos.y + speed * Time.deltaTime; 
    if (Camera.main.ScreenToWorldPoint(Input.mousePosition).y < shippos.y) 
     shippos.y = shippos.y - speed * Time.deltaTime; 
    transform.position = shippos; 
} 
+0

Es hat funktioniert ! Danke für die Erklärung über die Umwandlung von Screenspace in Weltkoordinaten. – sswwqqaa

0

Wenn ich nicht falsch verstehen, möchten Sie Ihre Spieler die Position direkt auf den Punkt der Mausposition und in Richtung Maus suchen ändern.

void Update() { 
    Transform target = mousePosition; //get your mouse position per frame 
    Vector3 relativePos = target.position - transform.position; //create a vector3 between them 
    Quaternion rotation = Quaternion.LookRotation(relativePos); //then give a rotation your player towards this vector. 
    transform.rotation = rotation; //and apply it. 
} 
+0

Nichts in der Frage oder OP-Code erwähnt etwas über Rotation (und Ihr Code bewegt kein Spielobjekt) – UnholySheep

+0

Ich möchte es langsam bewegen, nicht durch Teleportieren in andere Position (Ich möchte kontinuierliche Bewegung in Richtung der Maus) – sswwqqaa

0

Ich denke, man falsch machen, weil wile Sie Mathf.Lerp haben Sie nicht brauchen, wie die ungeschickte Weise
hier zu gehen, ist ein Video-Tutorial von youtube für mathf.lerp


und hier ist die Basiscode:

someValue = Mathf.Lerp(initialValue , finalValue , Time.deltaTime * smoothness); 

nur einen Blick auf den youTube-Link wird défini Sie Tely die Idee!

Als Randbemerkung
Sie nicht brauchen, eine Menge Sachen zu tun, um Ihr Spiel Leistung zu verringern! seien Sie vorsichtig bei der Codierung!

+0

Lerp wird das Objekt sanft bewegen, aber es wird seine Bewegungsgeschwindigkeit ändern. (für kleine Bewegungen wird die Geschwindigkeit klein sein und für größere werden wir enorme Veränderungen sehen) MoveTowards ist besser für mich. Aber meine Hauptfrage war ScreenToWorldPoint (Input.mousePosition.x). Das war der Punkt, an dem ich stecken blieb. – sswwqqaa