Суббота, 24 Августа 2019, 19:01

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Физика автомобиля
Физика автомобиля
OceanDramaДата: Четверг, 26 Июня 2014, 14:23 | Сообщение # 1
был не раз
Сейчас нет на сайте
Всем доброго времени суток. Наметилась тут такая проблемка. Сделал очень простую физику для автомобиля:
Код

using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {
  public WheelCollider frontLeftWheelCollider;
  public WheelCollider frontRightWheelCollider;
  public WheelCollider backLeftWheelCollider;
  public WheelCollider backRightWheelCollider;
   
  public float maxTorque;
  public float maxAngle;

  void Start () {
   rigidbody.centerOfMass += new Vector3 (0.0F, -1F, 0.5F);
  }

  void FixedUpdate () {
   frontLeftWheelCollider.motorTorque = Input.GetAxis ("Vertical") * maxTorque;
   frontRightWheelCollider.motorTorque = Input.GetAxis ("Vertical") * maxTorque;
   backLeftWheelCollider.motorTorque = Input.GetAxis ("Vertical") * maxTorque;
   backRightWheelCollider.motorTorque = Input.GetAxis ("Vertical") * maxTorque;

   frontLeftWheelCollider.steerAngle = Input.GetAxis ("Horizontal") * maxAngle;
   frontRightWheelCollider.steerAngle = Input.GetAxis ("Horizontal")* maxAngle;
  }
}

Но он очень медленно стартует и ещё более медленно останавливается. Как можно решить эту проблему. Возможно, влияют настройки Wheel Collider'a? И имеет ли значение, какие колеса вращать: передние/задние/все сразу? С виду, разница, вроде, не чувствуется.
romeo98Дата: Четверг, 26 Июня 2014, 14:38 | Сообщение # 2
участник
Сейчас нет на сайте
Я думаю это из-за того, что Input.GetAxis ("ххх") вохвращает значение от 0 до 1. То есть, когда ты нажимаешь, он не сразу становится 1, а постепенно. Попробуй заменить:
Код
frontLeftWheelCollider.motorTorque = Input.GetAxis ("Vertical") * maxTorque;
"
на
Код
  
if(Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.W))
   {
    frontLeftWheelCollider.motorTorque = maxTorque;
   }


Flist - social platform
PuzzleSystem - Open-source Unity Asset
[2D] Mission: Defender
OceanDramaДата: Четверг, 26 Июня 2014, 14:55 | Сообщение # 3
был не раз
Сейчас нет на сайте
А как заставить его нормально тормозить? brakeTorque багованный, а
Код
   
if(Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.S))  
    {  
     frontLeftWheelCollider.motorTorque = -maxTorque;  
    }

дает такой же результат, что и сначала?
allodsДата: Четверг, 26 Июня 2014, 15:26 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
Цитата romeo98 ()
Input.GetAxis ("ххх") вохвращает значение от 0 до 1

Если на клавиатуре то мгновенно , это же вам не джойстик.

Цитата OceanDrama ()
frontLeftWheelCollider.motorTorque = -maxTorque;  


motorTorque это скажем так сила мотора, она равна maxTorque.

brakeTorque это сила тормоза.

frontLeftWheelCollider.motorTorque = Input.GetAxis ("Vertical") * maxTorque; тут задайте скажем так 3500 для maxTorque

Код
if(Input.GetAxis ("Vertical")==0)
{
     frontLeftWheelCollider.brakeTorque = 5000;
}


после того как вы отпустите газ то GetAxis ("Vertical") будет приравнен к 0 и значит ваш мотор будет равен 0, значит он больше не будет разгонять машину.
brakeTorque равен 5000 как только вы отпустите газ, машина начнет тормозить. Важно при нажатии заново на газ приравнять brakeTorque к 0 иначе вы будете жать и на газ и на тормоз одновременно
OceanDramaДата: Четверг, 26 Июня 2014, 16:09 | Сообщение # 5
был не раз
Сейчас нет на сайте
Просто у кнопки назад есть две функции. Собственно, езда назад и тормоз. Вот как определить, когда какую функцию выполнять?
allodsДата: Четверг, 26 Июня 2014, 19:36 | Сообщение # 6
почти ветеран
Сейчас нет на сайте
Цитата OceanDrama ()
Просто у кнопки назад есть две функции. Собственно, езда назад и тормоз. Вот как определить, когда какую функцию выполнять?


Input.GetAxis ("Vertical") это число от -1 >0<+1 во флоат

Когда жмешь назад Input.GetAxis ("Vertical") будет равен -1, отпускаешь 0, жмешь в перед 1

так что

frontLeftWheelCollider.motorTorque = Input.GetAxis ("Vertical") * maxTorque; получается frontLeftWheelCollider.motorTorque = 1*maxTorque если жмешь в перед

frontLeftWheelCollider.motorTorque = 0*maxTorque если отпустил

frontLeftWheelCollider.motorTorque = -1*maxTorque назад

А теперь подумай
Цитата OceanDrama ()
Собственно, езда назад и тормоз. Вот как определить, когда какую функцию выполнять?


при нажатии на кнопку Назад то втой motorTorque уже будет равен -maxTorque , тебе и менять то ничего не надо


Сообщение отредактировал allods - Четверг, 26 Июня 2014, 19:39
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Физика автомобиля
  • Страница 1 из 1
  • 1
Поиск:

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