Суббота, 27 Апреля 2024, 07:11

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Записи участника » tandem62 [2]
Результаты поиска
tandem62Дата: Суббота, 06 Июня 2015, 11:25 | Сообщение # 1 | Тема: Вопросы новичка
уже был
Сейчас нет на сайте
Проект вот примерно что на данный момент сделано, тут все видно, и еще кто скажет как заставить прицеп при Fixed Joint не дергаться при остановке
tandem62Дата: Суббота, 06 Июня 2015, 00:11 | Сообщение # 2 | Тема: Вопросы новичка
уже был
Сейчас нет на сайте
Решил таки смастерить древний проект, задумывал давно все небыло времени заняться и вот начал. Суть сделать модель движения грузовика с прицепом, все кажется просто. но есть куча проблем которые немогу решить. Написал скрип чтобы колеса визуально крутились, на тягаче все относительно нормально а вот на прицепе после запуска они уезжают черти куда, плюс крутятся по разным осям, хотя в скрипте все сделано массивом. Ну и то что они прыгают это вопрос 2 (наверно крутятся относительно смещеного центра).
для начала хватит, и еще подскажите куда выложить проект чтобы можно было не жестами рассказывать и объяснять, а дать ссылку чтобы люди посмотрели что да как
вот примерно код на колеса прицепа:
Код

public class TruckWheelRotate : MonoBehaviour {

      public Transform[] WCol;
      public float RadiusWheels = 1;
      public float WheelOffset = 0.1f;
      public Vector3 shiftCentre = new Vector3(0.0f, -0.35f, 0.0f);//центр тяжести авто

      class WheelData
      {
          public Transform transform;
          public GameObject go;
          public WheelCollider col;
          public Vector3 StartPos;
          public float Rotation = 0.0f;
          public float MaxSteer;
          public float BreackPoer;
          public bool Motor;
      }

      private WheelData[] Wheels;

      private WheelData SetWheelsParameter(Transform wheel, float maxSteer, float radius, bool motor)
      {
          if (wheel == null)
          { //если колесо не найдено то генерируем исключение
              throw new System.Exception("Не найден входящий объект");
          }
          WheelData result = new WheelData(); // конструктор класса
          GameObject GO = new GameObject("WheelCollider"); // создаем колайдер   
          GO.transform.parent = transform; // прицепляем колайдер к родителю
          GO.transform.position = wheel.position; // позиция колайдера такая же как у колеса
          WheelCollider col = (WheelCollider)GO.AddComponent(typeof(WheelCollider));//добавляем колайдер в проект
          col.motorTorque = 0.0f; // начальная скорость кручения
          col.brakeTorque = 0.0f; // начальная сила торможения
          col.radius = radius;
          result.transform = wheel;
          result.go = GO;
          result.col = col;
          result.StartPos = GO.transform.localPosition;
          result.MaxSteer = maxSteer;
          result.Motor = motor;
          return result;
      }

   // Use this for initialization
   void Start () {
          Wheels = new WheelData[WCol.Length];
          //полный привод   
          for (int i = 0; i < WCol.Length; i++)
          {
              Wheels[i] = SetWheelsParameter(WCol[i], 0, RadiusWheels, true); //false для заднего привода   
          }
          rigidbody.centerOfMass += shiftCentre;
   }
     
   // Update is called once per frame
   void Update () {
          WheelsUpdate();
   }

      public void WheelsUpdate()
      {
          float delta = Time.fixedDeltaTime;

          foreach (WheelData w in Wheels)
          {
              WheelHit Hit;
              Vector3 lp = w.StartPos;
              if (w.col.GetGroundHit(out Hit))
              {
                  lp.y -= Vector3.Dot(w.transform.position - Hit.point, transform.up) - RadiusWheels;
              }
              else
              {
                  lp.y = w.StartPos.y - WheelOffset;
              }
              w.transform.localPosition = lp;

              w.Rotation = Mathf.Repeat(w.Rotation + delta * w.col.rpm * 360.0f / 60.0f, 360.0f);
              w.transform.localRotation = Quaternion.Euler(w.Rotation, w.col.steerAngle, 90.0f);

          }
      }

}


Сообщение отредактировал tandem62 - Суббота, 06 Июня 2015, 00:11
Форум игроделов » Записи участника » tandem62 [2]
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг