Unity3D-通过单击将对象向相反方向移动

时间:2018-08-21 23:18:50

标签: c# unity3d

我是Unity的新手,正在从事一个简单的项目,但我遇到了麻烦。

所以我的想法是,当玩家触摸球的底部时,它会朝相反的方向运动。就像在现实生活中一样,如果您在底侧踢球,球将会上升,但是在2D版本中。

我试图找到玩家接触球的相反点,并通过减去原始点和相反点,然后施加力来移动球,但制作了矢量,但这是行不通的。

void MoveBall()
{
     x = mouseClickPosition.x;
     y = mouseClickPosition.y;
     oppositeClickPosition.x = -x;
     oppositeClickPosition.y = -y;
     Vector2 direction = oppositeClickPosition - mouseClickPosition;
     rb.AddForce(direction * force, ForceMode.Impulse);
}

2 个答案:

答案 0 :(得分:2)

您必须减去mousePosition和球的中心。

Vector3 clickedPosition = Camera.main.ScreenToWorldPoint (Input.mousePosition);
Vector3 ballCenter = ballTransform.position;

// If this goes the opposite direction just swap the values.
Vector3 forceDirection = (ballCenter  - clickedPosition).normalized;

ballRigidbody.AddForce (forceDirection * strength, ForceMode.Impulse);

通过这种方式找到方向并添加所需的力,如果您也想将距离用作因素,则不能使用normalized Vector3。

如果球有对撞机,您可以在OnMouseDown上正确捕获该事件

https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnMouseDown.html

答案 1 :(得分:0)

这可能会有所帮助:  https://answers.unity.com/questions/681698/vector-between-two-objects.html 它说明了如何在3D模式下执行此操作,但该想法适用于两种情况。

在这种情况下,您应该使用球的位置而不是相反的ClickPosition:

Vector2方向= transform.position-mouseClickPosition;

(如果未将此脚本附加到球上,则将transform.position替换为球的位置)

希望有帮助!