拉二胡的猫 2023-01-26 14:56 采纳率: 25%
浏览 186
已结题

Unity用刚体MovePosition移动速度太慢怎么办?

用rigidbody2d.MovePosition控制刚体移动,设置速度为3/s,但是实际运行游戏控制人物移动的速度却比设定的慢(只有设定的1/3). 请大家帮忙看看是不是设置或者代码有问题。万分感谢!!
Unity版本 2021.3.16f1c1

在Unity里移动人物transform位置改变速度只有1/3格每秒,但是代码里写的是3/秒,是不是unity里设置错误或者代码错误?

img

public class RubyController : MonoBehaviour
{
    private Rigidbody2D rigidbody2d;
    // Start is called before the first frame update
    void Start()
    {
        rigidbody2d = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        float xMove = Input.GetAxis("Horizontal");
        float yMove = Input.GetAxis("Vertical");
        Vector2 pos = transform.position;
        pos.x = pos.x + 3.0f * xMove * Time.deltaTime;
        pos.y = pos.y + 3.0f * yMove * Time.deltaTime;
        rigidbody2d.MovePosition(pos);
    }
}
我刚体阻力也是0,我还猜想是不是moveposition移动的坐标和transform坐标比例不一致,但是我不知道怎么设置。请求大家们帮助一下我吧!!感谢again!
  • 写回答

1条回答 默认 最新

  • 快撑死的鱼 2023-01-26 18:38
    关注

    回答不易,求求您采纳点赞哦

    有几件事可能会导致移动缓慢。

    • 首先要检查的是移动速度是否由 Unity 的 Time.timeScale 值缩放。该值可用于减慢或加快所有游戏中的物理和动画。确保将 Time.timeScale 设置为 1。

    • 另一件要检查的事情是 3.0f 值是否受到游戏中任何其他缩放值的影响。例如,如果将刚体的质量或阻力设置为较高的值,则会减慢物体的运动速度。确保刚体的质量和阻力设置为默认值。

    • 确保在 Unity 的输入管理器中正确设置了输入轴。确保“水平”和“垂直”轴映射到控制器上的正确键或按钮。

    • Update函数每帧调用一次,有可能帧率低,会影响角色的移动。您可以在 Unity 编辑器(编辑 > 项目设置 > 质量)中检查帧速率,或使用 Time.deltaTime 和 Time.fps 在运行时检查帧速率。

    • 另外,您可以尝试使用 Rigidbody2D.AddForce() 方法而不是 MovePosition() 方法,这样可以更精确地进行物理模拟。

    根据您提供的代码,移动缓慢的一个可能原因可能是您正在使用 Update 函数移动刚体。Update 函数每帧调用一次,其目的是更新游戏状态和处理用户输入。但是,不建议将 Update 函数用于物理计算,因为它不能保证以一致的帧速率运行。相反,您应该使用 FixedUpdate 函数,该函数在固定时间步调用并且用于物理计算。

    以下是如何使用 FixedUpdate 函数移动刚体的示例:

    void FixedUpdate()
    {
        float xMove = Input.GetAxis("Horizontal");
        float yMove = Input.GetAxis("Vertical");
        Vector2 movement = new Vector2(xMove, yMove);
        rigidbody2d.MovePosition(rigidbody2d.position + movement * 3.0f * Time.fixedDeltaTime);
    }
    

    在本例中,使用水平和垂直输入轴计算“运动”Vector2,然后使用 rigidbody2d.MovePosition() 方法通过“运动”向量乘以速度和 Time.fixedDeltaTime 来移动刚体。这确保了无论帧速率如何,运动都是一致的。

    • 另一件要检查的事情是物理更新是否与帧速率不同步,您可以尝试增加物理时间步长(编辑 > 项目设置 > 时间)以查看这是否会提高性能。

    • 检查是否有任何其他脚本或组件影响刚体的移动并确保 Unity 编辑器中的设置正确设置也是一个好主意。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月5日
  • 已采纳回答 1月28日
  • 创建了问题 1月26日

悬赏问题

  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程