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

C# Unity3D-通过单击将对象移动到相反方向,c#,unity3d,C#,Unity3d,我是Unity的新手,正在做一个简单的项目,但我被卡住了 所以我的想法是,当球员触到球的底部时,球会朝相反的方向移动。很像现实生活中,如果你在底部踢球,球会上升,但在2D版本中 我试着找到球员触球的相反点,通过减去原始点和相反点,然后用力移动球,得到一个向量,但不起作用 void MoveBall() { x = mouseClickPosition.x; y = mouseClickPosition.y; oppositeClickPosition.x = -x;

我是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);
}
这可能会有帮助: 它解释了如何在3D中实现这一点,但这两种方法都适用

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

Vector2方向=transform.position-鼠标单击位置

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


希望有帮助

您必须减去鼠标位置和球的中心

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);
通过这种方式,您可以找到方向并添加所需的力,如果您还想使用距离作为因子,则不能使用
规格化的
矢量3

如果球有一个对撞机,你可以在OnMouseDown上正确地捕捉到这个事件


谢谢你,伙计,成功了!我遇到了一些问题,因为当我获得鼠标点击位置时,我使用的是ScreenToViewportPoint,而不是ScreenToWorldPoint。