我是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);
}
答案 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替换为球的位置)
希望有帮助!