void CheckHighlights() { foreach (Outline outline in _activeOutlines) { outline.enabled = false; } _activeOutlines.Clear(); int layerMask = -5; //All layers RaycastHit[] raycastHits = Physics.SphereCastAll(_camera.transform.position, HighlightRadius, _camera.transform.forward, _maxDistance, layerMask, QueryTriggerInteraction.Ignore); foreach (RaycastHit raycastHit in raycastHits) { Outline[] outlines = raycastHit.collider.gameObject.GetComponentsInChildren <Outline>(); if (outlines.Length > 0) { // Debug.Log("Pointing at: " + raycastHit.transform.gameObject); InteractiveObject interactiveObject = raycastHit.transform.GetComponent <InteractiveObject>(); if (interactiveObject != null && interactiveObject.enabled) { int interactionCount = Mathf.Min(MaxInteractions, interactiveObject.interactions.Length); bool highlightable = false; for (int i = 0; i < interactionCount; i++) { InteractiveObject.Interaction interaction = interactiveObject.interactions[i]; if (interaction.enabled && Vector3.Distance(transform.position, interactiveObject.transform.position) <= interaction.maxRange) { highlightable = true; break; } } if (highlightable) { foreach (Outline outline in outlines) { outline.enabled = true; _activeOutlines.Push(outline); } } } } } }
private void CheckInteraction() { string actionDescription = ""; int layerMask = -5; //All layers RaycastHit raycastHit; bool hitDetected = Physics.SphereCast(_camera.transform.position, InteractionRadius, _camera.transform.forward, out raycastHit, _maxDistance, layerMask, QueryTriggerInteraction.Ignore); if (hitDetected) { if (raycastHit.distance > 0) { InteractiveObject interactiveObject = raycastHit.transform.GetComponent <InteractiveObject>(); if (interactiveObject != null && interactiveObject.enabled) { int interactionCount = Mathf.Min(MaxInteractions, interactiveObject.interactions.Length); for (int i = 0; i < interactionCount; i++) { InteractiveObject.Interaction interaction = interactiveObject.interactions[i]; if (interaction.enabled && (interaction.requiresSpecialActionController == SpecialActionController.None || interaction.requiresSpecialActionController == SpecialActionControllerTag) && Vector3.Distance(transform.position, interactiveObject.transform.position) <= interaction.maxRange) { actionDescription += (interaction.showPrefix ? InteractionDescriptionPrefixes[i] : "") + interaction.description + "\n"; if (_interactionInputs[i]) { interaction.onInteractionEvent.Invoke(this); } } } } } } UpdateInteractionDescriptionText(actionDescription); }