コード例 #1
0
    public override bool ConfirmRune()
    {
        if (hasBeenConfirmed)
        {
            return(false);
        }

        Transform rightHandTransform = player.RightHand.transform;

        int size = Physics.RaycastNonAlloc(rightHandTransform.position, rightHandTransform.forward, hits, 100.0f, layerMask);

        if (size > 0)
        {
            float min   = float.MaxValue;
            int   index = -1;
            for (int i = 0; i < size; i++)
            {
                if (hits[i].distance < min)
                {
                    index = i;
                    min   = hits[i].distance;
                }
            }

            if (index == -1)
            {
                return(false);
            }

            IRuneInteractable interactable = hits[index].collider.GetComponent <IRuneInteractable>();
            if (interactable != null)
            {
                if (PlayerInput.Instance.Confirm)
                {
                    hasBeenConfirmed = true;
                    if (laserIsNull)
                    {
                        laser       = GameObject.Instantiate(laserPrefab, rightHandTransform).GetComponent <Laser>();
                        laserIsNull = false;
                    }
                    else
                    {
                        laser.gameObject.SetActive(true);
                    }
                    Sequence s = DOTween.Sequence();
                    s.Append(DOTween.To(() => laser.GetPosition(1), x => laser.SetPosition(1, x),
                                        laser.transform.InverseTransformPoint(interactable.transform.position), 1));
                    s.OnComplete(() =>
                    {
                        PrepareInteractable(interactable);
                    });
                    return(true);
                }
            }
        }

        return(false);
    }
コード例 #2
0
    private void PrepareInteractable(IRuneInteractable interactable)
    {
        runeInteractable      = interactable;
        interactableRigidbody = interactable.GetComponent <Rigidbody>();

        interactableRigidbody.useGravity  = false;
        interactableRigidbody.constraints = RigidbodyConstraints.FreezeRotation;
        interactableRigidbody.drag        = 0.3f;

        IsRunning = true;
        isInteractableRigidbodyNotNull = true;
    }