示例#1
0
        /// <summary>
        /// Attempts to snap a given <see cref="GameObject"/> to the snap zone.
        /// </summary>
        /// <param name="objectToSnap">The object to attempt to snap.</param>
        public virtual void Snap(GameObject objectToSnap)
        {
            if (!AllValidRules.Accepts(objectToSnap))
            {
                return;
            }

            InteractableFacade snappableInteractable = objectToSnap.TryGetComponent <InteractableFacade>(true, true);

            if (snappableInteractable == null || SnappedInteractable != null)
            {
                return;
            }

            foreach (GameObject collidingWith in snappableInteractable.Configuration.ActiveCollisions.SubscribableElements)
            {
                SnapZoneActivator activatingZone = collidingWith.GetComponent <SnapZoneActivator>();

                if (activatingZone == null)
                {
                    continue;
                }

                activatingZone.Facade.Unsnap();
                break;
            }

            if (objectToSnap.transform.position.ApproxEquals(DestinationLocation.transform.position))
            {
                objectToSnap.transform.position += Vector3.forward * InitialOffset;
            }

            SnapDroppedInteractableProcess.Receive(objectToSnap);
        }
        /// <summary>
        /// Attempts to snap a given <see cref="GameObject"/> to the snap zone.
        /// </summary>
        /// <param name="objectToSnap">The object to attempt to snap.</param>
        public virtual void Snap(GameObject objectToSnap)
        {
            if (SnappedInteractable != null)
            {
                return;
            }

            SnapDroppedInteractableProcess.Receive(objectToSnap);
        }