Beispiel #1
0
    /// <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);
            }
        }
    }