Ejemplo n.º 1
0
    public void AlignUnitOnRail(float travelledDistance, float speed)
    {
        Vector3 tmpPos              = Vector3.zero;
        Vector3 tmpNormal           = Vector3.zero;
        Vector3 tmpTangent          = Vector3.zero;
        int     tmpCurrSegmentIndex = -1;

        float wagonTravelledDistance = (travelledDistance - distanceTrainToUnit);

        if (wagonTravelledDistance > rail.Length)
        {
            wagonTravelledDistance -= rail.Length;
        }
        else if (wagonTravelledDistance < 0)
        {
            wagonTravelledDistance += rail.Length;
        }

        rail.GetPositionNormalTangent(wagonTravelledDistance / rail.Length, out tmpPos, out tmpNormal, out tmpTangent, out tmpCurrSegmentIndex);
        transform.position = tmpPos;
        transform.rotation = Quaternion.LookRotation(tmpTangent, tmpNormal);

        rail.GetPositionNormalTangent((wagonTravelledDistance + distanceUnitToFrontBogie) / rail.Length, out tmpPos, out tmpNormal, out tmpTangent, out tmpCurrSegmentIndex);
        //bogies[0].transform.position = tmpPos;
        bogies[0].transform.rotation = Quaternion.LookRotation(tmpTangent, tmpNormal);

        rail.GetPositionNormalTangent((wagonTravelledDistance + distanceUnitToRearBogie) / rail.Length, out tmpPos, out tmpNormal, out tmpTangent, out tmpCurrSegmentIndex);
        //bogies[1].transform.position = tmpPos;
        bogies[1].transform.rotation = Quaternion.LookRotation(tmpTangent, tmpNormal);

        //AlignCabinOnBogies();
        OscillCabin(speed);
        TurnWheel(speed);
    }
Ejemplo n.º 2
0
    // Update is called once per frame
    void Update()
    {
        Vector3 tmpPos              = Vector3.zero;
        Vector3 tmpNormal           = Vector3.zero;
        Vector3 tmpTangent          = Vector3.zero;
        int     tmpCurrSegmentIndex = -1;

        m_RailManager.GetPositionNormalTangent(m_TravelledDistance / m_RailManager.Length, out tmpPos, out tmpNormal, out tmpTangent, out tmpCurrSegmentIndex);
        Wagon.transform.position = tmpPos;
        Wagon.transform.rotation = Quaternion.LookRotation(tmpTangent, tmpNormal);

        m_TravelledDistance += Time.deltaTime * m_Speed;



        // move front bogie
        m_RailManager.GetPositionNormalTangent(frontBogieTravelledDistance / m_RailManager.Length, out tmpPos, out tmpNormal, out tmpTangent, out tmpCurrSegmentIndex);
        frontBogie.transform.position = tmpPos;
        frontBogie.transform.rotation = Quaternion.LookRotation(tmpTangent, tmpNormal);

        frontBogieTravelledDistance += Time.deltaTime * m_Speed;

        // move back bogie
        m_RailManager.GetPositionNormalTangent(backBogieTravelledDistance / m_RailManager.Length, out tmpPos, out tmpNormal, out tmpTangent, out tmpCurrSegmentIndex);
        backBogie.transform.position = tmpPos;
        backBogie.transform.rotation = Quaternion.LookRotation(tmpTangent, tmpNormal);

        backBogieTravelledDistance += Time.deltaTime * m_Speed;


        //oscilate wagon
        WagonGfx.transform.localRotation = Quaternion.Euler(0, 0, m_Speed / 2 * Mathf.Cos(Time.time));
    }
Ejemplo n.º 3
0
    // Update is called once per frame
    void Update()
    {
        Vector3 tmpPos              = Vector3.zero;
        Vector3 tmpNormal           = Vector3.zero;
        Vector3 tmpTangent          = Vector3.zero;
        int     tmpCurrSegmentIndex = -1;

        rail.GetPositionNormalTangent(travelledDistance / rail.Length, out tmpPos, out tmpNormal, out tmpTangent, out tmpCurrSegmentIndex);

        /*transform.position = tmpPos;
         * transform.rotation = Quaternion.LookRotation(tmpTangent, tmpNormal);*/

        for (int i = 0; i < units.Length; i++)
        {
            units[i].AlignUnitOnRail(travelledDistance, speed);
        }

        travelledDistance += Time.deltaTime * speed;
        if (travelledDistance > rail.Length)
        {
            travelledDistance -= rail.Length;
        }
        else if (travelledDistance < 0)
        {
            travelledDistance += rail.Length;
        }
    }
Ejemplo n.º 4
0
    // Update is called once per frame
    void Update()
    {
        Vector3 tmpPos              = Vector3.zero;
        Vector3 tmpNormal           = Vector3.zero;
        Vector3 tmpTangent          = Vector3.zero;
        int     tmpCurrSegmentIndex = -1;

        m_RailManager.GetPositionNormalTangent(m_TravelledDistance / m_RailManager.Length, out tmpPos, out tmpNormal, out tmpTangent, out tmpCurrSegmentIndex);
        m_Transform.position = tmpPos;
        m_Transform.rotation = Quaternion.LookRotation(tmpTangent, tmpNormal);

        m_TravelledDistance += Time.deltaTime * m_Speed;
    }