2016-10-04 4 views
0

Mit den Touch-Eingängen kann ich ein Spielobjekt ziehen. Aber was ich tun muss ist, (nach dem Loslassen des Ziehens) die Geschwindigkeit des Ziehens zu überprüfen und das Objekt ein wenig weiter bewegen zu lassen. Wenn ich also das Objekt schnell ziehe und loslasse, bewegt es sich nach dem Loslassen etwas in die gezogene Richtung. So wie es jetzt ist, bleibt es einfach an der Stelle stehen, wo ich meinen Finger entferne. Wer weiß, wie das gemacht wird?Unity ios ziehen mit Lockerung

Was ich habe, ist jetzt:

 private Vector3 dist, distEnd; 
     float posX; 
     float posY; 

    void OnMouseDown() { 

      dist = Camera.main.WorldToScreenPoint (transform.position); 
      posX = Input.mousePosition.x - dist.x; 
      posY = Input.mousePosition.y - dist.y; 


     } 

     void OnMouseDrag() 
     { 
      Vector3 curPos = new Vector3 (Input.mousePosition.x - posX, Input.mousePosition.y - posY, dist.z); 
      Vector3 worldPos = Camera.main.ScreenToWorldPoint (curPos); 
      transform.position = worldPos; 

     } 

     void OnMouseUp() { 
      distEnd = Camera.main.WorldToScreenPoint (transform.position); 


     } 

Dann habe ich eine RigidBody2d zum Objekt - versuchen, Kraft, um es hinzuzufügen - aber ich denke, ich brauche die Geschwindigkeit und Richtung der Drag/Maus zu berechnen - vor Ich kann Richtungskraft dem Objekt hinzufügen?

GetComponent<Rigidbody2D>().AddForce (Vector2 (FORCE_DIRECTION_X, FORCE_DIRECTION_Y)); 

Aber ich habe Schwierigkeiten, Richtung und Geschwindigkeit des Ziehens zu berechnen.

Jede Hilfe wird geschätzt!

Danke.

+0

Sicher, wir wissen, aber können Sie als Probe geben Ihrer Code, um eine Basis für die Antwort zu bilden? –

+0

Sorry - hier der Code den ich bisher habe. –

Antwort

0

Richtig, endlich habe ich eine Antwort gefunden :-) Ich habe ein Skript für andere mitgeliefert (die Lösung habe ich allerdings nicht gefunden).

Vielleicht auch verwenden, jemand könnte es - ändern Variable „SmoothTime“ so eingestellte Zeit vor dem Drag-Geschwindigkeit 0 ist

using UnityEngine; 
using System.Collections; 

public class dragMap : MonoBehaviour { 


private Vector3 _screenPoint; 
private Vector3 _offset; 
private Vector3 _curScreenPoint; 
private Vector3 _curPosition; 
private Vector3 _velocity; 
private bool _underInertia; 
private float _time = 0.0f; 
public float SmoothTime = 2; 
void Update() 
{ 
    if(_underInertia && _time <= SmoothTime) 
    { 
     transform.position += _velocity; 
     _velocity = Vector3.Lerp(_velocity, Vector3.zero, _time); 
     _time += Time.smoothDeltaTime; 
    } 
    else 
    { 
     _underInertia = false; 
     _time = 0.0f; 
    } 
} 
void OnMouseDown() 
{ 
    _screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position); 
    _offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, _screenPoint.z)); 
    //Screen.showCursor = false; 
    _underInertia = false; 
} 
void OnMouseDrag() 
{ 
    Vector3 _prevPosition = _curPosition; 
    _curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, _screenPoint.z); 
    _curPosition = Camera.main.ScreenToWorldPoint(_curScreenPoint) + _offset; 
    _velocity = _curPosition - _prevPosition; 
    transform.position = _curPosition; 
} 
void OnMouseUp() 
{ 
    _underInertia = true; 
    //Screen.showCursor = true; 
} 

}