【发布时间】:2017-03-30 20:02:53
【问题描述】:
我正在 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);
}
}
我应该补充一点,箭是用固定关节握在“手中”的,所以在弓把上添加第二个固定关节不是一种选择(手的关节最终失效,箭头掉到地上没有被任何一个关节持有)。
【问题讨论】:
-
考虑在对象周围添加一个触发对撞机 - 当其他对象进入触发对撞机时,对这些对象施加与它们与对撞机中心的距离成比例的力。如果他们离开触发对撞机,请停止对他们施加力。
-
添加任何大小的力仍然允许推进
标签: c# unity3d game-physics virtual-reality