private void Update() { switch (_isGrabbing) { case false: RaycastHit hit; if (realHand.IsPointing() && Physics.Raycast(transform.position, transform.forward , out hit, ray.GetPosition(1).z, LayerMask.GetMask("Item"))) { _grabbed = hit.transform.GetComponent <LockRayItem>(); _grabbed.Rayed(); _grabbed.transform.SetParent(transform); _isGrabbing = true; } break; case true: if (!realHand.IsPointing()) { _grabbed.transform.SetParent(null); _isGrabbing = false; } break; }//switch _isGrabbing }
internal LockRayItem FindNearest() { LockRayItem nearest = null; float minDistance = Mathf.Infinity; foreach (LockRayItem item in _lockRayItems) { float distance = Vector3.Distance(item.transform.position, transform.position); if (distance < minDistance) { nearest = item; minDistance = distance; } } return(nearest); }
private void FixedUpdate()//moving hand { switch (_mode) { case RAYCASTING: RaycastHit[] rayeds = Physics.RaycastAll(transform.position, transform.forward , ray.GetPosition(1).z, LayerMask.GetMask("Item")); if (rayeds.Length <= 0) { break; } foreach (RaycastHit rayed in rayeds) { rayed.transform.GetComponent<LockRayItem>().Rayed(); } break; case SELECTING: orb.SetPosition(realHand.transform.localPosition.z, ray.GetPosition(1).z); _selected = orb.FindNearest(); _selected.Selected(); break; } }