- Рейтинг
- 2
Здравствуйте уважаемые. В общем хочу небольшую игру сделать с танками. Нашел классный префаб танка т-90, все работает ок. Теперь хочу еще одну новую модель танка абрамса. Нашел модель, добавил адаптировал под скрипты от т-90. Все вроде норм, кроме гусеницы. На новой модели они как бы съезжают чуть в середину. А все из-за того что позиция не посередине как у т-90.
Здесь видно что положение чуть правее гусеницы
А здесь видно что посередине. Как это исправить ума не приложу. В unity всего лишь 2-3 недели как разбираюсь.
Как результат вот такая ерунда. Позиция гусениц меняется я так понял от центра wheel collider вот кусочек кода правого трака.
//Right Wheels Transform.
for (int k = 0; k < wheelColliders_R.Length; k++)
{
Vector3 ColliderCenterPoint = wheelColliders_R[k].transform.TransformPoint(wheelColliders_R[k].center);
if (Physics.Raycast(ColliderCenterPoint, -wheelColliders_R[k].transform.up, out hit, (wheelColliders_R[k].suspensionDistance + wheelColliders_R[k].radius) * transform.localScale.y))
{
wheelTransform_R[k].transform.position = hit.point + (wheelColliders_R[k].transform.up * wheelColliders_R[k].radius) * transform.localScale.y;
trackBoneTransform_R[k].transform.position = hit.point + (wheelColliders_R[k].transform.up * trackOffset) * transform.localScale.y;
}
else
{
wheelTransform_R[k].transform.position = ColliderCenterPoint - (wheelColliders_R[k].transform.up * wheelColliders_R[k].suspensionDistance) * transform.localScale.y;
trackBoneTransform_R[k].transform.position = ColliderCenterPoint - (wheelColliders_R[k].transform.up * (wheelColliders_R[k].suspensionDistance + wheelColliders_R[k].radius - trackOffset)) * transform.localScale.y;
}
//trackBoneTransform_R[k].transform.position = new Vector3(ColliderCenterPoint.x+0.55f, trackBoneTransform_R[k].transform.position.y, trackBoneTransform_R[k].transform.position.z);
wheelTransform_R[k].transform.rotation = wheelColliders_R[k].transform.rotation * Quaternion.Euler(rotationValueR[Mathf.CeilToInt((wheelColliders_R.Length) / 2)], 0, 0);
rotationValueR[k] += wheelColliders_R[k].rpm * (6) * Time.deltaTime;
}
Как результат вот такая ерунда. Позиция гусениц меняется я так понял от центра wheel collider вот кусочек кода правого трака.
//Right Wheels Transform.
for (int k = 0; k < wheelColliders_R.Length; k++)
{
Vector3 ColliderCenterPoint = wheelColliders_R[k].transform.TransformPoint(wheelColliders_R[k].center);
if (Physics.Raycast(ColliderCenterPoint, -wheelColliders_R[k].transform.up, out hit, (wheelColliders_R[k].suspensionDistance + wheelColliders_R[k].radius) * transform.localScale.y))
{
wheelTransform_R[k].transform.position = hit.point + (wheelColliders_R[k].transform.up * wheelColliders_R[k].radius) * transform.localScale.y;
trackBoneTransform_R[k].transform.position = hit.point + (wheelColliders_R[k].transform.up * trackOffset) * transform.localScale.y;
}
else
{
wheelTransform_R[k].transform.position = ColliderCenterPoint - (wheelColliders_R[k].transform.up * wheelColliders_R[k].suspensionDistance) * transform.localScale.y;
trackBoneTransform_R[k].transform.position = ColliderCenterPoint - (wheelColliders_R[k].transform.up * (wheelColliders_R[k].suspensionDistance + wheelColliders_R[k].radius - trackOffset)) * transform.localScale.y;
}
//trackBoneTransform_R[k].transform.position = new Vector3(ColliderCenterPoint.x+0.55f, trackBoneTransform_R[k].transform.position.y, trackBoneTransform_R[k].transform.position.z);
wheelTransform_R[k].transform.rotation = wheelColliders_R[k].transform.rotation * Quaternion.Euler(rotationValueR[Mathf.CeilToInt((wheelColliders_R.Length) / 2)], 0, 0);
rotationValueR[k] += wheelColliders_R[k].rpm * (6) * Time.deltaTime;
}