예제 #1
0
    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);
                        }
                    }
                }
            }
        }
    }
예제 #2
0
    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);
    }