Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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
C# 跳弹dо;n';t wо;rk pr和#x43E;佩里_C#_Unity3d - Fatal编程技术网

C# 跳弹dо;n';t wо;rk pr和#x43E;佩里

C# 跳弹dо;n';t wо;rk pr和#x43E;佩里,c#,unity3d,C#,Unity3d,嗨,我想为我的子弹做弹跳。但当我的子弹与墙壁相撞时,子弹开始沿着墙壁飞行: 我做错了什么?以下是我的代码部分: public Rigidbody2D rb; Vector2 m_dir; private void Start() { m_dir = rb.GetRelativeVector(Vector2.right); rb.velocity = m_dir * speed; } void OnCollisionEnter2D(

嗨,我想为我的子弹做弹跳。但当我的子弹与墙壁相撞时,子弹开始沿着墙壁飞行:

我做错了什么?以下是我的代码部分:

public Rigidbody2D rb;
    Vector2 m_dir;

private void Start()
    {

        m_dir = rb.GetRelativeVector(Vector2.right);
        rb.velocity = m_dir * speed;
    }

 void OnCollisionEnter2D(Collision2D col)
    {
        if (col.gameObject.tag == "Wall")
        {
            Vector2 _wallNormal = col.contacts[0].normal;
            m_dir = Vector2.Reflect(rb.velocity, _wallNormal).normalized;
            Debug.Log("Collide!"); // debug works
            rb.velocity = m_dir * speed;
        }
    }

项目符号检查器-
CircleCollider2D
+
Rigidbody2D
。墙壁检查器-
boxCollizedR2D
+
刚体2D(运动学)
首先:
Unity physics中的默认行为应该已经在没有您帮助的情况下从墙上弹回子弹了。
由于子弹对撞机是圆形的,它不应该以随机方向飞行

问题的原因:
您遇到的问题似乎来自调用方法的顺序。
基本上,统一物理首先解决这个物理框架的碰撞,然后调用所有OnCollisionCenter方法。()
这会导致你的rb.velocity已经是弹跳速度。
现在,当计算速度指向远离墙壁的反射角时,将得到向内的速度。
本质上,你的子弹不断地从墙上弹回,但你在每一帧中都会改变方向回到墙上

如何解决:
使用速度代替rb.velocity。
这是撞击时记录的速度,而不是改变的速度。
注意:因为它是相对于一个静止的物体,所以你得到了绝对速度

m_dir = Vector2.Reflect(rb.velocity, _wallNormal).normalized;
变成

m_dir = Vector2.Reflect(-col.relativeVelocity, _wallNormal).normalized;

没有解决。现在是向下,而不是向上(看截图)你指的是哪个截图?我没有看到任何显示子弹落下的截图。在问题中。但子弹是落下的,而不是上升的。文件不清楚谁是相对速度的始作俑者。好像是墙。只要否定相对性,它就会起作用。请让我知道它是否有用,然后我可以更正我的答案。是的,它有效!我很高兴。回答正确,然后我会接受这个答案