Exemple #1
0
        BezierCurvePath FindPath(Vector3 start_position, Vector3 target_position)
        {
            this.UpdateMeshFilterBounds();
            var path_list = PathFinding.FindPathAstar(
                start_position,
                target_position,
                this._search_boundary,
                this._grid_granularity,
                this._actor_size,
                this._approach_distance);

            if (path_list != null && path_list.Count > 0)
            {
                path_list = PathFinding.SimplifyPath(path_list, this._actor_size);
                path_list.Add(target_position);
            }
            else
            {
                path_list = new List <Vector3> {
                    start_position, target_position
                };
            }

            var path = new BezierCurvePath(start_position, target_position, this._bezier_curve, path_list);

            return(path);
        }
Exemple #2
0
        BezierCurvePath FindPath(Vector3 start_position, Vector3 target_position)
        {
            this.UpdateMeshFilterBounds();
            var path_list = PathFinding.FindPathAstar(
                start_position,
                target_position,
                this._search_boundary,
                this._grid_granularity,
                this._actor_size,
                this._approach_distance);

            if (path_list != null && path_list.Count > 0)
            {
                path_list = PathFinding.SimplifyPath(path_list, this._actor_size);
                path_list.Add(target_position);
            }
            else
            {
                path_list = new List <Vector3> {
                    start_position, target_position
                }
            };

            var path = new BezierCurvePath(start_position, target_position, this._bezier_curve, path_list);

            return(path);
        }

        void ApproachTarget(float step_size)
        {
            this.transform.position = Vector3.MoveTowards(
                this.transform.position,
                this._target_grasp.transform.position,
                step_size);
            if (this._debugging)
            {
                Debug.DrawLine(this.transform.position, this._target_grasp.transform.position, Color.green);
            }
        }

        void FollowPathToApproach(float step_size, Quaternion rotation, bool rotate = true)
        {
            if (Vector3.Distance(this.transform.position, this._intermediate_target) <= this._precision)
            {
                this._intermediate_target = this._path.Next(step_size);
            }

            if (this._debugging)
            {
                Debug.DrawRay(this._intermediate_target, this.transform.forward, Color.magenta);
            }

            if (rotate)
            {
                this.transform.rotation = Quaternion.RotateTowards(this.transform.rotation, rotation, step_size * 50);
            }
            this.transform.position = Vector3.MoveTowards(
                this.transform.position,
                this._intermediate_target,
                step_size);
        }

        #endregion
    }