видео - https://www.youtube.com/watch?v=a4uVnby9zUM
P.S. WheelCollider - не подходит, потому что он работает только при движении физики. У меня же машина будет "стоять на месте", а дорога двигаться. Дорога не плоская, поэтому автомобиль должен реагировать на неровности дороги.
На колесах:
Синтаксис:
Используется csharp
void Update()
{
if (Physics.Raycast(transform.position + transform.up * upLimit, -transform.up, out hit, maxDistanse, layer))
{
hitDistanse = hit.distance;
}
else
{
hitDistanse = maxDistanse;
}
//spring
lastForceSpring = forceSpring;
forceSpring = (hitDistanse - maxDistanse) * -spring * Time.deltaTime;
//dump
shiftSpeed = lastDistanceForDumpSpeed - hitDistanse;
lastDistanceForDumpSpeed = hitDistanse;
forceDump = shiftSpeed * damper * Time.deltaTime;
force = (forceSpring + forceDump) * 400;
}
public Vector3 GetForce()
{
return force * transform.up;
}
На машине:
Синтаксис:
Используется csharp
void FixedUpdate()
{
for (int i = 0; i < wheel.Length; i++)
{
rb.AddForceAtPosition(wheel[i].GetForce(), wheel[i].transform.position);
}
}