private void Update() { // Don't fall through UI Buttons if (EventSystem.current.IsPointerOverGameObject()) { return; } // Left Button if (Input.GetMouseButtonDown(0)) { Ray ray = m_camera.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { // Debug.Log("We hit " + hit.collider.name + " at " + hit.point); Interactable interactable = hit.collider.gameObject.GetComponent <Interactable>(); if (interactable != null && interactable.Item != null) { if (m_itemBeingHeld == null) { if (interactable.IsTakeable()) { m_deferredAction = ActionType.Take; } else if (interactable.IsUseable()) { m_deferredAction = ActionType.Use; } } else { bool isItemsUseableHere = interactable.CanBeUsedWith(m_itemBeingHeld); if (isItemsUseableHere) { m_deferredAction = ActionType.Use; } else { return; } } SetFocus(interactable); } else { m_motor.MoveToPoint(hit.point); RemoveFocus(); } } } // Right Button if (Input.GetMouseButtonDown(1)) { if (m_itemBeingHeld != null) { ReleaseItem(); return; } Ray ray = m_camera.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { // Debug.Log("We hit " + hit.collider.name + " at " + hit.point); Interactable interactable = hit.collider.gameObject.GetComponent <Interactable>(); if (interactable == null) { m_motor.MoveToPoint(hit.point); RemoveFocus(); } else { LookAtItem(interactable.Item); } } } }