Predicates.REACH C# (CSharp) Метод

REACH() публичный Метод

public REACH ( object args ) : void
args object
Результат void
    public void REACH(object[] args)
    {
        GameObject agent = GameObject.FindGameObjectWithTag ("Agent");
        if (agent != null) {
            Animator anim = agent.GetComponentInChildren<Animator> ();
            GameObject leftGrasper = anim.GetBoneTransform (HumanBodyBones.LeftHand).transform.gameObject;
            GameObject rightGrasper = anim.GetBoneTransform (HumanBodyBones.RightHand).transform.gameObject;
            GameObject grasper;
            GraspScript graspController = agent.GetComponent<GraspScript> ();
            Transform leftGrasperCoord = graspController.leftGrasperCoord;
            Transform rightGrasperCoord = graspController.rightGrasperCoord;
            Vector3 offset = graspController.graspTrackerOffset;

            if (args [args.Length - 1] is bool) {
                if ((bool)args [args.Length - 1] == true) {
                    foreach (object arg in args) {
                        if (arg is GameObject) {
                            // find bounds corner closest to grasper
                            Bounds bounds = Helper.GetObjectWorldSize((arg as GameObject));

                            // which hand is closer?
                            float leftToGoalDist = (leftGrasper.transform.position-bounds.ClosestPoint(leftGrasper.transform.position)).magnitude;
                            float rightToGoalDist = (rightGrasper.transform.position-bounds.ClosestPoint(rightGrasper.transform.position)).magnitude;

                            if (leftToGoalDist < rightToGoalDist) {
                                grasper = leftGrasper;
                            }
                            else {
                                grasper = rightGrasper;
                            }

                            IKControl ikControl = agent.GetComponent<IKControl> ();
                            if (ikControl != null) {
                                Vector3 target;
                                if (grasper == leftGrasper) {
                                    agent.GetComponent<GraspScript>().grasper = (int)Gestures.HandPose.LeftClaw;
                                    if ((grasper.GetComponent<BoxCollider> ().bounds.size.x > bounds.size.x) &&
                                        (grasper.GetComponent<BoxCollider> ().bounds.size.z > bounds.size.z)) {
                                        target = new Vector3 (bounds.center.x, bounds.center.y, bounds.center.z);
                                    }
                                    else {
                                        target = new Vector3 (bounds.min.x, bounds.center.y, bounds.center.z);
                                    }
                                    ikControl.leftHandObj.transform.position = target+offset;
                                }
                                else {
                                    agent.GetComponent<GraspScript>().grasper = (int)Gestures.HandPose.RightClaw;
                                    if ((grasper.GetComponent<BoxCollider> ().bounds.size.x > bounds.size.x) &&
                                        (grasper.GetComponent<BoxCollider> ().bounds.size.z > bounds.size.z)) {
                                        target = new Vector3 (bounds.center.x, bounds.center.y, bounds.center.z);
                                    }
                                    else {
                                        target = new Vector3 (bounds.max.x, bounds.center.y, bounds.center.z);
                                    }
                                    ikControl.rightHandObj.transform.position = target+offset;
                                }
                            }
                        }
                    }
                }
            }
        }
    }