コード例 #1
0
 // Update is called once per frame
 void Update()
 {
     if (Target && Target.IsInitialized && TargetTransform)
     {
         float tf = Target.GetNearestPointTF(transform.position);
         TargetTransform.position = Target.Interpolate(tf);
     }
 }
コード例 #2
0
        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)));
                }
            }
        }
コード例 #3
0
    // 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;
 }