Example #1
0
    private void OnDropped(ItemEventArgs eventArgs)
    {
        try
        {
            var cameraTransform = eventArgs.holder.hand.cameraTransform;
            var vec             = holdInfo.location.position - cameraTransform.position;
            var ray             = new Ray(cameraTransform.position, vec);
            Debug.DrawRay(cameraTransform.position, vec, Color.green, 10.0f);

            var resultDistance = vec.magnitude;
            if (Physics.Raycast(
                    ray,
                    out var hit,
                    resultDistance + 0.01f,
                    eventArgs.holder.hand.obstacleMask,
                    QueryTriggerInteraction.Ignore))
            {
                const float itemSizeRadius = 0.2f;
                resultDistance = hit.distance - itemSizeRadius;
                Debug.DrawRay(hit.point, Vector3.up, Color.red, 10.0f);
            }

            var dropPoint = ray.GetPoint(resultDistance);
            Debug.DrawRay(dropPoint, Vector3.up, Color.white, 10.0f);
            rb.transform.position = dropPoint;
        }
        finally
        {
            rb.isKinematic = false;
            holdInfo       = null;
            transform.SetParent(null);
        }
    }
Example #2
0
 private void OnPickedUp(ItemEventArgs eventArgs)
 {
     rb.isKinematic = true;
     holdInfo       = eventArgs.holder.GetComponent <PlayerHoldLocation>();
     transform.SetParent(holdInfo.location);
     transform.localPosition = Vector3.zero;
 }