c# - 弹跳一段时间后所有的幅度和速度都为 0 并停止
问题描述
我试图简单地让一个球以恒定的速度弹跳,而没有任何无限的弹跳。为了避免无限弹跳,我在碰撞事件中的每次弹跳上添加了一些漂移,如下所示:
private void OnCollisionEnter2D(Collision2D collision)
{
Vector2 veclocityTweak = new Vector2(Random.Range(0f, 0.2f), Random.Range(0f, 0.2f));
rigigidBody2D.velocity += veclocityTweak;
}
这工作正常。不完美。但我真正的问题是球突然停止,rigidBody2D.velocity 设置为 (0.0, 0.0) 以及幅度。
我试图通过在更新函数中运行的这个函数来检查速度来防止这种情况。这个想法是它应该防止球的速度变为 0,但过一会儿仍然会发生这种情况:
private void checkVelocity()
{
Vector2 vel = rigigidBody2D.velocity;
float minSpeed = 0.8f;
if (vel.magnitude < minSpeed)
{
float multipl = Random.Range(-1.0f, 1.0f);
rigigidBody2D.velocity = vel.normalized * multipl;
}
}
我怎样才能防止球停止?
解决方案
我建议这样做:
float minVelocity = 10;
float maxTurn = 10;
void OnCollisionEnter2D (Collision2D collision)
{
Quaternion randomRotation = Quaternion.Euler(0, 0, Random.Range(-maxTurn, maxTurn));
rb.velocity = randomRotation * (rb.velocity.normalized * minVelocity);
}
此代码将球的速度设置为之前的速度,但幅度为minVelocity
. 它还会将该向量旋转随机度数,以使其在不同方向反弹。
推荐阅读
- asp.net - 在电子邮件确认中同步两个用户表
- sbt - “sbt run”log4j2 配置(flink)
- angular - 复选框未按预期选中/取消选中
- post - 发送带有附件的 POST 请求在 Python 中有效,但在 Cypress 中无效(错误 500)
- python - 等到 send_keys 完成单击按钮(使用 Selenium)
- angular - 如何管理具有不变性的对象数组?
- python - 为什么我的 find_element_by_id 会出现 NoSuchElementException?
- android - 如何防止那些不看广告就关闭广告的人在 Cordova 上获得奖励?
- javascript - Javascript sort an array of objects by comparing with a certain condition
- php - 函数 Illuminate\Http\Request::has() 的参数太少,通过了 0