好吧,我正在开发一款游戏,在该游戏中,您可以在避免小行星的同时降落火箭船...很简单。我有两个UI文本元素,这些元素旨在显示当前的垂直和水平速度。我四处搜寻,并在统一功能方面空着,以获得2D刚性体的当前速度,所以我想到了:
void Update () {
shipVelocity = Mathf.Abs((lastPosition.y - spaceShip.transform.position.y) / Time.deltaTime);
shipAngularVelocity = Mathf.Abs((lastPosition.x - spaceShip.transform.position.x) / Time.deltaTime);
uiText = "Vertical Velocity: " + shipVelocity;
currentVelocityText.text = uiText;
uiText = "Horizontal Velocity: " + shipAngularVelocity;
currentAngularVelocityText.text = uiText;
lastPosition = spaceShip.transform.position;
}
基本上,它只能执行您的标准速度= delta位置/delta时间,但有问题。数字在整个地方弹跳,船降落并完全静止后,数字从0-1弹跳。当它飞行的数字从我认为的准确速度转变为0和后背时,数字迅速变化 - 如此之快,它基本上看起来像是在闪烁。
可能只是称呼它太快吗?IE。帧速率太高?如果是这样,我该如何减速?
thnx!
如果要更新刚体,则将更新逻辑放入" fixedupdate()"中很重要。此版本的更新以设定的速率调用(默认为50x/sec),因此应用于更新物理逻辑。链接:https://docs.unity3d.com/scriptreference/monobehaviour.fixedupdate.html
这在游戏中很常见,因为它将帧率(绘制/sec)与更新逻辑(更新/sec)分开,这意味着帧量滴的帧,游戏的基础物理学没有更改。