private void LookForInteractive() { // Raycast ahead of camera [actionDistance] units to find interactive objects RaycastHit actionHit; Physics.Raycast( new Vector3( Camera.main.transform.position.x, Camera.main.transform.position.y, Camera.main.transform.position.z ), Camera.main.transform.forward, out actionHit, actionDistance, actionMask ); // Debug draw look vector if (displayActionRaycast) { Debug.DrawRay( new Vector3( Camera.main.transform.position.x, Camera.main.transform.position.y, Camera.main.transform.position.z ), Camera.main.transform.forward * actionDistance, Color.green ); } // If an interactive object is found: make UI visible, grab object's interactive script, set UI text if (actionHit.collider != null) { if (visibleObject == null) { visibleObject = actionHit.collider.gameObject.GetComponent <IInteractive>(); } if (!string.IsNullOrEmpty(visibleObject.Info())) { isViewingAction = true; actionText.text = visibleObject.Info(); } else { isViewingAction = false; } } // Else make UI invisible and set object's interactive script to null else { isViewingAction = false; visibleObject = null; } }