// Update is called once per frame void Update() { if (Target && Target.IsInitialized && TargetTransform) { float tf = Target.GetNearestPointTF(transform.position); TargetTransform.position = Target.Interpolate(tf); } }
void DoFindPoint() { if (!mSpline.IsInitialized || !SourcePoint.UseVariable) { return; } if (!StoreTF.UseVariable && !StorePosition.UseVariable && !StoreUpVector.UseVariable && !StoreRotation.UseVariable) { return; } Vector3 pos = (Space == Space.Self) ? SourcePoint.Value : mSpline.transform.InverseTransformPoint(SourcePoint.Value); float _tf = mSpline.GetNearestPointTF(pos); if (StoreTF.UseVariable) { StoreTF.Value = _tf; } if (StorePosition.UseVariable) { StorePosition.Value = (Space == Space.Self) ? mSpline.Interpolate(_tf) : mSpline.transform.TransformPoint(mSpline.Interpolate(_tf)); } if (StoreTangent.UseVariable) { StoreTangent.Value = (Space == Space.Self) ? mSpline.GetTangent(_tf) : mSpline.transform.TransformDirection(mSpline.GetTangent(_tf)); } if (StoreUpVector.UseVariable) { StoreUpVector.Value = (Space == Space.Self) ? mSpline.GetOrientationUpFast(_tf) : mSpline.transform.TransformDirection(mSpline.GetOrientationUpFast(_tf)); } if (StoreRotation.UseVariable) { if (Space == Space.Self) { StoreRotation.Value = (StoreUpVector.IsNone) ? mSpline.GetOrientationFast(_tf) : Quaternion.LookRotation(mSpline.GetTangent(_tf), StoreUpVector.Value); } else { StoreRotation.Value = Quaternion.LookRotation(mSpline.transform.TransformDirection(mSpline.GetTangent(_tf)), mSpline.transform.TransformDirection(mSpline.GetOrientationUpFast(_tf))); } } }
// Raycast a direction for another spline and get the nearest position on it bool RaycastForFollowUpSpline(Vector3 dir, out CurvySplineBase newSpline, out float newTF) { newSpline = null; newTF = 0; Ray R = new Ray(mTransform.position, dir); RaycastHit hitInfo; if (Physics.Raycast(R, out hitInfo, LAYER_LANE)) { newSpline = hitInfo.collider.transform.parent.GetComponent <CurvySplineBase>(); if (newSpline) { newTF = newSpline.GetNearestPointTF(hitInfo.point); return(true); } } return(false); }
// Raycast a direction for another spline and get the nearest position on it bool RaycastForFollowUpSpline(Vector3 dir, out CurvySplineBase newSpline, out float newTF) { newSpline = null; newTF = 0; Ray R=new Ray(mTransform.position,dir); RaycastHit hitInfo; if (Physics.Raycast(R, out hitInfo,LAYER_LANE)) { newSpline = hitInfo.collider.transform.parent.GetComponent<CurvySplineBase>(); if (newSpline) { newTF = newSpline.GetNearestPointTF(hitInfo.point); return true; } } return false; }