投掷物体

时间:2016-01-14 00:13:23

标签: c# unity3d

我有一只胳膊,它工作得很好但是,当我试图扔一个物体时,它不起作用。

Example

经过一番思考,我做到了这一点:

cube.GetComponent<Rigidbody2D>().velocity = player.GetComponent<Rigidbody2D>().velocity;

这件事发生了:

Example

我试图将一个刚体附着在手臂上,但是他在重力作用下坠落,我试图关闭重力,但它没有用。

我的问题是,如何让它与手臂一起使用?

编辑:整个代码以便更好地解释(它附在手上):

void Update () {
        Collider2D touch = Physics2D.OverlapCircle(touchDetect.position, 0.01f, objectLayer);
        mao1.SetBool("Ligado", ligado);


        if (Input.GetKey(KeyCode.LeftShift)) {
            ligado = true;
        } else {
            ligado = false;
        }

        if (Input.GetKey(KeyCode.LeftShift) && touch != null && ligado == true)
        {
            touch.gameObject.transform.parent = this.transform;
            cubo.GetComponent<Rigidbody2D>().isKinematic = true;
            Physics2D.IgnoreLayerCollision(10, 12, true);
            cubo.GetComponent<Rigidbody2D>().velocity = player.GetComponent<Rigidbody2D>().velocity;

        }
        else if (touch != null && ligado == false)
        {
            touch.gameObject.transform.parent = null;
            cubo.GetComponent<Rigidbody2D>().isKinematic = false;
            Physics2D.IgnoreLayerCollision(10, 12, false);

        }        

    }

1 个答案:

答案 0 :(得分:1)

如果我理解的话,当立方体与手臂尖端接触时按下LeftShift并将立方体“粘”到手臂上,然后当你释放LeftShift时,你想要将立方体扔向某个方向。 / p>

您可以使用 Rigidbody2D 中的 AddForce 函数,使用精心计算的向量来实现此目的:

OSStatus status = noErr;
NSMutableDictionary *privateKeyAttr = [[NSMutableDictionary alloc] init];
NSMutableDictionary *publicKeyAttr = [[NSMutableDictionary alloc] init];
NSMutableDictionary *keyPairAttr = [[NSMutableDictionary alloc] init];
//.....................

只需在 greenCubeCenter 变量中放置一个多维数据集中心的变换。

这个算法应该(如果我理解了一切的话,再次)将对象从Cube方向远离你的立方体 - 用ThrowForceMagnitude的力量推动手臂的尖端(你需要在某处定义) )

更新:

好的,在理解了所有内容之后,这里有一个更完整的答案:

// In the script outside of a function
public Transform greenCubeCenter;

// In your Update function
else if (touch != null && ligado == false)
{
    touch.gameObject.transform.parent = null;
    cubo.GetComponent<Rigidbody2D>().isKinematic = false;
    Physics2D.IgnoreLayerCollision(10, 12, false);

    // Below the important part
    Vector2 force = (touchDetect.position - greenCubeCenter.position).normalized * ThrowForceMagnitude; // ThrowForceMagnitude needs to be defined somewhere
    touch.GetComponent<Rigidbody2D>().AddForce(force);
}

这不是一个完美的代码,从算法来讲(即使是一个单词)它应该是正确的,但你应该逐行深入了解并理解所有内容(我认为我评论得足够多)。

请注意,我删除了对Cubo的引用,我认为你可以在objectLayer中获取任何内容。