Unity赛车码表原理近⽇在制作赛车游戏时,遇到了码表,较为有趣,遂记录如下。
⾸先观察码表速度0mph时,指针Roatation的z轴⾓度为-133
然后140mph时的z轴⾓度为-43,则
由 140 mph = 270°
=> 1 mph = 270/140 °
=> α mph = α * 270 / 140 °
之间的夹⾓正好为90度,那么按顺时针的话,从0mph到140mph的欧拉⾓为270度。
夹⾓计算出来后,需要跟据速度来换算成⾓度,推导如下:所以重要结论 每公⾥的欧拉⾓为 α * 270 / 140 °换算成代码:
// 获取码表度数
float newZRotation = zRotation - currentSpeed * (270 / 140f);
这边顺便讲⼀下,通过轮胎的⾓速度获取车⼦整体的位移速度。
// 获取速度
grants
float speed = Mathf.Round(flWheelCollider.rpm * (flWheelCollider.radius * 2 * Mathf.PI) * 60 / 1000);
flWheelCollider是轮胎的WheelCollider,rpm是旋转速度,⼀分钟多少圈;之后这个2ΠR应该⼤家都能看懂,也就是周长;
乘以 60 / 1000,是千⽶每⼩时的单位。那么如此⼀来就获取了位移速度,通过上⾯提到的速度换成为⾓度的公式就可以实现了。完整代码:连同
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpeedDisplay : MonoBehaviour
{
public WheelCollider flWheelCollider;
private UILabel label;
六级分数查询public float currentSpeed;
span80public Transform pointContainer;
private float zRotation;
// Start is called before the first frame update
2012年大学排名
地心游记1>春望的翻译void Start()
{
label = this.GetComponent<UILabel>();
zRotation = pointContainer.eulerAngles.z;
}
// Update is called once per frame
void Update()
{
receive的用法/video player
/ 获取速度
float speed = Mathf.Round(flWheelCollider.rpm * (flWheelCollider.radius * 2 * Mathf.PI) * 60 / 1000);
少儿英文歌曲if (speed < 0) speed = Mathf.Abs(speed);
< = speed.ToString();
// 获取码表度数
float newZRotation = zRotation - currentSpeed * (270 / 140f);
pointContainer.eulerAngles = new Vector3(0, 0, newZRotation);
}
}