繁体   English   中英

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

[英]Unity3D - Move an object to the opposite direction by clicking on it

我是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);
}

您必须减去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

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

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

Vector2方向= transform.position-mouseClickPosition;

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

希望有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM