cancel
Showing results for 
Search instead for 
Did you mean: 

Artificially triggering a snap interaction via code

filmgrvin
Explorer

I'm trying to instantiate both a SnapInteractable and SnapInteractor from code. After both objects are instantiated, I want to then attach the interactor to the interactable.

Here's a demo video to demonstrate what I'm going for: https://www.dropbox.com/scl/fi/zcpshr4bjw2okacy0ae29/2024-03-13-at-12.49.17.mp4?rlkey=so0s0r316vykvi...

The only way I can get the interaction to occur is by using my hand to grab the interactor, and place it near the interactable.

I've tried setting the position via code (hoping proximity would trigger a snap interaction), but no luck.

I've also tried using the following code but no luck there either.

interactable.AddSelectingInteractor(interactor);
interactor.Select();
 
 
Any ideas?
1 ACCEPTED SOLUTION

Accepted Solutions

Big_Flex
Meta Employee

Hi @filmgrvin, the SnapInteractor has some methods you can use to force select the interactor, like this:

SnapInteractor.SetComputeCandidateOverride(() => SnapInteractable); SnapInteractor.SetComputeShouldSelectOverride(() => true);
 
This will force-set the candidate of the interactor to the correct interactable, and then force it to select (snap).

 

View solution in original post

7 REPLIES 7

filmgrvin
Explorer

Just wanted to add, if the _defaultInteractable field on SnapInteractor was public, this would be a non-issue...

Big_Flex
Meta Employee

Hi @filmgrvin, the SnapInteractor has some methods you can use to force select the interactor, like this:

SnapInteractor.SetComputeCandidateOverride(() => SnapInteractable); SnapInteractor.SetComputeShouldSelectOverride(() => true);
 
This will force-set the candidate of the interactor to the correct interactable, and then force it to select (snap).

 

Oh my goodness thank you so much! That worked, you're a life saver

I'm glad I could help 🙂 If you have any questions about Interaction SDK in the future, please tag me; I write the docs for the team and also engage with users here on the forum! Did you try using any of the official documentation to answer your question? If you did, I'm always looking for gaps in it and ways to make it more usable, so I'd love your feedback.

Hi! I am facing the same problem and can't get your suggested solution to work. I have a extended class CustomSnapInteractor where I call

base.SetComputeCandidateOverride(() => interactable);
base.SetComputeShouldSelectOverride(()=>true);

but I am trying to do this while the snapped object is currently snapped to another snapInteractable as I would like to manually move it away from one to another.

If this is not something that will work another approach I could pursue is attempting to insert some sort of conditional check in the SnapInteractor that only accepts a snap to a SnapInteractable if something.

Thanks for any help you can provide!




Big_Flex
Meta Employee

Hi, I've switched teams and no longer work on Interaction SDK, but you can direct any questions to @ffejnosliw. Thanks 🙂

You are awesome! 😁