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# 加入“;力场“;要统一对象以避免碰撞器剪裁?_C#_Unity3d_Game Physics_Virtual Reality - Fatal编程技术网

C# 加入“;力场“;要统一对象以避免碰撞器剪裁?

C# 加入“;力场“;要统一对象以避免碰撞器剪裁?,c#,unity3d,game-physics,virtual-reality,C#,Unity3d,Game Physics,Virtual Reality,我正在用虚拟现实制作一个Unity和C#中的弓箭游戏。在你射击之前,我要把箭放在弓柄上。现在我在手柄上有一个长方体碰撞器,在箭头上有另一个碰撞器。它工作正常,直到你把箭头推过手柄。它会出现一秒钟的小故障,然后就通过了(就像没有剪辑一样) 在我的虚拟现实课程中,我们学到了可以向一个物体添加法向力或“推回力”,以防止其他物体通过它。我不想让它真的把箭头向后推(那样会消除现实主义)。有没有办法向对象添加力场?其他物体在任何时候都被很轻的击退,而不是一次性的爆发力 下面是我已经尝试过的代码,虽然有点帮助

我正在用虚拟现实制作一个Unity和C#中的弓箭游戏。在你射击之前,我要把箭放在弓柄上。现在我在手柄上有一个长方体碰撞器,在箭头上有另一个碰撞器。它工作正常,直到你把箭头推过手柄。它会出现一秒钟的小故障,然后就通过了(就像没有剪辑一样)

在我的虚拟现实课程中,我们学到了可以向一个物体添加法向力或“推回力”,以防止其他物体通过它。我不想让它真的把箭头向后推(那样会消除现实主义)。有没有办法向对象添加力场?其他物体在任何时候都被很轻的击退,而不是一次性的爆发力

下面是我已经尝试过的代码,虽然有点帮助,但没有太多帮助。这是一个附在弓上的脚本:

private void OnCollisionEnter(Collision collision) {

    if (collision.gameObject.tag == "Arrow") {
        Rigidbody arrowBody = collision.gameObject.GetComponent<Rigidbody>();
        arrowBody.AddForce(this.transform.TransformDirection(Vector3.left) * 100f);
    }

}
private void OnCollisionEnter(冲突){
如果(collision.gameObject.tag==“箭头”){
刚体arrowBody=collision.gameObject.GetComponent();
arrowBody.AddForce(此.transform.TransformDirection(Vector3.左)*100f);
}
}

我可能应该补充一点,箭头是用一个固定关节固定在“手”上的,因此在弓柄上增加第二个固定关节不是一个选项(手的关节最终会失效,箭头落在地上而没有被任何一个关节固定住)。

除非有特殊原因,否则我不会使用物理学

您可以通过脚本更改箭头的方向,使其指向正确的方向

例如,您可以将一个子元素empty
Transform
添加到表示箭头“接触”弓的点的弓中


然后,您可以向箭头添加一个脚本,该脚本将箭头的背部移动到手所在的位置,并将其方向更改为所述的
变换

我最终在碰撞时将箭头的父变换更改为弓,然后让它从控制它的固定关节离开。现在它能很好地粘合

提供的代码不多:

private void OnCollisionEnter(Collision col)
{
    if (col.gameObject.tag == "Bow")
    {
            this.transform.parent = col.gameObject.transform;
            GameObject.Find("Controller").GetComponent<FixedJoint>().connectedBody = null;      
    }
}
专用void onCollisionCenter(冲突列)
{
如果(col.gameObject.tag==“Bow”)
{
this.transform.parent=col.gameObject.transform;
GameObject.Find(“控制器”).GetComponent().connectedBody=null;
}
}

考虑在对象周围添加一个触发碰撞器-当其他对象进入触发碰撞器时,对这些对象施加一个与其到碰撞器中心的距离成比例的力。如果它们离开触发对撞机,停止对它们施加力。添加任何大小的力仍然允许推挤通过