C# 以KPH为单位移动变换并以KPH为单位获得变换速度
我正在以KPH的速度移动一个变换,并希望以KPH的速度获得它的速度(用于测试目的) 以下是以KPH为单位移动变换的方法。它是160 KHPC# 以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()
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;