void GetClosestObject() { if (_grabables.Count == 0) { if (_nearestObject != null) { _nearestObject.GetComponent <Outline>().color = 0; _nearestObject = null; } return; } _nearestObject = _grabables[0]; for (int i = 0; i < _grabables.Count; i++) { float closestDistance = Vector3.Distance(transform.position, _nearestObject.transform.position); float thisDistance = Vector3.Distance(transform.position, _grabables[i].transform.position); if (thisDistance < closestDistance) { _nearestObject.GetComponent <Outline>().color = 0; _nearestObject = _grabables[i]; } } _nearestObject.GetComponent <Outline>().color = 2; }
void Grab() { _isGrabbing = true; if (_grabables.Count == 0) { StartAnimateOpen(1); return; } _grabbedObject = _nearestObject; _nearestObject.GetComponent <Outline>().color = 0; _grabbedObject.Grab(); StartAnimateOpen(0.17f); // eventually base this number on a value in GrabObject }
private void Update() { if (_grabbedObject != null) { if (_grabbedObject.gameObject == null) { _grabbedObject = null; return; } _grabbedObject.transform.position = transform.position; if (!MyGrabObject.Grabbed) { _grabbedObject.Release(Vector3.zero); _grabbedObject = null; _grabbedObject.gameObject.layer = GrabObject.GRABBEDLAYER; _grabbedObject.GetComponent <Collider>().enabled = true; } } }
void OnTriggerStay(Collider col) { GrabObject g = col.GetComponent <GrabObject>(); if (g) { Debug.Log(g.name + " is inside"); if (g.grab && (!GetComponent <FixedJoint>())) { Debug.Log("fixed joint added"); grabbed = true; FixedJoint Joint = gameObject.AddComponent <FixedJoint>(); Joint.connectedBody = g.GetComponent <Rigidbody>(); Joint.breakForce = 1000; } if (!g.grab && GetComponent <FixedJoint>()) { grabbed = false; Debug.Log("fixed joint destroyd"); Destroy(GetComponent <FixedJoint>()); } } }