2016-11-16 51 views
1

我想旋转一个瓶子(我正在计算鼠标的第一个pos和结束pos)并根据'swipe'长度/时间对它施加力。初次刷卡后,瓶子应该根据刷卡的力量继续旋转,然后在几秒钟后停止。旋转一个瓶子Unity3D

我希望你能帮助我。谢谢!

bottle interface

这是我试图这样做,但它不能很好地工作:

public Rigidbody bottle; 
bool isSwiping; 
Touch thisTouch; 
Vector2 origPos; 
Vector2 endPos; 
float touchSpeed; 
Vector3 Torque; 
float timeStart; float timeEnd; 


void OnMouseDown() 
{ 
    timeStart = Time.time; 
    origPos = Input.mousePosition; 
} 

void OnMouseDrag() 
{ 


    isSwiping = true; 


} 

void OnMouseUp() 
{ 
    if (isSwiping) 
    { 
     timeEnd = Time.time; 
     endPos = Input.mousePosition; 
     Vector2 deltaPosition = endPos - origPos; 
     touchSpeed = deltaPosition.magnitude/(timeEnd-timeStart); 
     Torque = new Vector3(touchSpeed * 500f, 0, 0); 
    } 
} 



void Update() 
{ 

} 


void FixedUpdate() 
{ 
    if (isSwiping) bottle.AddRelativeTorque(Torque); 
} 
+0

你能在什么复杂的“没有按在这种情况下工作不好“?请根据需要使用附加信息和视觉辅助工具编辑您的问题。 – Serlite

+0

可能对于滑动你尝试使用Input.GetAxis(“Horizo​​nal”)检测速度变化X坐标鼠标和Input.GetAxis(“垂直”)的Y? –

+0

@Serlite我的意思是它不旋转,什么都不做。 –

回答

2

尝试使用此代码:

public Rigidbody bottle; 
bool isSwiping; 
Touch thisTouch; 
Vector2 origPos; 
Vector2 endPos; 
float touchSpeed; 
Vector3 Torque; 
float timeStart; float timeEnd; 


void OnMouseDown() 
{ 
    timeStart = Time.time; 
    origPos = Input.mousePosition; 
} 

void OnMouseUp() 
{ 
    timeEnd = Time.time; 
    endPos = Input.mousePosition; 
    Vector2 deltaPosition = endPos - origPos; 
    touchSpeed = deltaPosition.magnitude/(timeEnd-timeStart); 
    Torque = new Vector3(touchSpeed * 500f, 0, 0); 
    isSwiping = true; 
} 

void FixedUpdate() 
{ 
    if (isSwiping) bottle.AddRelativeTorque(Torque); 
} 
+0

太棒了!有用!但有一件事在我接受答案之前,瓶子不停地旋转。我怎样才能降低速度? 当我旋转瓶子时,它应该旋转一段时间取决于我的滑动。可能吗? –

+0

是设置isSwiping = false,它的工作原理 –

+0

是的,我这样做,它直接停止,而不会随着时间的推移降低旋转速度。 –