/// <summary> /// Handle selecting and picking up items. /// </summary> private void HandlePickingUpItems() { if (m_heldItem != null) { return; } // Look at an item. HeldItem selectedItem = null; GrabFailReason reason = GrabFailReason.Range; RaycastHit hitInfo; if (Physics.Raycast(PlayerCamera.transform.position, PlayerCamera.transform.forward, out hitInfo, PickupItemDistance * Scale, LayerMask.GetMask("HeldItem"))) { HeldItem lookedAtItem = hitInfo.transform.GetComponent <HeldItem>(); if (lookedAtItem == null) { lookedAtItem = hitInfo.transform.GetComponentInParent <HeldItem>(); } if (CanSelectItemBasedOnScale(lookedAtItem, out reason)) { selectedItem = lookedAtItem; lookedAtItem.SetSelectionVisual(true); } else { lookedAtItem.SetSelectionVisual(false); } } // If a valid item is looked at, you can pick it up with a button. if (Input.GetButtonDown("Grab") && !m_grabbedThisFrame) { m_grabbedThisFrame = true; if (selectedItem == null) { GameManager.Instance.GameCanvas.PlayGrabFailAnimation(reason); } else { PickUpItem(selectedItem); } } }