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

Мар*_*мов 2 c# unity-game-engine

我是 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);
}
Run Code Online (Sandbox Code Playgroud)

小智 5

您必须减去 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);
Run Code Online (Sandbox Code Playgroud)

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

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

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