【问题标题】:Unity3D - Move an object to the opposite direction by clicking on itUnity3D - 通过单击将对象移动到相反的方向
【发布时间】:2018-08-22 20:59:27
【问题描述】:

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

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    你必须减去 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);
    

    这样你找到方向并添加你想要的力量,如果你想使用距离作为因素,你不能使用normalizedVector3。

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

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

    【讨论】:

    • 谢谢老兄,它成功了!我遇到了一些问题,因为当我获得鼠标点击位置时,我使用的是 ScreenToViewportPoint 而不是 ScreenToWorldPoint。
    【解决方案2】:

    这可能会有所帮助: https://answers.unity.com/questions/681698/vector-between-two-objects.html 它解释了如何在 3D 中做到这一点,但这个想法适用于两者。

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

    Vector2 方向 = transform.position - mouseClickPosition;

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

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      相关资源
      最近更新 更多