Neos-Metaverse / NeosPublic

A public issue/wiki only repository for the NeosVR project
196 stars 9 forks source link

ApplyCharacterForce/Impulse and SetCharacterVelocity don't work if the impulse is not owned by the SimulatingUser of the input CharacterController #3197

Closed Zyzyl closed 2 years ago

Zyzyl commented 2 years ago

Describe the bug?

Triggering any of the ApplyCharacterForce, ApplyCharacterImpulse, and SetCharacterVelocity LogiX nodes with an impulse owned by a user other than the one referenced as the SimulatingUser in the input CharacterController produces no change.

Relevant issues

Potentially this one based on how this is current worked around https://github.com/Neos-Metaverse/NeosPublic/issues/338

To Reproduce

Requires 2 users:

You will find that the nodes produce noticeable changes if the SimulatingUser in the input CharacterController is the local user when an impulse triggers any of the nodes, otherwise no changes.

Expected behavior

Intuitively I'd expect all of these nodes to produce similar effects whoever the triggering impulse was owned by given the same input CharacterController.

Log Files

No response

Screenshots

No response

How often does it happen?

Always

Does the bug persist after restarting Neos?

Yes

Neos Version Number

2021.10.11.1175

What Platforms does this occur on?

Windows

Link to Reproduction Item/World

neosrec:///U-Zyzyl/R-d0039fc1-6682-49ee-af8d-8a8e91bf91bc

Did this work before?

No

If it worked before, on which build?

No response

Additional context

This is currently worked around by 'switching' the impulse ownership to the relevant user. Right now this is usually done using a BooleanLatch / FireOnTrue setup which could be improved if https://github.com/Neos-Metaverse/NeosPublic/issues/338 were implemented.

EDIT: I appreciate this may not be easily changeable and technically working-as-intended. However, without some significant background knowledge of the engine, it's pretty hard to predict that the nodes will behave like this.

Reporters

Zyzyl#1441 TheBasementNerd#3465 & many others over time

H3BO3 commented 2 years ago

This is predictable in terms of neos' design and won't be fixable outright. It's been brought up a few times in the discord with similar responses - Here is one with Froox stating that it is expected behavior. https://discord.com/channels/402159838827905024/439422161657135106/614787021436878862

Every user locally simulates their own charactercontroller, and then their transform is replicated to other players. Other players have no effect over this simulation, because it's local to the simulatinguser. The methods for applying forces and other physical actions to the existing simulation operate entirely locally. Since both impulses are local and the physical simulation of the local user's charactercontroller are local, users cannot exert forces on another user's simulation.

Frooxius commented 2 years ago

Yes, this is expected behavior. The simulation exists only on the user doing the simulation, meaning that you don't have enough information on your end to alter it - you need to make sure that the change happens on the simulating user.

Once the rigidbody simulation is implemented, this is something that could change as it'll have mechanisms for more distributed simulation, but until then this works as normal.

https://github.com/Neos-Metaverse/NeosPublic/issues/22

Zyzyl commented 2 years ago

Thanks for the explanation. I've linked to it on the relevant LogiX node wiki pages.