コード例 #1
0
    private void UpdateWheels()
    {
        Vector3    pos = Vector3.zero;
        Quaternion rot = Quaternion.identity;

        wheelColliderRightFront.GetWorldPose(out pos, out rot);
        wheelRightFront.position = pos;
        wheelRightFront.rotation = rot;

        wheelColliderLeftFront.GetWorldPose(out pos, out rot);
        wheelLeftFront.position = pos;
        wheelLeftFront.rotation = rot;

        wheelColliderRightBack.GetWorldPose(out pos, out rot);
        wheelRightBack.position = pos;
        wheelRightBack.rotation = rot;

        wheelColliderLeftBack.GetWorldPose(out pos, out rot);
        wheelLeftBack.position = pos;
        wheelLeftBack.rotation = rot
        ;
    }
コード例 #2
0
        void FixedUpdate()
        {
            if (Time.realtimeSinceStartup - lastUpdate < 1f / 60f)
            {
                return;
            }
            lastUpdate = Time.realtimeSinceStartup;

            if (_wheelModel && _wheelCollider)
            {
                Vector3    pos  = new Vector3(0, 0, 0);
                Quaternion quat = new Quaternion();
                _wheelCollider.GetWorldPose(out pos, out quat);

                _wheelModel.transform.rotation       = quat;
                _wheelModel.transform.localRotation *= Quaternion.Euler(localRotOffset);
                _wheelModel.transform.position       = pos;

                WheelHit wheelHit;
                _wheelCollider.GetGroundHit(out wheelHit);
            }
        }
コード例 #3
0
    // 対応する視覚的なホイールを見つけます
    // Transform を正しく適用します
    public void ApplyLocalPositionToVisuals(WheelCollider collider)
    {
        //Wheelコライダーの子要素がない場合は処理終了。
        if (collider.transform.childCount == 0)
        {
            return;
        }

        //タイヤビジュアルを取得
        Transform visualWheel = collider.transform.GetChild(0);

        //コライダーの位置と回転を取得。
        Vector3    position;
        Quaternion rotation;

        collider.GetWorldPose(out position, out rotation);

        //タイヤビジュアルに、コライダーの値を設定。
        //単純な車の場合、Z軸を90f回転させる必要がある
        visualWheel.transform.position = position;
        visualWheel.transform.rotation = rotation * Quaternion.Euler(0f, 0f, 90f);
    }
コード例 #4
0
ファイル: MCar.cs プロジェクト: TrollShin/MarTruck
    //Wheel에 Tire 모델을 맞춰주는 함수.
    private void SetWheelShape(WheelCollider Wheel)
    {
        if (WheelShape)
        {
            Quaternion q;
            Vector3    p;
            Wheel.GetWorldPose(out p, out q);

            Transform ShapeTransform = Wheel.transform.GetChild(0);

            if (Wheel.tag.Contains("RightTire"))
            {
                ShapeTransform.rotation = q * Quaternion.Euler(0, 0, 90);
                ShapeTransform.position = p;
            }
            else
            {
                ShapeTransform.position = p;
                ShapeTransform.rotation = q * Quaternion.Euler(0, 180, 90);;
            }
        }
    }
コード例 #5
0
        public void HandleWheel(IP_BaseAirplane_Input input)
        {
            if (WheelCol)
            {
                //Place the Wheel in the correct position
                WheelCol.GetWorldPose(out worldPos, out worldRot);
                if (wheelGraphic)
                {
                    wheelGraphic.rotation = worldRot;
                    wheelGraphic.position = worldPos;
                }

                //Handle the Braking of the Wheel
                if (isBraking)
                {
                    if (input.Brake > 0.1f)
                    {
                        finalBrakeForce      = Mathf.Lerp(finalBrakeForce, input.Brake * brakePower, Time.deltaTime);
                        WheelCol.brakeTorque = finalBrakeForce;
                    }
                    else
                    {
                        finalBrakeForce      = 0f;
                        WheelCol.brakeTorque = 0f;
                        WheelCol.motorTorque = 0.000000000001f;
                    }
                }

                //Handle steering of the wheel
                if (isSteering)
                {
                    finalSteerAngle     = Mathf.Lerp(finalSteerAngle, -input.Yaw * steerAngle, Time.deltaTime * steerSmoothSpeed);
                    WheelCol.steerAngle = finalSteerAngle;
                }

                //Check to see if the wheel is grounded
                isGrounded = WheelCol.isGrounded;
            }
        }
コード例 #6
0
        /// <summary>
        /// Applies Wheel Collider rotation and position to their visual elements
        /// </summary>
        /// <param name="collider">Wheel Collider that the visual is attached to</param>
        private static void ApplyLocalPositionToVisuals(WheelCollider collider)
        {
            if (collider.transform.childCount == 0)
            {
                return;
            }

            Transform visualWheel = collider.transform.GetChild(0);

            Vector3    position;
            Quaternion rotation;

            collider.GetWorldPose(out position, out rotation);

            visualWheel.transform.position = position;
            visualWheel.transform.rotation = rotation;

            Vector3 euler = visualWheel.transform.rotation.eulerAngles;

            //visual wheel rotation fix - sets y rotation to 90
            visualWheel.transform.rotation = Quaternion.Euler(euler.x, euler.y, 90);
        }
コード例 #7
0
    private void MoveWheel(Transform wheel, WheelCollider collider, Vector3 origPos, float theta, Quaternion Q, bool steering)
    {
        if (wheel.localPosition != origPos)
        {
            wheel.localPosition = origPos;
        }

        if (steering)
        {
            wheel.rotation = Quaternion.RotateTowards(wheel.rotation, Q, Time.fixedDeltaTime * 50f);
        }

        wheel.transform.Rotate(Vector3.right, theta, Space.Self);

        Vector3    pos;
        Quaternion rot;

        collider.GetWorldPose(out pos, out rot);
        wheel.position = pos;
//      this does not work because we move our NPCs without forces
//        wheel.rotation = rot;
    }
コード例 #8
0
    void Update()
    {
        Quaternion flq;
        Vector3    flv;

        WheelFL.GetWorldPose(out flv, out flq);
        FL.transform.position = flv;
        FL.transform.rotation = flq;


        Quaternion Blq;
        Vector3    Blv;

        WheelBL.GetWorldPose(out Blv, out Blq);
        BL.transform.position = Blv;
        BL.transform.rotation = Blq;


        Quaternion frq;
        Vector3    frv;

        WheelFR.GetWorldPose(out frv, out frq);
        FR.transform.position = frv;
        FR.transform.rotation = frq;


        Quaternion Brq;
        Vector3    Brv;

        WheelBR.GetWorldPose(out Brv, out Brq);
        BR.transform.position = Brv;
        BR.transform.rotation = Brq;

        if (photonView.IsMine)
        {
            photonView.RPC("ChangeCar", RpcTarget.AllBuffered);
        }
    }
コード例 #9
0
ファイル: CarMovement.cs プロジェクト: winterdl/karting
    /// <summary>
    /// Updates the wheel transforms.
    /// </summary>
    void UpdateWheelTransforms()
    {
        if (networkId.IsMine)
        {
            Quaternion rotation;
            Vector3    position;

            frontLeftCollider.GetWorldPose(out position, out rotation);
            frontLeftTransform.position = position;
            frontLeftTransform.rotation = rotation;

            frontRightCollider.GetWorldPose(out position, out rotation);
            frontRightTransform.position = position;
            frontRightTransform.rotation = rotation;

            // update the front wheel rotation for generic tracker
            frontWheelRot = rotation;

            rearLeftCollider.GetWorldPose(out position, out rotation);
            rearLeftTransform.position = position;
            rearLeftTransform.rotation = rotation;

            rearRightCollider.GetWorldPose(out position, out rotation);
            rearRightTransform.position = position;
            rearRightTransform.rotation = rotation;

            // update the rear wheel rotation for generic tracker
            rearWheelRot = rotation;
        }
        else
        {
            // apply the rotation updates for remote copies
            frontLeftTransform.rotation  = frontWheelRot;
            frontRightTransform.rotation = frontWheelRot;
            rearLeftTransform.rotation   = rearWheelRot;
            rearRightTransform.rotation  = rearWheelRot;
        }
    }
コード例 #10
0
    private void Update()
    {
        Quaternion frontWheelLeft_quaternion;
        Vector3    frontWheelLeft_vector3;

        frontWheelLeft_collider.GetWorldPose(out frontWheelLeft_vector3, out frontWheelLeft_quaternion);
        frontWheelLeft_mesh.transform.position      = frontWheelLeft_vector3;
        frontWheelLeft_mesh.transform.localRotation = frontWheelLeft_quaternion;
        //frontWheelLeft_mesh.transform.Rotate(0, frontWheelLeft_quaternion.y, 0);
        //Debug.Log(frontWheelLeft_quaternion.z);

        Quaternion frontWheelRight_quaternion;
        Vector3    frontWheelRight_vector3;

        frontWheelRight_collider.GetWorldPose(out frontWheelRight_vector3, out frontWheelRight_quaternion);
        frontWheelRight_mesh.transform.position      = frontWheelRight_vector3;
        frontWheelRight_mesh.transform.localRotation = frontWheelRight_quaternion;
        //frontWheelRight_mesh.transform.Rotate(0, frontWheelRight_quaternion.y, 0);
        //Debug.Log(frontWheelRight_quaternion.z);

        Quaternion backWheelLeft_quaternion;
        Vector3    backWheelLeft_vector3;

        backWheelLeft_collider.GetWorldPose(out backWheelLeft_vector3, out backWheelLeft_quaternion);
        backWheelLeft_mesh.transform.position      = backWheelLeft_vector3;
        backWheelLeft_mesh.transform.localRotation = new Quaternion(backWheelLeft_quaternion.x, backWheelLeft_quaternion.y, backWheelLeft_quaternion.z - 90, 0);
        //backWheelLeft_mesh.transform.Rotate(0, backWheelLeft_quaternion.y, 0);

        Quaternion backWheelRight_quaternion;
        Vector3    backWheelRight_vector3;

        backWheelRight_collider.GetWorldPose(out backWheelRight_vector3, out backWheelRight_quaternion);
        backWheelRight_mesh.transform.position      = backWheelRight_vector3;
        backWheelRight_mesh.transform.localRotation = backWheelRight_quaternion;
        //backWheelRight_mesh.transform.Rotate(0, backWheelRight_quaternion.y, 0);

        //Debug.Log(frontWheelLeft_mesh.transform.rotation);
    }
コード例 #11
0
    public void FixedUpdate()
    {
        float motor    = maxMotorTorque * Input.GetAxis("Vertical");
        float steering = maxSteeringAngle * Input.GetAxis("Horizontal");

        wc.steerAngle  = steering;
        wc.motorTorque = motor;

        Vector3    position;
        Quaternion rotation;

        wc.GetWorldPose(out position, out rotation);
        if (rotateOnly)
        {
            rotation.eulerAngles          = new Vector3(wc.rpm, 0f, 0f);
            wheel.transform.localRotation = rotation;
        }
        else
        {
            rotation.eulerAngles          = new Vector3(wc.rpm, -Mathf.Clamp(steering, -maxSteeringAngle, maxSteeringAngle), 0f);
            wheel.transform.localRotation = rotation;
        }
    }
コード例 #12
0
        // Update is called once per frame
        void Update()
        {
            if (wheel == null)
            {
                return;
            }

            if (model != null)
            {
                Vector3    wheelPos  = Vector3.zero;
                Quaternion wheelQuat = Quaternion.identity;
                wheel.GetWorldPose(out wheelPos, out wheelQuat);
                model.position = wheelPos;
                model.rotation = wheelQuat;
            }

            wheel.steerAngle = steerInput * maxAngle;

            ApplyTorque();
            ApplyBrake();

            PlayEffects();
        }
コード例 #13
0
        /// <summary>
        /// Sets the position and rotation of the visual mesh to match the wheel collider
        /// </summary>
        /// <param name="collider"></param>
        /// <param name="wheelMesh"></param>
        public void ApplyLocalPositionToVisuals(WheelCollider collider, Transform wheelMesh, float wheelOffset)
        {
            Vector3    position;
            Quaternion rotation;

            //get world postion and rotation from collider
            collider.GetWorldPose(out position, out rotation);

            //set wheel position in world space
            wheelMesh.position = position;

            //convert world space to local space
            Vector3 LocalPosition = wheelMesh.InverseTransformPoint(wheelMesh.transform.position);

            //add wheel offset
            LocalPosition = new Vector3(LocalPosition.x + wheelOffset, LocalPosition.y, LocalPosition.z);

            //re-apply position in world space
            wheelMesh.position = wheelMesh.TransformPoint(LocalPosition);

            //apply rotation
            wheelMesh.rotation = rotation;
        }
コード例 #14
0
    private void LateUpdate()
    {
        // Get position and rotation feom WheelCollider
        WheelCollider.GetWorldPose(out Position, out Rotation);

        //Position translation to local space
        Position  = WheelCollider.transform.InverseTransformPoint(Position) + OffsetPosition;
        Position -= CenterArcPoint;

        //Find Y of wheel position
        var offsetY = Position.y - MaxLengthOnDistance * WheelCollider.suspensionDistance;

        if (offsetY < ArmLength && offsetY > -ArmLength)
        {
            //Calcelate X, According to the formula X*X + Y*Y = R*R
            Position.x = OffsetPosition.x + Mathf.Sqrt((ArmLength * ArmLength) - (offsetY * offsetY));
        }
        if (Invertion)
        {
            Position.x = -Position.x;
        }
        transform.localPosition = Position;
    }
コード例 #15
0
        public void OnUpdate(float motorTorque, float rotateFactor)
        {
            // 转弯
            if (isSteerWheel)
            {
                wheelCollider.steerAngle = _controller.inputX * rotateFactor
                                           * (_controller.inputX > 0f ? _steerRight : _steerLeft);
            }

            // 驱动
            if (isMotorWheel)
            {
                wheelCollider.motorTorque = motorTorque * _motorTorqueScale;
            }

            // 刹车
            wheelCollider.brakeTorque = _controller.inputBrake * _mass * massToBrakeRatio;

            // 模型
            wheelCollider.GetWorldPose(out _pos, out _rot);
            _wheelModel.position = _pos;
            _wheelModel.rotation = _rot;
        }
コード例 #16
0
    public void movetoTgt()
    {
        Debug.Log("Moving to tgt");
        Vector3    rWheelLook;
        Quaternion rWheelRot;
        Vector3    lWheelLook;
        Quaternion lWheelRot;
        var        tgtRelativePos = gameObject.transform.InverseTransformPoint(target.transform.position);
        var        steerAngle     = tgtRelativePos.x / tgtRelativePos.magnitude * maxSteer;

        if (currentSpeed < topSpeed)
        {
            rWheel.motorTorque = 250f;
            lWheel.motorTorque = 250f;
            rWheel.brakeTorque = 0F;
            lWheel.brakeTorque = 0F;
        }
        else
        {
            rWheel.motorTorque = 0f;
            lWheel.motorTorque = 0f;
        }

        rWheel.steerAngle = steerAngle;
        lWheel.steerAngle = steerAngle;


        rWheel.GetWorldPose(out rWheelLook, out rWheelRot);

        rWheelGeo.transform.rotation = rWheelRot;
        rWheelGeo.transform.position = rWheelLook;

        lWheel.GetWorldPose(out lWheelLook, out lWheelRot);

        lWheelGeo.transform.rotation = lWheelRot;
        lWheelGeo.transform.position = lWheelLook;
    }
コード例 #17
0
        public void HandleWheel(BaseAirplane_Input input, bool handbrake)
        {
            if (WheelCol)
            {
                WheelCol.GetWorldPose(out worldPos, out worldRot);
                if (WheelGraphic)
                {
                    WheelGraphic.rotation = worldRot;
                    WheelGraphic.position = worldPos;
                }

                if (isBraking)
                {
                    if (handbrake)
                    {
                        finalBrakeForce      = Mathf.Lerp(finalBrakeForce, 1f * brakePower, Time.deltaTime);
                        WheelCol.brakeTorque = finalBrakeForce;
                    }
                    else if (input.Brake > 0.1f)
                    {
                        finalBrakeForce      = Mathf.Lerp(finalBrakeForce, input.Brake * brakePower, Time.deltaTime);
                        WheelCol.brakeTorque = finalBrakeForce;
                    }
                    else
                    {
                        finalBrakeForce      = 0f;
                        WheelCol.brakeTorque = 0f;
                        WheelCol.motorTorque = 0.000000001f;
                    }
                }

                if (isSteering)
                {
                    WheelCol.steerAngle = -input.Yaw * steeringAngle;
                }
            }
        }
コード例 #18
0
ファイル: CarController.cs プロジェクト: oshima-yuki/TeamB
    public float maxSteeringAngle;    // ホイールのハンドル最大角度

    public void ApplyLocalPositionToVisuals(WheelCollider collider)
    {
        if (collider.transform.childCount == 0)
        {
            return;
        }

        Transform visualWheel = collider.transform.GetChild(0);

        // コライダーの位置と回転を取得。
        Vector3    position;
        Quaternion rotation;

        collider.GetWorldPose(out position, out rotation);


        visualWheel.transform.position = position;

        /**********************
         * // タイヤにシリンダーを使ってる場合、Z軸を90度回転させないとタイヤが横向きになってしまうためZ軸に90度回転を常に加える
         * // タイヤように作られた3Dモデルの場合 * Quaternion.Euler (0f, 0f, 90f) の部分は必要ない
         ***********************/
        visualWheel.transform.rotation = rotation * Quaternion.Euler(0f, 0f, 90f);
    }
コード例 #19
0
    public void ApplyLocalPositionToVisuals(WheelCollider collider)
    {
        if (collider.transform.childCount == 0)
        {
            return;
        }

        Transform visualWheel = collider.transform.GetChild(0);

        Vector3    position;
        Quaternion rotation;

        collider.GetWorldPose(out position, out rotation);

        Vector3 wheelPos = visualWheel.transform.position;

        wheelPos.y = position.y; // track vertical position (suspension)
        visualWheel.transform.position = wheelPos;

        visualWheel.transform.rotation = rotation;

        // Need to do this otherwise the wheels will have the wrong rotation.
        visualWheel.Rotate(-90, 0, -90);
    }
コード例 #20
0
    // 轮胎模型
    public void             tireModelControl()
    {
        foreach (var wheel in this.wheels)
        {
            WheelCollider wc = wheel.collider;

            Vector3    position;
            Quaternion rotation;

            wc.GetWorldPose(out position, out rotation);

            wheel.tire_model.transform.position = position;
            wheel.tire_model.transform.rotation = rotation;

            // 为了防止轮胎从车体飞出,控制它不超过最上方的值
            Vector3 local_position = wheel.tire_model.transform.localPosition;

            if (local_position.y > TIRE_LOCAL_Y_MAX)
            {
                local_position.y = TIRE_LOCAL_Y_MAX;
                wheel.tire_model.transform.localPosition = local_position;
            }
        }
    }
コード例 #21
0
    // finds the corresponding visual wheel
    // correctly applies the transform
    public void ApplyLocalPositionToVisuals(WheelCollider collider, GameObject game_object)
    {
        /*if (collider.transform.childCount == 0)
         * {
         *  Debug.Log(collider.transform.parent);
         *  return;
         * }
         *
         * Transform visualWheel = collider.transform.GetChild(0);
         *
         * Vector3 position;
         * Quaternion rotation;
         * collider.GetWorldPose(out position, out rotation);
         *
         * visualWheel.transform.position = position;
         * visualWheel.transform.rotation = rotation;*/
        Vector3    position;
        Quaternion rotation;

        collider.GetWorldPose(out position, out rotation);
        //Debug.Log(position);
        game_object.transform.position = position;
        game_object.transform.rotation = rotation; // * Quaternion.Euler(Vector3.right * 90);
    }
コード例 #22
0
    // タイヤモデル.
    public void             tireModelControl()
    {
        foreach (var wheel in this.wheels)
        {
            WheelCollider wc = wheel.collider;

            Vector3    position;
            Quaternion rotation;

            wc.GetWorldPose(out position, out rotation);

            wheel.tire_model.transform.position = position;
            wheel.tire_model.transform.rotation = rotation;

            // タイヤモデルがボディから飛び出ないよう、上に上がりすぎないようにする.
            Vector3 local_position = wheel.tire_model.transform.localPosition;

            if (local_position.y > TIRE_LOCAL_Y_MAX)
            {
                local_position.y = TIRE_LOCAL_Y_MAX;
                wheel.tire_model.transform.localPosition = local_position;
            }
        }
    }
コード例 #23
0
        void GetWorldPose()
        {
            if (_component == null)
            {
                return;
            }

            _component.GetWorldPose(out _position, out _rotation);
            if (!position.IsNone)
            {
                position.Value = _position;
            }
            if (!rotation.IsNone)
            {
                rotation.Value = _rotation;
            }

            _dummy = Fsm.GetOwnerDefaultTarget(gameObject);
            if (_dummy != null)
            {
                _dummy.transform.position = _position;
                _dummy.transform.rotation = _rotation;
            }
        }
コード例 #24
0
ファイル: WheelMovement.cs プロジェクト: Julien-Leos/Floww
 void Update()
 {
     wheel.GetWorldPose(out position, out rotation);
     transform.position = position;
     transform.rotation = rotation;
 }
コード例 #25
0
ファイル: Rover.cs プロジェクト: aaron730/OMEvr
    /*
     * private void TurretInput()
     * {
     *  Vector2 tIn = TurretControl.joystick();
     *
     *  Vector3 tur = new Vector3(tIn.x, 0, tIn.y);
     *  tur = TurretControl.transform.TransformDirection(tur);
     *  tur = transform.InverseTransformDirection(tur);
     *  tur = Vector3.ProjectOnPlane(tur, Vector3.up);
     *  turretRot = VectorMath.FindAngle(Vector3.forward, tur, Vector3.up) * Mathf.Rad2Deg;
     *  Vector3 turup = Vector3.forward;
     *  turret.localRotation = Quaternion.Euler(turup * turretRot);
     *
     *
     *  if (rapidfireTime == 0)
     *  {
     *      if (TurretControl.GetPressDown(KnucklesButton.Trigger))
     *      {
     *          Fire();
     *      }
     *  }else
     *  {
     *      if (shootTimer > rapidfireTime&& TurretControl.GetPress(KnucklesButton.Trigger))
     *      {
     *          Fire();
     *          shootTimer = 0;
     *      }
     *      shootTimer += Time.deltaTime;
     *  }
     * }
     */

    private void Update()
    {
        m_Wheels[0].ConfigureVehicleSubsteps(criticalSpeed, stepsBelow, stepsAbove);

        //TurretInput();

        //keyboard input for testing
        //Vector3 move = Vector3.forward * Input.GetAxis("Vertical") + Vector3.right * Input.GetAxis("Horizontal");


        //driving input
        //float forward = maxTorque * move.magnitude;

        float forward = maxTorque * throttle;

        if (steer.y < -0.5f)
        {
            forward *= -1;
        }

        float angle = maxAngle * steer.x;

        speed = transform.InverseTransformVector(body.velocity).z;

        float forw = Mathf.Abs(speed);


        angle /= 1 + forw / 20;

        // if (Mathf.Abs(move.z) < 0.1f && Mathf.Abs(move.x) > 0.5)
        //    forward *= 3;

        //float forward = maxTorque * throttle; not fun lawrence steering

        float fVol = Mathf.Abs(forward);

        mvol = Mathf.Lerp(mvol, Mathf.Pow((fVol / maxTorque), 0.8f) * Mathf.Lerp(0.4f, 1.0f, (Mathf.Abs(m_Wheels[2].rpm) / 200)) * Mathf.Lerp(1.0f, 0.5f, handBrake), Time.deltaTime * 9);

        au_motor.volume = Mathf.Clamp01(mvol);
        float motorPitch = Mathf.Lerp(0.8f, 1.0f, mvol);

        au_motor.pitch = Mathf.Clamp01(motorPitch);

        svol = Mathf.Lerp(svol, skidsample.amt / skidSpeed, Time.deltaTime * 9);

        au_skid.volume = Mathf.Clamp01(svol);
        float skidPitch = Mathf.Lerp(0.9f, 1.0f, svol);

        au_skid.pitch = Mathf.Clamp01(skidPitch);



        //float forward = maxTorque * Input.GetAxis("Vertical");

        //bool stopped = Mathf.Abs(transform.InverseTransformDirection(GetComponent<Rigidbody>().velocity).z) < 1.0f;



        for (int i = 0; i < wheelRenders.Length; i++)
        {
            WheelCollider wheel = m_Wheels[i];


            if (wheel.transform.localPosition.z > 0)
            {
                // front wheels
                wheel.steerAngle = angle;

                //4wd?
                wheel.motorTorque = forward;
            }

            if (wheel.transform.localPosition.z < 0) // back wheels
            {
            }

            // wheel.brakeTorque = Mathf.Lerp(Mathf.Abs(forward) < 0.1f ? 1 : 0, brakeTorque, handBrake);

            wheel.motorTorque = forward;

            if (wheel.transform.localPosition.x < 0) // left wheels
            {
            }

            if (wheel.transform.localPosition.x >= 0) // right wheels
            {
            }



            // Update visual wheels if they exist, and the colliders are enabled
            if (wheelRenders[i] != null && m_Wheels[0].enabled)
            {
                Quaternion q;
                Vector3    p;
                wheel.GetWorldPose(out p, out q);


                Transform shapeTransform = wheelRenders[i].transform;
                shapeTransform.position = p;
                shapeTransform.rotation = q;
            }
        }


        steer = Vector2.Lerp(steer, Vector2.zero, Time.deltaTime * 4);
    }
コード例 #26
0
    // Apply the movement inputs to the wheels of the car
    private void Update()
    {
        brakeImage.color   = Color.white;
        forwardImage.color = Color.white;
        backImage.color    = Color.white;
        leftImage.color    = Color.white;
        rightImage.color   = Color.white;

        currentVelocity = mainBody.velocity.magnitude;

        if (manualControl)
        {
            if (Input.GetKey(KeyCode.Space))
            {
                brakeImage.color = Color.green;

                leftTorque  = 0;
                rightTorque = 0;
            }
            else
            {
                if (Input.GetKey(KeyCode.W))
                {
                    forwardImage.color = Color.green;

                    leftTorque  = torqueLimit;
                    rightTorque = torqueLimit;
                }
                else if (Input.GetKey(KeyCode.A))
                {
                    leftImage.color = Color.green;

                    leftTorque  = -torqueLimit;
                    rightTorque = torqueLimit;
                }
                else if (Input.GetKey(KeyCode.D))
                {
                    rightImage.color = Color.green;

                    leftTorque  = torqueLimit;
                    rightTorque = -torqueLimit;
                }
                else if (Input.GetKey(KeyCode.S))
                {
                    backImage.color = Color.green;

                    leftTorque  = -torqueLimit;
                    rightTorque = -torqueLimit;
                }
                else
                {
                    leftTorque  = 0;
                    rightTorque = 0;
                }
            }
        }
        else
        {
            if (currentVelocity < maxVelocity)
            {
                if (brakeInput)
                {
                    brakeImage.color = Color.green;

                    leftTorque  = 0;
                    rightTorque = 0;
                }
                else
                {
                    if (forwardInput)
                    {
                        forwardImage.color = Color.green;

                        leftTorque  = torqueLimit;
                        rightTorque = torqueLimit;
                    }
                    else if (leftInput)
                    {
                        leftImage.color = Color.green;

                        leftTorque  = -torqueLimit;
                        rightTorque = torqueLimit;
                    }
                    else if (rightInput)
                    {
                        rightImage.color = Color.green;

                        leftTorque  = torqueLimit;
                        rightTorque = -torqueLimit;
                    }
                    else if (backInput)
                    {
                        backImage.color = Color.green;

                        leftTorque  = -torqueLimit;
                        rightTorque = -torqueLimit;
                    }
                    else
                    {
                        leftTorque  = 0;
                        rightTorque = 0;
                    }
                }
            }
            else
            {
                leftTorque  = 0;
                rightTorque = 0;
            }
        }
        wheel_left.motorTorque  = leftTorque;
        wheel_right.motorTorque = rightTorque;

        // Update wheel rotations (VISUAL)
        wheel_left.GetWorldPose(out wheel_pos, out left_rotation);
        wheel_right.GetWorldPose(out wheel_pos, out right_rotation);

        wheel_model_left.rotation  = left_rotation;
        wheel_model_right.rotation = right_rotation;

        brakeInput   = false;
        forwardInput = false;
        leftInput    = false;
        rightInput   = false;
        backInput    = false;
    }
コード例 #27
0
    void FixedUpdate()      //fixed update is more physics realistic
    {
        if (tempo < 200)
        {
            Forward = 1.0f;
            tempo   = tempo + 1;
        }
        else
        {
            if (currentSpeed < 0.0f)
            {
                Forward = -1.0f;
            }
            else
            {
                Forward = 0f;
            }
            Brake = 1.0f;
        }

        Turn  = Input.GetAxis("Horizontal");
        Brake = Input.GetAxis("Jump");

        WheelFL.steerAngle = maxSteerAngle * Turn;
        WheelFR.steerAngle = maxSteerAngle * Turn;

        currentSpeed = 2 * 22 / 7 * WheelBL.radius * WheelBL.rpm * 60 / 1000; //formula for calculating speed in kmph

        if (currentSpeed < topSpeed)
        {
            WheelBL.motorTorque = maxTorque * Forward;//run the wheels on back left and back right
            WheelBR.motorTorque = maxTorque * Forward;
        }
        //the top speed will not be accurate but will try to slow the car before top speed

        WheelBL.brakeTorque = maxBrakeTorque * Brake;
        WheelBR.brakeTorque = maxBrakeTorque * Brake;
        WheelFL.brakeTorque = maxBrakeTorque * Brake;
        WheelFR.brakeTorque = maxBrakeTorque * Brake;

        Quaternion flq;                         //rotation of wheel collider
        Vector3    flv;                         //position of wheel collider

        WheelFL.GetWorldPose(out flv, out flq); //get wheel collider position and rotation
        FL.transform.position = flv;
        FL.transform.rotation = flq;

        Quaternion Blq;                         //rotation of wheel collider
        Vector3    Blv;                         //position of wheel collider

        WheelBL.GetWorldPose(out Blv, out Blq); //get wheel collider position and rotation
        BL.transform.position = Blv;
        BL.transform.rotation = Blq;

        Quaternion fRq;                         //rotation of wheel collider
        Vector3    fRv;                         //position of wheel collider

        WheelFR.GetWorldPose(out fRv, out fRq); //get wheel collider position and rotation
        FR.transform.position = fRv;
        FR.transform.rotation = fRq;

        Quaternion BRq;                         //rotation of wheel collider
        Vector3    BRv;                         //position of wheel collider

        WheelBR.GetWorldPose(out BRv, out BRq); //get wheel collider position and rotation
        BR.transform.position = BRv;
        BR.transform.rotation = BRq;
    }
コード例 #28
0
ファイル: CarWheel.cs プロジェクト: ALiEN-24/Assets
    private Quaternion wheelRotation = new Quaternion();                                                                                                //Quaternion refers to the rotation of objects

    // Update is called once per frame
    void Update()
    {
        targetWheel.GetWorldPose(out wheelPosition, out wheelRotation);                                                                 //Stores the wheel position and rotation in GetworldPose
        transform.position = wheelPosition;
        transform.rotation = wheelRotation;
    }
コード例 #29
0
ファイル: CarWheel.cs プロジェクト: idaitesamatarp/CarAI
 // Update is called once per frame
 void Update()
 {
     targetWheel.GetWorldPose(out wheelPosition, out wheelRotation);
     transform.position = wheelPosition;
     transform.rotation = wheelRotation;
 }
コード例 #30
0
    private void UpdateWheelPose(WheelCollider _collider, Transform _transform)
    {
        //  Quaternion bodyRotation = transform.rotation * Quaternion.Euler(0f, 0f, -frontWheelR.steerAngle * m_verticalInput);
        //  bikeBody.rotation = Quaternion.Lerp(bikeBody.rotation, bodyRotation, 0.02f);

        // var latLng = frontTR.GetGeoPosition(new Vector2d(43.768419, -79.504172), 1);
        var latLng2 = frontTR.GetGeoPosition(new Vector2d(0, 0), 1);
        //Debug.Log("XY=" + latLng2);


        // York University Location

        //Debug.Log("testCenterPoint=" + testCenterPoint);


        var llpos = new Vector2d(latLng2[0], latLng2[1]);
        var pos   = Conversions.GeoToWorldPosition(llpos, Map.CenterLatitudeLongitude, Map.WorldRelativeScale);

        // Debug.Log("latlng=" + pos);
        XY.text = "(" + pos + ")";


        ///////////////////////// Lat Lng //////////////////////////////
        var a = 0.0820877620;
        var b = -0.239524485;
        var c = 43.7647518;
        var d = -0.148612373;
        var e = 0.435345927;
        var f = -79.5018448;
        var g = 0.00186931199;
        var h = -0.00547156062;

        var XGround = ((latLng2[0] * a) + (latLng2[1] * b) + c) / (latLng2[0] * g + (latLng2[1]) * h + 1);
        var YGround = ((latLng2[0] * d) + (latLng2[1] * e) + f) / (latLng2[0] * g + latLng2[1] * h + 1);



        LatLong.text = "(" + XGround + " , " + YGround + ")";
        ///////////////////////////////////////////////////////////////

        // create new object as a new point

        /*  var objToSpawn =  GameObject.CreatePrimitive(PrimitiveType.Cube); ;
         * objToSpawn.AddComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeAll;
         * objToSpawn.AddComponent<MeshFilter>();
         * objToSpawn.AddComponent<BoxCollider>();
         * objToSpawn.AddComponent<MeshRenderer>();
         * objToSpawn.transform.position = new Vector3(-13, 6, -390);*/



        // var gg = GameObject.CreatePrimitive(PrimitiveType.Sphere);
        // gg.transform.position = new Vector3((float)pos.x, 0, (float)pos.y);


        // StoreData(""+XGround , ""+YGround , ""+refrencePoint.position.y + ", time=" + System.DateTime.Now);
        //   StoreData("" + latLng2[0], "" + latLng2[1], "" + refrencePoint.position.y + ", time=" + System.DateTime.Now);

        StoreSegmentData("" + XGround, "" + YGround, "collectedData", "" + refrencePoint.position.y, "time=" + System.DateTime.Now, "details");
        counterStoreData++;


        window_graph.CreateCircle(new Vector2(i_counter_x_axis, refrencePoint.position.y * 10));
        if (i_counter_x_axis > 280)
        {
            i_counter_x_axis = 0;
        }
        i_counter_x_axis = (float)(i_counter_x_axis + 0.1);



        Vector3    _pose = _transform.position;
        Quaternion _quat = _transform.rotation;

        _collider.GetWorldPose(out _pose, out _quat);

        _transform.position = _pose;
        _transform.rotation = _quat;
    }