Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以KPH为单位移动变换并以KPH为单位获得变换速度_C#_Unity3d_Physics - Fatal编程技术网

C# 以KPH为单位移动变换并以KPH为单位获得变换速度

C# 以KPH为单位移动变换并以KPH为单位获得变换速度,c#,unity3d,physics,C#,Unity3d,Physics,我正在以KPH的速度移动一个变换,并希望以KPH的速度获得它的速度(用于测试目的) 以下是以KPH为单位移动变换的方法。它是160 KHP transform.Translate(Vector3.forward * 160f / 3.6f * Time.deltaTime); 这里是以KPH为单位获取速度的代码片段 public double Speed; private Vector3 startingPosition, speedvec; void Start()

我正在以KPH的速度移动一个变换,并希望以KPH的速度获得它的速度(用于测试目的)

以下是以KPH为单位移动变换的方法。它是160 KHP

 transform.Translate(Vector3.forward * 160f / 3.6f * Time.deltaTime);
这里是以KPH为单位获取速度的代码片段

public double Speed;
    private Vector3 startingPosition, speedvec;

    void Start()
    {
        startingPosition = transform.position;
    }

    void FixedUpdate()
    {
        speedvec = ((transform.position - startingPosition) / Time.deltaTime);
        Speed = (int)(speedvec.magnitude) * 3.6; 

        startingPosition = transform.position;
        //text.text = Speed + "km/h";  // or mph

    }
现在有人能告诉我问题出在哪里吗要么我没有正确移动变换,要么以kph计算的速度不正确?

如何以KPH为单位移动对象,并以KPH为单位获取其速度。

这是做什么的?:)

我读到:

/*distance vector from start position*/ totalDistance=(transform.position - startingPosition).magnitude
为什么会这样

/ Time.deltaTime
最后一帧中的距离/时间?(deltaTime=最后一帧执行时间)

因此,解决方案: 如果您使用的是恒速:

speed =totalDistance/totalTime;//distance since Start()/time since Start()
如果您不使用恒定速度,则应在一帧中注册位置,并使用其在下一帧中的位置计算速度,因此您将有:

speedInThisFrame=distanceInThisFrame/Time.deltaTime;
我将如何做:

  • 使用刚体
  • 使用刚体的速度来移动它
  • 它是一个向量,所以
    rb.velocity=transform.forward*speed*Time.deltaTime
    移动对象的刚体//速度表示距离,单位为m,刚体将在1秒内移动

  • 速度(单位:m/s)=刚体、速度、量级


如果您的世界单位是米,那么这看起来不错。除了这个
(int)
演员之外。如果帧速率变化很大,则可能会出现不准确的情况,具体取决于调用这些方法的顺序。你得到了什么结果?是的,我的世界单位是米。Unity3d游戏-电子测量以米为单位。但问题是两者的速度不一样。最终的获取速度不是我设置的160。@NicoSchertler我的帧速率是稳定的,没有太大的变化。我正在更新事件中设置速度(KPH)并在最新更新事件中获得速度。你得到的速度是多少而不是160 KPH?它的范围不同,有时是90 94 150 200,变化很快
rb.velocity=transform.forward*speed*time.deltaTime
-左、右单位不匹配…这是一个任务,不是一个方程式:)(Vector3 velocity=Vector3 vectorfloatfloat)或者我不理解你的评论?
rb。速度的单位是速度(=距离/时间),而RHS表达式的单位是速度x时间(=距离)。这是你想要的吗?rb.速度是一个矢量,它的大小将以m/s表示速度,这是我定义的速度。我的点是,
速度*时间。deltaTime
有距离单位,而不是速度单位。
speedInThisFrame=distanceInThisFrame/Time.deltaTime;