Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Oculus Quest missing Oni DLL
#1
Hello there,

I've been using ObiRope for a few months now, specifically in VR environments, and found it to be accessible and extremely helpful.

As of recent, we've picked up an Oculus Quest and want to export our application from Rift-S to the Quest.
What happens is, that in the build, all rope simulation is missing. 
Pin-Attached Rigidbodies fall off the ropes, the ropes don't interact with the environment, you name it. Seems to me the ObiSolver is basically deactivated.
(In Editor, everything works fine)

Using logcat the following error appears over and over again upon runtime:


Code:
08-12 12:05:25.585  4333  4348 E Unity   : DllNotFoundException: Oni
08-12 12:05:25.585  4333  4348 E Unity   :   at (wrapper managed-to-native) Oni.InitializeFrame(intptr,UnityEngine.Vector4&,UnityEngine.Vector4&,UnityEngine.Quaternion&)
08-12 12:05:25.585  4333  4348 E Unity   :   at Obi.ObiSolver.UpdateTransformFrame (System.Single dt) [0x00081] in <51a586ccea19400f99b633647cf1efac>:0
08-12 12:05:25.585  4333  4348 E Unity   :   at Obi.ObiSolver.Update () [0x00014] in <51a586ccea19400f99b633647cf1efac>:0
08-12 12:05:25.585  4333  4348 E Unity   :
08-12 12:05:25.585  4333  4348 E Unity   : (Filename: <51a586ccea19400f99b633647cf1efac> Line: 0)


Now I know the Oni Library is responsible for ObiPhysics.
I also know that the Oni.cs file decides which library-name to search for depending on the build platform.

IOS uses __internal. Makes sense
Android and Linux use "Oni".
Everything else uses "liboni".

Searching for the Oni.dll the folder "Assets\Obi\Plugins\Android" is simply empty.
The "\Assets\Obi\Plugins\x86" folder contains the libOni.dll.

Color me intrigued, where is the oni.dll? Is it included in ObiRope?
Can I switch to libOni.dll for the Oculus Quest? What can I do to get my ropes running in the build?

Thank you so much for any help, it is very much appreciated.
Reply
#2
(12-08-2019, 01:54 PM)Powerhorst3000 Wrote: Hello there,

I've been using ObiRope for a few months now, specifically in VR environments, and found it to be accessible and extremely helpful.

As of recent, we've picked up an Oculus Quest and want to export our application from Rift-S to the Quest.
What happens is, that in the build, all rope simulation is missing. 
Pin-Attached Rigidbodies fall off the ropes, the ropes don't interact with the environment, you name it. Seems to me the ObiSolver is basically deactivated.
(In Editor, everything works fine)

Using logcat the following error appears over and over again upon runtime:


Code:
08-12 12:05:25.585  4333  4348 E Unity   : DllNotFoundException: Oni
08-12 12:05:25.585  4333  4348 E Unity   :   at (wrapper managed-to-native) Oni.InitializeFrame(intptr,UnityEngine.Vector4&,UnityEngine.Vector4&,UnityEngine.Quaternion&)
08-12 12:05:25.585  4333  4348 E Unity   :   at Obi.ObiSolver.UpdateTransformFrame (System.Single dt) [0x00081] in <51a586ccea19400f99b633647cf1efac>:0
08-12 12:05:25.585  4333  4348 E Unity   :   at Obi.ObiSolver.Update () [0x00014] in <51a586ccea19400f99b633647cf1efac>:0
08-12 12:05:25.585  4333  4348 E Unity   :
08-12 12:05:25.585  4333  4348 E Unity   : (Filename: <51a586ccea19400f99b633647cf1efac> Line: 0)


Now I know the Oni Library is responsible for ObiPhysics.
I also know that the Oni.cs file decides which library-name to search for depending on the build platform.

IOS uses __internal. Makes sense
Android and Linux use "Oni".
Everything else uses "liboni".

Searching for the Oni.dll the folder "Assets\Obi\Plugins\Android" is simply empty.
The "\Assets\Obi\Plugins\x86" folder contains the libOni.dll.

Color me intrigued, where is the oni.dll? Is it included in ObiRope?
Can I switch to libOni.dll for the Oculus Quest? What can I do to get my ropes running in the build?

Thank you so much for any help, it is very much appreciated.

Hi there,

Android expects the "lib-" prefix when looking for library names, and removes it. Same for the .so/.a extension. So when it looks for "Oni", it is actually looking for "libOni.so" or "libOni.a", which is (or should be) included in Obi/Plugins/Android. From Unity's docs:

https://docs.unity3d.com/Manual/AndroidN...ugins.html

Quote:Note that pluginName should not include the prefix (‘lib’) or the extension (‘.so’) of the filename

What Obi version are you using? We haven't tried building for Oculus Quest (we don't even own one), but chances are it requires the arm64 version of the android lib, which if memory serves well was introduced in Obi 4.0.

kind regards,
Reply
#3
(13-08-2019, 11:31 AM)josemendez Wrote: Hi there,

Android expects the "lib-" prefix when looking for library names, and removes it. Same for the .so/.a extension. So when it looks for "Oni", it is actually looking for "libOni.so" or "libOni.a", which is (or should be) included in Obi/Plugins/Android. From Unity's docs:

https://docs.unity3d.com/Manual/AndroidN...ugins.html


What Obi version are you using? We haven't tried building for Oculus Quest (we don't even own one), but chances are it requires the arm64 version of the android lib, which if memory serves well was introduced in Obi 4.0.

kind regards,

Thank you very much for your reply : )

I would have to check again on the exact version when I get back to work, but we found the problem earlier this morning.

Our version control had an ignore on "*.so", meaning all Android/Linux Libraries were deleted. We relied on desktop HMDs up until now, so the mistake never came into play until now.

But if it is any help: ObiRope works well on the Quest
Reply