c# - 为什么子弹每次碰到墙壁时弹跳的速度都不一样?
问题描述
我正在 Unity 2D 中制作游戏,我希望玩家从枪中射出的子弹在击中墙壁后弹跳。我为子弹制作的脚本是这样的:
public float speed = 40f;
public Rigidbody2D rb;
private Vector2 direction;
public void Start()
{
rb.velocity = transform.right * speed;
}
private void OnCollisionEnter2D(Collision2D collision)
{
Vector2 inNormal = collision.contacts[0].normal;
direction = Vector2.Reflect(rb.velocity, inNormal);
rb.velocity = direction * speed;
}
我在碰撞器上放置了一个 2D 物理材料,它具有 1.15 的摩擦力和 0.1 的弹力,以使球弹跳(因为没有材料之前它不会弹跳)但是现在每次射击时球都会以不同的速度从墙上弹回. 有时子弹的速度是如此之快,以至于它穿过墙壁,这根本不是故意的。相反,我希望球以相同的速度从一堵墙反弹到另一堵墙,但我不知道如何解决这个问题。有人能帮我吗?
解决方案
你不需要代码的这个 onCollision 部分来让它反弹,这就是拥有刚体、对撞机和材质的关键。unity为你计算。
使子弹动态体,如果它移动得太快而无法检测到碰撞变化 刚体中的碰撞检测“(在墙上,但也可能在子弹上)从离散到连续。它应该反弹。如果角度和速度始终相同,结果也将始终是一样。我怀疑你有奇怪的结果,因为你压倒了实际的结肠。
推荐阅读
- javascript - 任务队列中哪个任务(setTimeout 或单击事件)优先?
- javascript - @type 中的 JSDoc 引用对象变量
- java - Apache POI:如何在数据透视的行标签日期中设置 THIS_YEAR 过滤器
- git - 错误:无法生成 C:/Windows/system/32/OpenSSH/ssh.exe
- javascript - 如何通过单击孵化器 eCharts 中的轴标签刻度来切换整个组?
- java - 如何使用 PDFBox 从 PDF 文档中删除链接
- git - 在执行“git submodule add...”时,如何获取有关两个项目的结帐版本的信息?
- python-3.x - 从 pandas 数据框中另一列中的值创建变量
- java - 如何将sql本机查询结果映射到spring jpa存储库中的DTO?
- reactjs - Reactjs 和 Yup,react-hook-form 集成的问题