void Start()
    {
        if (Spline == null)
        {

           GameObject obj=  new GameObject("path");
            obj.transform.position = transform.position;
            Spline = obj.AddComponent<SplineObject>();

            Spline.AddNode(transform.position);

            Vector3 mid = (target.position - transform.position)/2+transform.position;
          //  float angle = Mathf.Acos(Vector3.Dot(transform.position.normalized, target.position.normalized)) * Mathf.Rad2Deg;
            var len = (target.position - transform.position).magnitude;

          Vector3 ddd = Quaternion.Euler(0, 0, 90) * (target.position - mid).normalized * Mathf.Clamp(len / 2f, 1, 5);

            Spline.AddNode(mid + ddd);
            Spline.AddNode(target.position);
        }

           var tp=	this.TweenPath( Spline.Spline )
            .SetDuration( Duration )
            .SetEasing( TweenEasingFunctions.GetFunction( Easing ) )
            .SetLoopType( Loop )
            .SetTimeScaleIndependent( true )
            .Play();
        tp.OnCompleted(onTweenComplete);
    }
		private void ensureNodeComponents( SplineObject component )
		{

			var count = component.transform.childCount;
			for( int i = 0; i < count; i++ )
			{

				var point = component.transform.GetChild( i ).gameObject;
				if( point.GetComponent<SplineNode>() == null )
				{
					point.AddComponent<SplineNode>();
				}

			}

		}
Esempio n. 3
0
		public override void OnInspectorGUI()
		{

			if( Application.isPlaying )
				return;

			if( serializedObject.isEditingMultipleObjects )
				return;

			this.node = target as SplineNode;
			if( node.transform.parent == null )
				return;

			this.spline = node.transform.parent.GetComponent<SplineObject>();
			if( spline == null )
				return;

			using( BeginGroup( "Selection" ) )
			{

				EditorGUILayout.BeginHorizontal();
				{

					if( GUILayout.Button( "Spline" ) )
					{
						Selection.activeGameObject = spline.gameObject;
					}

					if( GUILayout.Button( "Prev" ) )
					{
						var index = spline.ControlPoints.IndexOf( node.transform ) - 1;
						if( index < 0 )
							index = spline.ControlPoints.Count - 1;
						Selection.activeGameObject = spline.ControlPoints[ index ].gameObject;
					}

					if( GUILayout.Button( "Next" ) )
					{
						var index = spline.ControlPoints.IndexOf( node.transform ) + 1;
						if( index > spline.ControlPoints.Count - 1 )
							index = 0;
						Selection.activeGameObject = spline.ControlPoints[ index ].gameObject;
					}

				}
				EditorGUILayout.EndHorizontal();

			}

			using( BeginGroup( "Insert New Node" ) )
			{

				EditorGUILayout.BeginHorizontal();
				{

					if( GUILayout.Button( "Before" ) )
					{
						insertNodeBefore();
					}

					if( GUILayout.Button( "After" ) )
					{
						insertNodeAfter();
					}

				}
				EditorGUILayout.EndHorizontal();

			}

			using( BeginGroup( "Other Actions" ) )
			{

				if( GUILayout.Button( "Split Spline" ) )
				{
				}

			}

		}