private void Update() { if (m_spline == null) { return; } if (transform.localPosition != m_localPosition) { if (m_spline.SetControlPointLocal(m_index, transform.localPosition)) { m_localPosition = transform.localPosition; } else { transform.localPosition = m_localPosition; } } if (transform.rotation != m_rotation) { if (m_index % 3 == 0) { Vector3 v = Vector3.back; int prevIndex = m_index - 1; if (prevIndex < 0) { prevIndex = m_index + 1; v = Vector3.forward; } Vector3 prevPt = m_spline.GetControlPoint(prevIndex); Vector3 pt = m_spline.GetControlPoint(m_index); Vector3 toPrev = (transform.rotation * v).normalized * (pt - prevPt).magnitude; Twist twist = m_spline.GetTwist(m_index); m_rotation = transform.rotation; twist.Data = transform.eulerAngles.z; m_updateAngle = false; m_spline.SetTwist(m_index, twist); m_spline.SetControlPoint(prevIndex, pt + toPrev); m_updateAngle = true; } else { transform.rotation = m_rotation; } } Thickness thickness = m_spline.GetThickness(m_index); Vector3 thicknessData = thickness.Data; if (transform.localScale != thicknessData) { thickness.Data = transform.localScale; m_spline.SetThickness(m_index, thickness); } }