Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: nested snap zone is not grabbable by default #57

Conversation

Gusinuhe
Copy link
Contributor

@Gusinuhe Gusinuhe commented Sep 8, 2020

Description

If a Snap Zone started a scene nested in an interactable object, the colliders of the snap zone were grabbable as an extension of the interactable object. This PR fixes this behavior.

Note: It is still possible to manually set the snap zones colliders as part of the interactable object.

Type of change

  • New feature (non-breaking change which adds functionality)

How Has This Been Tested?

Place a snap zone inside an interactable object, then run the scene an try to grab the interactable object by the snap zone, it should not be possible anymore.

Runtime/Interaction/SnapZone.cs Outdated Show resolved Hide resolved
Copy link
Contributor

@Maxsiom Maxsiom left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Works for me 👍

@@ -218,6 +223,12 @@ private void OnDrawGizmos()

protected virtual void Update()
{
if (initialParent != null)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any particular reason to have it here and not in Start() or Update()?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes.

The interactables register all their child colliders as part of it in the interaction manager at their Awake.

The idea is to deattach the snap zone from the interactable object and reattach it at the next first frame.

Unfortunately, the Awake and OnEnable from all interactors are called before than the Awake and OnEnable from all interactables so Awake and OnEnable are not an optional.

Additionally, Sockets already have a private Start, so calling a start will override their own and since it is private, there is no way to call as base.

The workaround I found is to call only once in the first frame in the Update, I don't entirely like it but, we can change it if the XR interaction framework becomes less private in the future.

@Gusinuhe Gusinuhe merged commit a06dc86 into develop Sep 10, 2020
@Gusinuhe Gusinuhe deleted the feature/nested-snap-zone-is-not-grabbable-by-default-TRNG-1034 branch September 10, 2020 09:56
@ci-innoactive
Copy link
Collaborator

🎉 This PR is included in version 1.4.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants