【问题标题】:How to keep velocity constant when object travels at peak speed当物体以峰值速度行进时如何保持速度恒定
【发布时间】:2017-05-20 02:54:38
【问题描述】:

出于学习目的,我正在使用 Unity 2D 开发一个项目。这是一场乒乓球比赛。我有它的材料,所以它每次弹跳时都会跑得更快。它的材料唯一的问题是它的速度失控并出现故障。我想找到阻止它的方法。

例如,我想知道如何在球达到峰值速度时保持恒定速度,例如 15f。这是一个Rigidbody2d 对撞球。

【问题讨论】:

    标签: c# unity3d constants collider


    【解决方案1】:

    正如post 中所建议的,您可以控制 你的刚体使用Vector2.ClampMagnitude 方法,同时在你的OnFixedUpdate() 中跟踪它。 为了您的方便,我在我引用的帖子中提供了代码。我编辑了引用帖子中提供的代码以匹配 API 的最新更改:

    float maxVelocity = 10;
     void FixedUpdate()
     {
     rigidbody2D.velocity = Vector2.ClampMagnitude(rigidbody2D.velocity, 
      maxVelocity);
     }
    

    【讨论】:

    • 很抱歉,但是这段代码已经过时了,即使我更新了它,它也给了我三个 Unity 错误,例如:错误 CS1502:UnityEngine.Vector2.ClampMagnitude 的最佳重载方法匹配(UnityEngine.Vector2, float) 有一些无效参数 错误 CS1503:参数 #1 无法将浮点表达式转换为类型“UnityEngine.Vector2” 错误 CS0131:赋值的左侧必须是变量、属性或索引器。
    • 更改了上面的代码以匹配 API 中的最新更改。试试看,让我知道。
    • 我用新代码替换了旧代码,得到了其中的 2 个:错误 CS1061: Type UnityEngine.Component' does not contain a definition for velocity' 并且找不到扩展方法 velocity' of type UnityEngine.Component'。您是否缺少程序集参考?你有什么想法吗?很抱歉一直打扰您。
    • 上面的代码假设变量rigidbody2D是RigidBody2D类型。你的情况是这样吗?
    • 是的。好的,所以我将代码更新为刚刚更新的最新 AI。对于任何需要的人,这是代码:` void FixedUpdate() { GetComponent().velocity = Vector2.ClampMagnitude(GetComponent().velocity, maxVelocity); } `
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多