Синтаксис:
Используется csharp
using UnityEngine;
public class Car : MonoBehaviour {
private float m_horizontalInput;
private float m_verticalInput;
private float m_steeringAngle;
public WheelCollider frontDriverW, frontPassengerW;
public WheelCollider rearDriverW, rearPassengerW;
public Transform frontDriverT, frontPassengerT;
public Transform rearDriverT, rearPassengerT;
public float maxSteerAngle = 30;
public float motorForce = 50;
public void GetInput() {
++m_horizontalInput;
++m_verticalInput;
}
private void Steer() {
m_steeringAngle = maxSteerAngle * m_horizontalInput;
frontDriverW.steerAngle = m_steeringAngle;
frontPassengerW.steerAngle = m_steeringAngle;
}
private void Accelerate() {
frontDriverW.motorTorque = m_verticalInput * motorForce;
frontPassengerW.motorTorque = m_verticalInput * motorForce;
}
private void UpdateWheelPoses() {
UpdateWheelPose(frontDriverW, frontDriverT);
UpdateWheelPose(frontPassengerW, frontPassengerT);
UpdateWheelPose(rearDriverW, rearDriverT);
UpdateWheelPose(rearPassengerW, rearPassengerT);
}
private void UpdateWheelPose(WheelCollider _collider, Transform _transform) {
Vector3 _pos = _transform.position;
Quaternion _quat = _transform.rotation;
_collider.GetWorldPose(out _pos, out _quat);
_transform.position = _pos;
_transform.rotation = _quat;
}
private void FixedUpdate() {
GetInput();
Steer();
Accelerate();
UpdateWheelPoses();
}
}
public class Car : MonoBehaviour {
private float m_horizontalInput;
private float m_verticalInput;
private float m_steeringAngle;
public WheelCollider frontDriverW, frontPassengerW;
public WheelCollider rearDriverW, rearPassengerW;
public Transform frontDriverT, frontPassengerT;
public Transform rearDriverT, rearPassengerT;
public float maxSteerAngle = 30;
public float motorForce = 50;
public void GetInput() {
++m_horizontalInput;
++m_verticalInput;
}
private void Steer() {
m_steeringAngle = maxSteerAngle * m_horizontalInput;
frontDriverW.steerAngle = m_steeringAngle;
frontPassengerW.steerAngle = m_steeringAngle;
}
private void Accelerate() {
frontDriverW.motorTorque = m_verticalInput * motorForce;
frontPassengerW.motorTorque = m_verticalInput * motorForce;
}
private void UpdateWheelPoses() {
UpdateWheelPose(frontDriverW, frontDriverT);
UpdateWheelPose(frontPassengerW, frontPassengerT);
UpdateWheelPose(rearDriverW, rearDriverT);
UpdateWheelPose(rearPassengerW, rearPassengerT);
}
private void UpdateWheelPose(WheelCollider _collider, Transform _transform) {
Vector3 _pos = _transform.position;
Quaternion _quat = _transform.rotation;
_collider.GetWorldPose(out _pos, out _quat);
_transform.position = _pos;
_transform.rotation = _quat;
}
private void FixedUpdate() {
GetInput();
Steer();
Accelerate();
UpdateWheelPoses();
}
}
В чем может быть проблема, что машина едет очень медленно, даже когда я делают нереальные значения, она начинает ехать чуть быстрее, но после значения 5000+ никаких изменений не происходит. (но это бред какой-то, так быть не должно)
Сам скрипт висит на главном объекте Car, в нее вложены 4 колеса, 2 передних ведущий и 2 задних.
Также скопированы еще 4 для WheelCollider, все работает, колеса вращаются очень быстро или очень медленно, а сама машина как черепаха двигается, никак не могу понять в чем проблема и как поправить.
На объекте Car также висит RigidBody = useGravity = true и BoxCollider.