上一章地址:UnityStandardAsset工程、源码分析_1_赛车游戏[玩家控制]_输入系统
在上一章里,我们了解了整个车辆控制的大体流程,并且分析了一下输入系统,也就是从玩家的手柄\手机倾斜输入作用到车辆核心控制逻辑的过程中,调用了那些类,这些类又是怎样协同工作的。那么这章我们来分析车辆最主要的核心控制逻辑,车辆如何使用调整好的输入数据,根据当前车辆状态,计算出下一帧的车辆状态。
核心控制逻辑
上一章里,我们了解到,车辆核心状态的控制一共使用了三个类,分别为CarController、CarUserControl、CarAudio。其中,CarController是核心控制逻辑,CarUserControl是用户输入接口,负责调用CarController中的Move方法进行状态更新。CarController调用CarAudio和车辆轮胎效果控件来实现各种效果。
private void FixedUpdate()
{
float h = CrossPlatformInputManager.GetAxis("Horizontal"); // 上章分析的内容
float v = CrossPlatformInputManager.GetAxis("Vertical");
#if !MOBILE_INPUT
float handbrake = CrossPlatformInputManager.GetAxis("Jump");
m_Car.Move(h, v, v, handbrake); // 这章重点分析的内容
#else
m_Car.Move(h, v, v, 0f);
#endif
}
分析完了CarUserControl的内容,可以发现它每一帧都从输入类中读取数据,再使用这些数据调用CarController的Move方法,我们这章就来分析CarController的最主要的方法Move,看看为了更新车辆状态,CarController都做了哪些工作。
先看Move的定义
public void Move(float steering, float accel, float footbrake, float handbrake);
steering是舵值,accel是加速值,footbrake脚刹,handbrake脚刹
函数首先调用了如下过程,用于同步Mesh与碰撞盒的转向状态:
// WheelCollider和轮胎的Mesh是两个东西
// 所以碰撞盒的Steer变化,也就是轮胎转向时,Mesh是不会发生转向的
// 所以需要再这里根据碰撞盒的转向数据重新设置Mesh的转向
// 使得外观上看起来轮胎旋转了一样
for (var i = 0; i < 4; i++)
{
Quaternion quat;
Vector3 position;
m_WheelColliders[i].GetWorldPose(out position, out quat); // 获取碰撞盒的世界坐标和世界转向
m_WheelMeshes[i].transform.position = position; // 设置Mesh的转向和位置
m_WheelMeshes[i].transform.rotation = quat;
}
再调用如下过程处理输入数据,使其符合规范:
// Steer直译为舵,也就是方向盘
// steering为[-1,1]上的值,而在WheelCollider上读取时需要将这个值映射到[-m_MaximumSteerAngle,m_MaximumSteerAngle]上
// 也就是以角度的形式来描述轮胎的转向程度,并且旋转的角度最大值为m_MaximumSteerAngle
// 在这里的一系列Clamp是在将输入数据调整到可接受的范围内
// clamp input values
steering = Mathf.Clamp(steering, -1, 1); // 舵输入
AccelInput = accel = Mathf.Clamp(accel, 0, 1); // 加速输入
BrakeInput = footbrake = -1*Mathf.Clamp(footbrake, -1, 0); // 倒车输入
handbrake = Mathf.Clamp(handbrake, 0, 1); // 手刹,暂时不知道输入来自哪里
根据输入的舵值让碰撞盒的舵值改变:
// 这里就是上面所说的将值[-1,1]映射到角度上
// Set the steer on the front wheels.
// Assuming that wheels 0 and 1 are the front wheels.
m_SteerAngle = steering*m_MaximumSteerAngle;
m_WheelColliders[0

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



