将 "force field" 添加到 Unity 中的对象以避免对撞机剪裁?
Adding "force field" to object in Unity to avoid collider clipping?
我正在使用虚拟现实在 Unity 和 C# 中制作弓箭游戏。我想让箭在你射之前停在弓柄上。现在我在手柄上有一个盒子碰撞器,在箭头上有另一个碰撞器。它工作正常,直到您将箭头推过手柄。它出现故障一秒钟然后就通过了(就像没有剪辑一样)。
在我的 VR class 中,我们了解到您可以向对象添加法向力或 "push back force" 以防止其他对象穿过它。不过,我不希望它从字面上推回箭头(那样会消除现实主义)。有没有办法给物体添加力场?其他物体在任何时候都被非常轻微地排斥而不是一次爆发力?
这是我已经尝试过的代码,它有一点帮助,但帮助不大。这是附在弓上的脚本:
private void OnCollisionEnter(Collision collision) {
if (collision.gameObject.tag == "Arrow") {
Rigidbody arrowBody = collision.gameObject.GetComponent<Rigidbody>();
arrowBody.AddForce(this.transform.TransformDirection(Vector3.left) * 100f);
}
}
我可能应该补充一点,箭头是使用固定关节固定在 "hand" 中的,因此在弓柄上添加第二个固定关节不是一种选择(手的关节最终失效,箭头落在地上,没有被任何一个关节抓住。
除非有特定原因,否则我不会为此使用物理学。
您可以通过脚本更改箭头的方向,使其指向正确的方向。
例如,您可以添加一个子空 Transform
到表示箭头所在点的弓 "touches" 弓。
然后您可以向箭头添加一个脚本,使其向后移动到手所在的位置并将其方向更改为 look at 表示 Transform
。
我最终将箭头的父转换更改为碰撞时的弓,然后将其从固定它的控制器的固定关节中释放出来。现在可以完美结合了。
提供的代码不多:
private void OnCollisionEnter(Collision col)
{
if (col.gameObject.tag == "Bow")
{
this.transform.parent = col.gameObject.transform;
GameObject.Find("Controller").GetComponent<FixedJoint>().connectedBody = null;
}
}
我正在使用虚拟现实在 Unity 和 C# 中制作弓箭游戏。我想让箭在你射之前停在弓柄上。现在我在手柄上有一个盒子碰撞器,在箭头上有另一个碰撞器。它工作正常,直到您将箭头推过手柄。它出现故障一秒钟然后就通过了(就像没有剪辑一样)。
在我的 VR class 中,我们了解到您可以向对象添加法向力或 "push back force" 以防止其他对象穿过它。不过,我不希望它从字面上推回箭头(那样会消除现实主义)。有没有办法给物体添加力场?其他物体在任何时候都被非常轻微地排斥而不是一次爆发力?
这是我已经尝试过的代码,它有一点帮助,但帮助不大。这是附在弓上的脚本:
private void OnCollisionEnter(Collision collision) {
if (collision.gameObject.tag == "Arrow") {
Rigidbody arrowBody = collision.gameObject.GetComponent<Rigidbody>();
arrowBody.AddForce(this.transform.TransformDirection(Vector3.left) * 100f);
}
}
我可能应该补充一点,箭头是使用固定关节固定在 "hand" 中的,因此在弓柄上添加第二个固定关节不是一种选择(手的关节最终失效,箭头落在地上,没有被任何一个关节抓住。
除非有特定原因,否则我不会为此使用物理学。
您可以通过脚本更改箭头的方向,使其指向正确的方向。
例如,您可以添加一个子空 Transform
到表示箭头所在点的弓 "touches" 弓。
然后您可以向箭头添加一个脚本,使其向后移动到手所在的位置并将其方向更改为 look at 表示 Transform
。
我最终将箭头的父转换更改为碰撞时的弓,然后将其从固定它的控制器的固定关节中释放出来。现在可以完美结合了。
提供的代码不多:
private void OnCollisionEnter(Collision col)
{
if (col.gameObject.tag == "Bow")
{
this.transform.parent = col.gameObject.transform;
GameObject.Find("Controller").GetComponent<FixedJoint>().connectedBody = null;
}
}