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); }
// 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)); }
// 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; } }
// 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; }