Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 统一2D反射/反弹_Unity3d_2d - Fatal编程技术网

Unity3d 统一2D反射/反弹

Unity3d 统一2D反射/反弹,unity3d,2d,Unity3d,2d,所以我正在制作一个2D平板游戏,在Unity中360°射击。 我希望我的子弹击中某物时能反射出来(想想台球) 如果子弹从天花板或地板上弹下来,下面的代码就起作用。问题是,当我从侧面击中物体时,子弹的新方向正好偏离180° private void OnTriggerEnter2D(Collider2D col) { if (col.gameObject.tag != "Player" && col.gameObject.tag != "Bullet") {

所以我正在制作一个2D平板游戏,在Unity中360°射击。 我希望我的子弹击中某物时能反射出来(想想台球)

如果子弹从天花板或地板上弹下来,下面的代码就起作用。问题是,当我从侧面击中物体时,子弹的新方向正好偏离180°

    private void OnTriggerEnter2D(Collider2D col)
{
    if (col.gameObject.tag != "Player" && col.gameObject.tag != "Bullet")
    {
        ContactPoint2D[] contacts = new ContactPoint2D[10];
        col.GetContacts(contacts);

        Vector3 currentBulletMoveVector = transform.right;
        Vector2  newBulletMoveVector = Vector2.Reflect(currentBulletMoveVector, contacts[0].normal);

        transform.right = new Vector3(newBulletMoveVector.x, newBulletMoveVector.y, 0);
    }
}

关于我哪里出了问题或如何解决这个问题,有什么建议吗?

可能重复的,虽然你会使用2D逻辑,但不幸的是,这个问题的答案没有帮助,因为我没有使用刚体和速度。你在哪里跟踪子弹的方向?这总是变换。对吗?另外,当你说“新方向”关闭时,你的具体意思是移动方向关闭了,还是只是变换的方向错误,子弹的移动方向正确?是的,我的子弹的移动方向总是变换。对。为了设置新方向,我将transform.right设置为一个新值。我刚刚发现contacts[0]。normal总是返回v(0/-1),这解释了奇怪的行为。但现在我不知道为什么我得到了错误的法线…看到了吗