Гонки на Unity

Проекты в стадии разработки.

Re: Гонки на Unity

Сообщение Nolex 08 дек 2010, 00:46

Golandez писал(а):Убрать колеса и добавить к машинке снизу AddForce .Получим планирующую машинку.

AddForce добавил, а вот колеса не так то просто и убрать. Во всех примерах с машинками все на них завязано, переписать код чтоб ездить без колес сложно будет..
Разработка игр в студии Brinemedia .
Аватара пользователя
Nolex
UNIверсал
 
Сообщения: 483
Зарегистрирован: 17 окт 2010, 12:26
Откуда: Украина
Skype: exlumen
  • Сайт
  • ICQ

Re: Гонки на Unity

Сообщение Golandez 08 дек 2010, 01:00

Насколько мне помнится,с колесами связано только торможение.
P.S.Поворачивайте свою парящую машинку применяя тот же вектор силы к определенным точкам...Фишек можно на этой основе прикрутить достаточно интересных.
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Гонки на Unity

Сообщение Nolex 08 дек 2010, 01:50

Синтаксис:
Используется javascript
// ----------- CAR TUTORIAL SAMPLE PROJECT, ? Andrew Gotow 2009 -----------------

// These variables allow the script to power the wheels of the car.
var FrontLeftWheel : WheelCollider;
var FrontRightWheel : WheelCollider;

// These variables are for the gears, the array is the list of ratios. The script
// uses the defined gear ratios to determine how much torque to apply to the wheels.
var GearRatio : float[];
var CurrentGear : int = 0;

// These variables are just for applying torque to the wheels and shifting gears.
// using the defined Max and Min Engine RPM, the script can determine what gear the
// car needs to be in.
var EngineTorque : float = 600.0;
var MaxEngineRPM : float = 3000.0;
var MinEngineRPM : float = 1000.0;
private var EngineRPM : float = 0.0;



function Start () {
        // I usually alter the center of mass to make the car more stable. I'ts less likely to flip this way.
        rigidbody.centerOfMass.y = -1.5;
}

function Update () {
       
        // This is to limith the maximum speed of the car, adjusting the drag probably isn't the best way of doing it,
        // but it's easy, and it doesn't interfere with the physics processing.
        rigidbody.drag = rigidbody.velocity.magnitude / 250;
       
        // Compute the engine RPM based on the average RPM of the two wheels, then call the shift gear function
        EngineRPM =  GearRatio[CurrentGear];
       

                // finally, apply the values to the wheels.     The torque applied is divided by the current gear, and
        // multiplied by the user input variable.
        FrontLeftWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * Input.GetAxis("Vertical");
        FrontRightWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * Input.GetAxis("Vertical");
               

        // the steer angle is an arbitrary value multiplied by the user input.
        FrontLeftWheel.steerAngle = 10 * Input.GetAxis("Horizontal");
        FrontRightWheel.steerAngle = 10 * Input.GetAxis("Horizontal");
       
}

 

Golandez, спасибо за подсказки!

Вот нашел несложный скрипт на js, подскажите как его переписать чтоб избавиться от коллидеров - FrontLeftWheel и FrontRightWheel. :)

Скрипт взят из этого урока - http://www.gotow.net/andrew/blog/?page_id=78 .

Заранее спасиб
Разработка игр в студии Brinemedia .
Аватара пользователя
Nolex
UNIверсал
 
Сообщения: 483
Зарегистрирован: 17 окт 2010, 12:26
Откуда: Украина
Skype: exlumen
  • Сайт
  • ICQ

Re: Гонки на Unity

Сообщение Golandez 08 дек 2010, 03:38

Что именно вы хотите переписать? Это два коллайдера ваших ведущих колес.Не нужны,просто удалите.
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Гонки на Unity

Сообщение Nolex 08 дек 2010, 14:38

Golandez писал(а):Что именно вы хотите переписать? Это два коллайдера ваших ведущих колес.Не нужны,просто удалите.


var FrontLeftWheel : WheelCollider;
var FrontRightWheel : WheelCollider;

Эти строчки удаляю, а ругаеться ниже на

// multiplied by the user input variable.
FrontLeftWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * Input.GetAxis("Vertical");
FrontRightWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * Input.GetAxis("Vertical");

// the steer angle is an arbitrary value multiplied by the user input.
FrontLeftWheel.steerAngle = 10 * Input.GetAxis("Horizontal");
FrontRightWheel.steerAngle = 10 * Input.GetAxis("Horizontal");

Подскажите пож. на что поменять FrontLeftWheel.motorTorque и FrontRightWheel.steerAngle?

Хочу чтоб машинка просто ездила без всяких колес)
Потом AddForce добавлю, посмотрю как летать будет..
Разработка игр в студии Brinemedia .
Аватара пользователя
Nolex
UNIверсал
 
Сообщения: 483
Зарегистрирован: 17 окт 2010, 12:26
Откуда: Украина
Skype: exlumen
  • Сайт
  • ICQ

Re: Гонки на Unity

Сообщение Neyl 08 дек 2010, 16:51

Прикладывай не крутящий момент к колесам, а силу к самому корпусу машины через Rigidbody.AddForce или Rigidbody.AddForceAtPosition. Можешь посмотреть как это сделано в официальном Car tutorial. Там колеса как раз играют больше декоративную роль.
Аватара пользователя
Neyl
UNIверсал
 
Сообщения: 404
Зарегистрирован: 20 июн 2010, 10:17

Re: Гонки на Unity

Сообщение Nolex 08 дек 2010, 21:12

Вот что пока вышло. За основу взял скрипт из офф. примера на сайте - Car Tutorial.

Вот версия онлайн - http://oldskullent.com/project/oserace/WebPlayer.html

Пока машинка не очень стабильна, скорость набирает не очень аркадно да и еще куча проблем)

Хотелось бы сейчас добавить чтоб при поворотах машинка кренилась(наклонялась немного в бок), а когда отпускаеш кнопку поворота, чтоб становилась в исходное положение. Как это реализовать?

Код я вроде по максимуму подчистил.. Может еще лишнее что-то убрать?

Машинку в воздухе держу таким кодом(незнаю насколько это правильно и красиво..). Такое решение нарыл тут на форуме у одного форумчанина Courvee:

Синтаксис:
Используется javascript
        Physics.Raycast (transform.position, -Vector3.up, earthDistance) ;
        print (earthDistance.distance + " meters");
       
        if (earthDistance.distance < 20) {
        rigidbody.AddForce (Vector3.up * 600);
        } else
        {
        rigidbody.AddForce (Vector3.up * 100);
        }


Вот весь код:

Синтаксис:
Используется javascript
var dragMultiplier : Vector3 = new Vector3(2, 5, 1);

var throttle : float = 0;
private var steer : float = 0;

var centerOfMass : Transform;

var topSpeed : float = 160;
var numberOfGears : int = 5;

var maximumTurn : int = 15;
var minimumTurn : int = 10;

private var engineForceValues : float[];
private var gearSpeeds : float[];

private var currentGear : int;
private var currentEnginePower : float = 0.0;

private var initialDragMultiplierX : float = 10.0;

private var canSteer : boolean;
private var canDrive : boolean;

private var earthDistance : RaycastHit;

function Start()
{      
        // Measuring 1 - 60
        accelerationTimer = Time.time;
        audio.Play();
        SetupCenterOfMass();
       
        topSpeed = Convert_Miles_Per_Hour_To_Meters_Per_Second(topSpeed);
       
        SetupGears();
       
        initialDragMultiplierX = dragMultiplier.x;
}

function Update()
{              
        var relativeVelocity : Vector3 = transform.InverseTransformDirection(rigidbody.velocity);
       
        GetInput();
       
        UpdateGear(relativeVelocity);  
}

function FixedUpdate()
{      
        // The rigidbody velocity is always given in world space, but in order to work in local space of the car model we need to transform it first.
        var relativeVelocity : Vector3 = transform.InverseTransformDirection(rigidbody.velocity);
       
        CalculateState();      
       
       
        Physics.Raycast (transform.position, -Vector3.up, earthDistance) ;
        print (earthDistance.distance + " meters");
       
        if (earthDistance.distance < 20) {
        rigidbody.AddForce (Vector3.up * 600);
        } else
        {
        rigidbody.AddForce (Vector3.up * 100);
        }
       
       
       
        UpdateDrag(relativeVelocity);
       
        CalculateEnginePower(relativeVelocity);
       
        ApplyThrottle(canDrive, relativeVelocity);
       
        ApplySteering(canSteer, relativeVelocity);
}

/**************************************************/
/* Functions called from Start()                  */
/**************************************************/


function SetupCenterOfMass()
{
        if(centerOfMass != null)
                rigidbody.centerOfMass = centerOfMass.localPosition;
}


function SetupGears()
{
        engineForceValues = new float[numberOfGears];
        gearSpeeds = new float[numberOfGears];
       
        var tempTopSpeed : float = topSpeed;
               
        for(var i = 0; i < numberOfGears; i++)
        {
                if(i > 0)
                        gearSpeeds[i] = tempTopSpeed / 4 + gearSpeeds[i-1];
                else
                        gearSpeeds[i] = tempTopSpeed / 4;
               
                tempTopSpeed -= tempTopSpeed / 4;
        }
       
        var engineFactor : float = topSpeed / gearSpeeds[gearSpeeds.Length - 1];
       
        for(i = 0; i < numberOfGears; i++)
        {
                var maxLinearDrag : float = gearSpeeds[i] * gearSpeeds[i];// * dragMultiplier.z;
                engineForceValues[i] = maxLinearDrag * engineFactor;
        }
}

/**************************************************/
/* Functions called from Update()                 */
/**************************************************/

function GetInput()
{
        throttle = Input.GetAxis("Vertical");
        steer = Input.GetAxis("Horizontal");
       
        }


function UpdateGear(relativeVelocity : Vector3)
{
        currentGear = 0;
        for(var i = 0; i < numberOfGears - 1; i++)
        {
                if(relativeVelocity.z > gearSpeeds[i])
                        currentGear = i + 1;
        }
}


/**************************************************/
/* Functions called from FixedUpdate()            */
/**************************************************/

function UpdateDrag(relativeVelocity : Vector3)
{
        var relativeDrag : Vector3 = new Vector3(       -relativeVelocity.x * Mathf.Abs(relativeVelocity.x),
                                                                                                -relativeVelocity.y * Mathf.Abs(relativeVelocity.y),
                                                                                                -relativeVelocity.z * Mathf.Abs(relativeVelocity.z) );
       
        var drag = Vector3.Scale(dragMultiplier, relativeDrag);
               

                drag.x *= topSpeed / relativeVelocity.magnitude;

       
        if(Mathf.Abs(relativeVelocity.x) < 5)
                drag.x = -relativeVelocity.x * dragMultiplier.x;
               

        rigidbody.AddForce(transform.TransformDirection(drag) * rigidbody.mass * Time.deltaTime);
}



function CalculateEnginePower(relativeVelocity : Vector3)
{
        if(throttle == 0)
        {
                currentEnginePower -= Time.deltaTime * 200;
        }
        else if( HaveTheSameSign(relativeVelocity.z, throttle) )
        {
                normPower = (currentEnginePower / engineForceValues[engineForceValues.Length - 1]) * 2;
                currentEnginePower += Time.deltaTime * 200 * EvaluateNormPower(normPower);
        }
        else
        {
                currentEnginePower -= Time.deltaTime * 300;
        }
       
        if(currentGear == 0)
                currentEnginePower = Mathf.Clamp(currentEnginePower, 0, engineForceValues[0]);
        else
                currentEnginePower = Mathf.Clamp(currentEnginePower, engineForceValues[currentGear - 1], engineForceValues[currentGear]);
}

function CalculateState()
{
        canDrive = true;
        canSteer = true;
       
        }

function ApplyThrottle(canDrive : boolean, relativeVelocity : Vector3)
{
        if(canDrive)
        {
                var throttleForce : float = 0;
                var brakeForce : float = 0;
               
                if (HaveTheSameSign(relativeVelocity.z, throttle))
                {
                        throttleForce = Mathf.Sign(throttle) * currentEnginePower * rigidbody.mass;
                }
                else
                        brakeForce = Mathf.Sign(throttle) * engineForceValues[0] * rigidbody.mass;
               
                rigidbody.AddForce(transform.forward * Time.deltaTime * (throttleForce + brakeForce));
        }
}

function ApplySteering(canSteer : boolean, relativeVelocity : Vector3)
{
        if(canSteer)
        {
                var turnRadius : float = 3.0 / Mathf.Sin((90 - (steer * 30)) * Mathf.Deg2Rad);
                var minMaxTurn : float = EvaluateSpeedToTurn(rigidbody.velocity.magnitude);
                var turnSpeed : float = Mathf.Clamp(relativeVelocity.z / turnRadius, -minMaxTurn / 10, minMaxTurn / 10);
               
                transform.RotateAround( transform.position + transform.right * turnRadius * steer,
                                                                transform.up,
                                                                turnSpeed * Mathf.Rad2Deg * Time.deltaTime * steer);
               
                var debugStartPoint = transform.position + transform.right * turnRadius * steer;
                var debugEndPoint = debugStartPoint + Vector3.up * 5;
               
                Debug.DrawLine(debugStartPoint, debugEndPoint, Color.red);
               
       
        }
}

/**************************************************/
/*               Utility Functions                */
/**************************************************/

function Convert_Miles_Per_Hour_To_Meters_Per_Second(value : float) : float
{
        return value * 0.44704;
}

function Convert_Meters_Per_Second_To_Miles_Per_Hour(value : float) : float
{
        return value * 2.23693629;     
}

function HaveTheSameSign(first : float, second : float) : boolean
{
        if (Mathf.Sign(first) == Mathf.Sign(second))
                return true;
        else
                return false;
}

function EvaluateSpeedToTurn(speed : float)
{
        if(speed > topSpeed / 2)
                return minimumTurn;
       
        var speedIndex : float = 1 - (speed / (topSpeed / 2));
        return minimumTurn + speedIndex * (maximumTurn - minimumTurn);
}

function EvaluateNormPower(normPower : float)
{
        if(normPower < 1)
                return 10 - normPower * 9;
        else
                return 1.9 - normPower * 0.9;
}

function GetGearState()
{
        var relativeVelocity : Vector3 = transform.InverseTransformDirection(rigidbody.velocity);
        var lowLimit : float = (currentGear == 0 ? 0 : gearSpeeds[currentGear-1]);
        return (relativeVelocity.z - lowLimit) / (gearSpeeds[currentGear - lowLimit]) * (1 - currentGear * 0.1) + currentGear * 0.1;
}


Заранее спасиб!
Разработка игр в студии Brinemedia .
Аватара пользователя
Nolex
UNIверсал
 
Сообщения: 483
Зарегистрирован: 17 окт 2010, 12:26
Откуда: Украина
Skype: exlumen
  • Сайт
  • ICQ

Re: Гонки на Unity

Сообщение Nolex 09 дек 2010, 01:30

Как сделать поворот машини вдоль оси машинки, тоесть чтоб она крутилась как в Star Wars. Типа чтоб летела под углом 90° к земле.
http://www.youtube.com/watch?v=_DApsOmu5HI вот как тут он проходит первый поворот, кто непонял..

сделал через transform.Rotate(0, 0, Time.deltaTime * hor * 50); но возникла проблема.
Изначальные значения углов X=0 Y=180 Z=0.
Если я при старте кручу Z координату, то все четко. меняеться значение только у Z.
Но как только X и Y не равны 0 и 180(например у меня нос немного задран или еще чет) и когда я меняю Z значения, то машина поворачиваеться по всем трем координатам сразу и очень некрасиво. Как сделать чтоб машина четко могла крутиться "вдоль своей оси".

Надеюсь внятно объяснил..
Разработка игр в студии Brinemedia .
Аватара пользователя
Nolex
UNIверсал
 
Сообщения: 483
Зарегистрирован: 17 окт 2010, 12:26
Откуда: Украина
Skype: exlumen
  • Сайт
  • ICQ

Re: Гонки на Unity

Сообщение Golandez 09 дек 2010, 03:12

Покажите код.
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Гонки на Unity

Сообщение Multirezonator 09 дек 2010, 10:15

Nolex писал(а): Как сделать чтоб машина четко могла крутиться "вдоль своей оси"?

Поповрачивать машинку вдоль свой оси:
transform.Rotate(0, 0, поворот по Z, Space.Self);
Скрытый текст:



Аватара пользователя
Multirezonator
UNITрон
 
Сообщения: 248
Зарегистрирован: 15 фев 2010, 16:12
Откуда: Украина, Луганск
  • Сайт

Re: Гонки на Unity

Сообщение Nolex 10 дек 2010, 00:44

Golandez писал(а):Покажите код.


Синтаксис:
Используется javascript

var dragMultiplier : Vector3 = new Vector3(2, 5, 1);

var throttle : float = 0;
private var steer : float = 0;

var hor : float = 0;
private var ver : float = 0;

var centerOfMass : Transform;

var topSpeed : float = 160;
var numberOfGears : int = 5;

var maximumTurn : int = 15;
var minimumTurn : int = 10;

private var engineForceValues : float[];
private var gearSpeeds : float[];

private var currentGear : int;
private var currentEnginePower : float = 0.0;

private var initialDragMultiplierX : float = 10.0;

private var canSteer : boolean;
private var canDrive : boolean;

private var earthDistance : RaycastHit;

function Start()
{      
        // Measuring 1 - 60
        accelerationTimer = Time.time;
        audio.Play();
        SetupCenterOfMass();
       
        topSpeed = Convert_Miles_Per_Hour_To_Meters_Per_Second(topSpeed);
       
        SetupGears();
       
        initialDragMultiplierX = dragMultiplier.x;
}

function Update()
{              
        var relativeVelocity : Vector3 = transform.InverseTransformDirection(rigidbody.velocity);
       
        GetInput();
       
        UpdateGear(relativeVelocity);  
       

}

function FixedUpdate()
{      
        // The rigidbody velocity is always given in world space, but in order to work in local space of the car model we need to transform it first.
        var relativeVelocity : Vector3 = transform.InverseTransformDirection(rigidbody.velocity);
       
        CalculateState();      
       
       
       
        Physics.Raycast (transform.position, -Vector3.up, earthDistance) ;
        print (earthDistance.distance + " meters" + transform.rotation.x);
       
        if (earthDistance.distance < 20) {
        rigidbody.AddForce (Vector3.up * 600);
        } else
        {
        rigidbody.AddForce (Vector3.up * 100);
        }
       
        if (transform.rotation.x > 0.001)
        {
        transform.rotation.x = 0;
        }
       
       
       
       
        UpdateDrag(relativeVelocity);
       
        CalculateEnginePower(relativeVelocity);
       
        ApplyThrottle(canDrive, relativeVelocity);
       
        ApplySteering(canSteer, relativeVelocity);
}

/**************************************************/
/* Functions called from Start()                  */
/**************************************************/


function SetupCenterOfMass()
{
        if(centerOfMass != null)
                rigidbody.centerOfMass = centerOfMass.localPosition;
}


function SetupGears()
{
        engineForceValues = new float[numberOfGears];
        gearSpeeds = new float[numberOfGears];
       
        var tempTopSpeed : float = topSpeed;
               
        for(var i = 0; i < numberOfGears; i++)
        {
                if(i > 0)
                        gearSpeeds[i] = tempTopSpeed / 4 + gearSpeeds[i-1];
                else
                        gearSpeeds[i] = tempTopSpeed / 4;
               
                tempTopSpeed -= tempTopSpeed / 4;
        }
       
        var engineFactor : float = topSpeed / gearSpeeds[gearSpeeds.Length - 1];
       
        for(i = 0; i < numberOfGears; i++)
        {
                var maxLinearDrag : float = gearSpeeds[i] * gearSpeeds[i];// * dragMultiplier.z;
                engineForceValues[i] = maxLinearDrag * engineFactor;
        }
}

/**************************************************/
/* Functions called from Update()                 */
/**************************************************/

function GetInput()
{
        throttle = Input.GetAxis("Vertical");
        steer = Input.GetAxis("Horizontal");

        ver = Input.GetAxis("ver");
        hor = Input.GetAxis("hor");
               
        }

function UpdateGear(relativeVelocity : Vector3)
{
        currentGear = 0;
        for(var i = 0; i < numberOfGears - 1; i++)
        {
                if(relativeVelocity.z > gearSpeeds[i])
                        currentGear = i + 1;
        }
}


/**************************************************/
/* Functions called from FixedUpdate()            */
/**************************************************/

function UpdateDrag(relativeVelocity : Vector3)
{
        var relativeDrag : Vector3 = new Vector3(       -relativeVelocity.x * Mathf.Abs(relativeVelocity.x),
                                                                                                -relativeVelocity.y * Mathf.Abs(relativeVelocity.y),
                                                                                                -relativeVelocity.z * Mathf.Abs(relativeVelocity.z) );
       
        var drag = Vector3.Scale(dragMultiplier, relativeDrag);
               

                drag.x *= topSpeed / relativeVelocity.magnitude;

       
        if(Mathf.Abs(relativeVelocity.x) < 5)
                drag.x = -relativeVelocity.x * dragMultiplier.x;
               

        rigidbody.AddForce(transform.TransformDirection(drag) * rigidbody.mass * Time.deltaTime);
}



function CalculateEnginePower(relativeVelocity : Vector3)
{
        if(throttle == 0)
        {
                currentEnginePower -= Time.deltaTime * 200;
        }
        else if( HaveTheSameSign(relativeVelocity.z, throttle) )
        {
                normPower = (currentEnginePower / engineForceValues[engineForceValues.Length - 1]) * 2;
                currentEnginePower += Time.deltaTime * 200 * EvaluateNormPower(normPower);
        }
        else
        {
                currentEnginePower -= Time.deltaTime * 300;
        }
       
        if(currentGear == 0)
                currentEnginePower = Mathf.Clamp(currentEnginePower, 0, engineForceValues[0]);
        else
                currentEnginePower = Mathf.Clamp(currentEnginePower, engineForceValues[currentGear - 1], engineForceValues[currentGear]);
}

function CalculateState()
{
        canDrive = true;
        canSteer = true;
       
        }

function ApplyThrottle(canDrive : boolean, relativeVelocity : Vector3)
{
        if(canDrive)
        {
                var throttleForce : float = 0;
                var brakeForce : float = 0;
               
                transform.Rotate(Time.deltaTime * ver * 50, 0, 0);
               
                if (HaveTheSameSign(relativeVelocity.z, throttle))
                {
                        throttleForce = Mathf.Sign(throttle) * currentEnginePower * rigidbody.mass;
                }
                else
                        brakeForce = Mathf.Sign(throttle) * engineForceValues[0] * rigidbody.mass;
               
                rigidbody.AddForce(transform.forward * Time.deltaTime * (throttleForce + brakeForce));
        }
}

function ApplySteering(canSteer : boolean, relativeVelocity : Vector3)
{
        if(canSteer)
        {
                var turnRadius : float = 3.0 / Mathf.Sin((90 - (steer * 30)) * Mathf.Deg2Rad);
                var minMaxTurn : float = EvaluateSpeedToTurn(rigidbody.velocity.magnitude);
                var turnSpeed : float = Mathf.Clamp(relativeVelocity.z / turnRadius, -minMaxTurn / 10, minMaxTurn / 10);
               
               
                       

                 // ПОВОРОТ  вдоль оси. Надо как-то переписать его..!
                transform.Rotate(0, 0, Time.deltaTime * hor * 50, Space.Self);
                 
                transform.RotateAround( transform.position + transform.right * turnRadius * steer,
                                                                transform.up,
                                                                turnSpeed * Mathf.Rad2Deg * Time.deltaTime * steer);
               
                var debugStartPoint = transform.position + transform.right * turnRadius * steer;
                var debugEndPoint = debugStartPoint + Vector3.up * 5;
               
                Debug.DrawLine(debugStartPoint, debugEndPoint, Color.red);
               
       
        }
}

/**************************************************/
/*               Utility Functions                */
/**************************************************/

function Convert_Miles_Per_Hour_To_Meters_Per_Second(value : float) : float
{
        return value * 0.44704;
}

function Convert_Meters_Per_Second_To_Miles_Per_Hour(value : float) : float
{
        return value * 2.23693629;     
}

function HaveTheSameSign(first : float, second : float) : boolean
{
        if (Mathf.Sign(first) == Mathf.Sign(second))
                return true;
        else
                return false;
}

function EvaluateSpeedToTurn(speed : float)
{
        if(speed > topSpeed / 2)
                return minimumTurn;
       
        var speedIndex : float = 1 - (speed / (topSpeed / 2));
        return minimumTurn + speedIndex * (maximumTurn - minimumTurn);
}

function EvaluateNormPower(normPower : float)
{
        if(normPower < 1)
                return 10 - normPower * 9;
        else
                return 1.9 - normPower * 0.9;
}

function GetGearState()
{
        var relativeVelocity : Vector3 = transform.InverseTransformDirection(rigidbody.velocity);
        var lowLimit : float = (currentGear == 0 ? 0 : gearSpeeds[currentGear-1]);
        return (relativeVelocity.z - lowLimit) / (gearSpeeds[currentGear - lowLimit]) * (1 - currentGear * 0.1) + currentGear * 0.1;
}
 



Multirezonator, Спасибо за совет, но это не решает проблемы. Вот я залил новую веб-версию. wasd - летать, а стрелками крутить машину вокруг своей оси. Попробуй покрутить ёё стрелками вправо-влево в разных позициях. Там явно как-то код переписать надо!
http://oldskullent.com/project/oserace/WebPlayer.html

Подскажите еще как лучше все-таки удерживать машину в воздухе?) Что-то мне кажеться это не оч правильный способ:

Physics.Raycast (transform.position, -Vector3.up, earthDistance) ;
print (earthDistance.distance + " meters" + transform.rotation.x);

if (earthDistance.distance < 20) {
rigidbody.AddForce (Vector3.up * 600);
} else
{
rigidbody.AddForce (Vector3.up * 100);
}

Разработка игр в студии Brinemedia .
Аватара пользователя
Nolex
UNIверсал
 
Сообщения: 483
Зарегистрирован: 17 окт 2010, 12:26
Откуда: Украина
Skype: exlumen
  • Сайт
  • ICQ

Пред.

Вернуться в Кузня

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3