예제 #1
0
 private void SetupParameters()
 {
     BodyMeshRendere.material.color = StaticGameHelper.GetRandomColor();
     MinTurnTime     = Random.Range(1.0f, 4.0f);
     MaxTurnTime     = MinTurnTime + Random.Range(1.0f, 4.0f);
     TurnTimer       = Random.Range(MinTurnTime, MaxTurnTime);
     MovementSpeed   = Random.Range(3.0f, 6.0f);
     TargetDirection = new Vector3(Random.Range(-1.0f, 1.0f), 0, Random.Range(-1.0f, 1.0f));
 }
예제 #2
0
    void FixedUpdate()
    {
        if (CarController == null || !CanMove)
        {
            return;
        }

        float dist = (Data.GetKey(TargetKeyIndex) - CarController.transform.position).magnitude;

        if (dist < 1.0f)
        {
            TargetKeyIndex = (TargetKeyIndex + 1) % Data.Keys.Count;
        }

        float   motor         = 0;
        float   steering      = 0;
        Vector3 targetVector  = Data.GetKey(TargetKeyIndex) - CarController.transform.position;
        Vector3 forwardVector = CarController.transform.forward;
        float   targetAngle   = (float)StaticGameHelper.AngleBetweenVectors(targetVector, forwardVector);
        float   maxAngle      = CarController.GetMaxSteeringAngle();

        if (targetAngle < maxAngle && targetAngle > -maxAngle)
        {
            motor    = 1;
            steering = targetAngle / maxAngle;
        }
        else
        {
            if (targetAngle > maxAngle)
            {
                motor    = 1 - (targetAngle - maxAngle) / (180 - maxAngle) * 0.5f;
                steering = 1;
            }
            else if (targetAngle < -maxAngle)
            {
                steering = -1;
                motor    = 1 - (targetAngle + maxAngle) / (-180 + maxAngle) * 0.5f;
            }
        }
        CarController.UpdateInput(motor * Data.MotorMultiplier, steering * Data.WheelMultiplier);
    }
예제 #3
0
    public void UpdateInput(float motor, float steering)
    {
        motor    *= MaxMotorTorque;
        steering *= MaxSteeringAngle;
        double angle           = StaticGameHelper.AngleBetweenVectors(RigidBody.velocity, RigidBody.transform.forward);
        bool   isMovingForward = angle <90 && angle> -90;

        foreach (SimpleAxleData axle in Axels)
        {
            if (axle.Steering)
            {
                axle.LeftWheel.steerAngle  = steering;
                axle.RightWheel.steerAngle = steering;
            }

            if (Break)
            {
                axle.LeftWheel.brakeTorque  = BreakForce;
                axle.RightWheel.brakeTorque = BreakForce;
                axle.LeftWheel.motorTorque  = 0;
                axle.RightWheel.motorTorque = 0;
            }
            else if (isMovingForward)
            {
                if (motor >= 0)
                {
                    if (axle.Motor)
                    {
                        axle.LeftWheel.motorTorque  = motor;
                        axle.RightWheel.motorTorque = motor;
                    }
                    if (axle.Breaks)
                    {
                        axle.LeftWheel.brakeTorque  = 0;
                        axle.RightWheel.brakeTorque = 0;
                    }
                }
                else
                {
                    if (axle.Breaks)
                    {
                        axle.LeftWheel.brakeTorque  = BreakForce;
                        axle.RightWheel.brakeTorque = BreakForce;
                    }
                    if (axle.Motor)
                    {
                        axle.LeftWheel.motorTorque  = 0;
                        axle.RightWheel.motorTorque = 0;
                    }
                }
            }
            else
            {
                if (motor > 0)
                {
                    if (axle.Breaks)
                    {
                        axle.LeftWheel.brakeTorque  = BreakForce;
                        axle.RightWheel.brakeTorque = BreakForce;
                    }
                    if (axle.Motor)
                    {
                        axle.LeftWheel.motorTorque  = 0;
                        axle.RightWheel.motorTorque = 0;
                    }
                }
                else
                {
                    if (axle.Motor)
                    {
                        axle.LeftWheel.motorTorque  = motor * 0.5f;
                        axle.RightWheel.motorTorque = motor * 0.5f;
                    }
                    if (axle.Breaks)
                    {
                        axle.LeftWheel.brakeTorque  = 0;
                        axle.RightWheel.brakeTorque = 0;
                    }
                }
            }

            ApplyLocalPositionToVisuals(axle.LeftWheel, axle.LeftWheelTransform);
            ApplyLocalPositionToVisuals(axle.RightWheel, axle.RightWheelTransform);
        }
    }