我正在使用虚拟现实在Unity和C#中进行弓箭游戏。我想在拍摄之前将箭头放在弓的手柄上。现在我手柄上有一个盒子对撞机,箭头上有另一个对撞机。它工作正常,直到您将箭头推过手柄。它会出现故障一秒钟然后它就会通过(就像没有剪辑一样)。
在我的VR课程中,我们了解到你可以向对象添加法向力或“后推力”,以防止其他物体通过它。我不希望这会逐字地推回箭头(这会消除现实主义)。有没有办法向对象添加力场?其他物体在任何时候都被轻微排斥而不是一次性爆发力?
这里的代码我已经尝试了一些但有点帮助。这是附在弓上的脚本:
private void OnCollisionEnter(Collision collision) {
if (collision.gameObject.tag == "Arrow") {
Rigidbody arrowBody = collision.gameObject.GetComponent<Rigidbody>();
arrowBody.AddForce(this.transform.TransformDirection(Vector3.left) * 100f);
}
}
我应该补充说,使用固定关节将箭头固定在“手”中,因此在弓形手柄上添加第二个固定关节不是一种选择(手的关节最终失效并且箭头落到地面上没有被任何一个联合所持有。)
答案 0 :(得分:1)
我最终在碰撞时将箭头的父变换改为弓形,然后让它从控制器的固定关节上移开。它现在完美地结合在一起。
提供的代码不多:
private void OnCollisionEnter(Collision col)
{
if (col.gameObject.tag == "Bow")
{
this.transform.parent = col.gameObject.transform;
GameObject.Find("Controller").GetComponent<FixedJoint>().connectedBody = null;
}
}
答案 1 :(得分:0)
除非出于特定原因,否则我不会使用物理学。
您只需通过脚本更改箭头的方向,使其指向正确的方向。
例如,您可以将一个空的Transform
子项添加到弓箭中,表示箭头“#34”触及的位置。弓。
然后你可以在箭头上添加一个脚本,将其移回到手的位置,并将其方向更改为look at Transform
。