New To The Forum? Click Here To Read The How To Guide. -- Developers Click Here.

Custom Float Controller

L4Z3RC47L4Z3RC47 Posts: 15 Oculus Start Member
I'm currently working on a custom controller implementation based on the existing OVRPlayerController. In this setup the player is situated in a floating space. Basically what we need to do is eliminate gravity, and add controller for the secondaryAxis.y to control moving the player straight up and down. By modifying the OVRPlayerController script saved as OVRCustomPlayerController we're really close but are getting some results that are a little perplexing.

Current issues are:
1: The player only moves up and down if the primaryAxis is triggered and thus also moving the player left right forwards or backwards
2: Up and down on the secondary axis seems to be changing the forward/backwards vector rather than propelling the player itself, so if you move backwards by pulling back on the primaryAxis.y while setting the vector to up with the secondaryAxis.y you move backwards and down rather than backwards and up.

Does anyone out there have any input on how we could achieve propelling the player in the y direction independently and reliably?

Code attached below


Comments

  • imperativityimperativity Posts: 3,465 Oculus Staff
    Hi,

    OVRPlayerController is an extremely basic implementation of character movement in VR.

    Are you familiar with our OVRInput script?

    Wherever you are looking in scene with the HMD, especially if you are eliminating gravity, the movement should follow the direction you are gazing at.
    Please tag me @imperativity in your forum post/response if you need immediate assistance or want additional support or context on an issue you are having with our software or integrations.

    Having an issue with our platform, services, or integrations?

    Try using our new bug tool to report this and receive emailed updates as we proceed to address it internally.
  • L4Z3RC47L4Z3RC47 Posts: 15 Oculus Start Member
    @imperativity

    Hi, thanks for the input. Did you look at the code I referenced? Not sure what you mean by pointing me to OVRInput. This is the class that is used for getting controller input yes but that wasn't really what I was asking about. If you take the attached custom player controller in the link of my OP and apply it as a player controller you'll see what I'm trying to get at. Other than the up/down weirdness the way the controls are setup are very intentional.
  • imperativityimperativity Posts: 3,465 Oculus Staff
    @L4Z3RC47

    No, I did not check out your attached code yet. I've seen this question a few times in the past and in general many developers are not aware of our OVRInput script and how to define and customize it for their scenes, so this is usually where I start in addressing movement queries on the forum. 

    I'll do a deeper dive on this and see what I can suggest sometime this week.
    Please tag me @imperativity in your forum post/response if you need immediate assistance or want additional support or context on an issue you are having with our software or integrations.

    Having an issue with our platform, services, or integrations?

    Try using our new bug tool to report this and receive emailed updates as we proceed to address it internally.
  • L4Z3RC47L4Z3RC47 Posts: 15 Oculus Start Member
    @imperativity

    If you have the time that would be great, thanks!

    As a quick primer basically what we've got going on is adding a Y component to section handling the movement updates and polling
    OVRInput.Get(OVRInput.Axis2D.SecondaryThumbstick.y)

    I suspect there is something to what I'm doing here that could explain whats going on : 
    1. if (secondaryAxis.y < 0.0f)
    2.                 MoveThrottle += ort * (Mathf.Abs(primaryAxis.y) * transform.lossyScale.y * moveInfluence *
    3.                                        BackAndSideDampen * Vector3.down);
    4.  
    5.             if (secondaryAxis.y > 0.0f)
    6.                 MoveThrottle += ort * (primaryAxis.y * transform.lossyScale.y * moveInfluence * BackAndSideDampen *
    7.                                        Vector3.up);


  • imperativityimperativity Posts: 3,465 Oculus Staff
    @L4Z3RC47

    I'll have some time next week to ask around about this use case. If I can't give exact guidance I will at least point you towards some relevant material that addresses this.
    Please tag me @imperativity in your forum post/response if you need immediate assistance or want additional support or context on an issue you are having with our software or integrations.

    Having an issue with our platform, services, or integrations?

    Try using our new bug tool to report this and receive emailed updates as we proceed to address it internally.
  • L4Z3RC47L4Z3RC47 Posts: 15 Oculus Start Member
    @imperativity
    Thanks. I'll be digging into it as well this week so I'll post an update if I figure it out
  • kojackkojack Posts: 4,570 Volunteer Moderator
    L4Z3RC47 said:

    1: The player only moves up and down if the primaryAxis is triggered and thus also moving the player left right forwards or backwards

    In the code snippet you posted, the amount of up/down movement is being scaled by the primaryAxis.y (forward/back) value. I'm guessing this should be the secondaryAxis.y instead.

    L4Z3RC47 said:

    2: Up and down on the secondary axis seems to be changing the forward/backwards vector rather than propelling the player itself, so if you move backwards by pulling back on the primaryAxis.y while setting the vector to up with the secondaryAxis.y you move backwards and down rather than backwards and up.

    Also in the snippet, the top check (for down) uses MathF.Abs to force the primaryAxis.y to be positive. But the check for up is missing the Abs call, so if you are moving backwards then primaryAxis.y is negative, that is being multiplied by the up vector to make it a down vector.

    Try this:
    1. if (secondaryAxis.y < 0.0f)
    2.                 MoveThrottle += ort * (Mathf.Abs(secondaryAxis.y) * transform.lossyScale.y * moveInfluence *
    3.                                        BackAndSideDampen * Vector3.down);
    4.  
    5.             if (secondaryAxis.y > 0.0f)
    6.                 MoveThrottle += ort * (Mathf.Abs(secondaryAxis.y) * transform.lossyScale.y * moveInfluence * BackAndSideDampen *
    7.                                        Vector3.up);

    What I would probably do is cut that down to just one check like:
    MoveThrottle += ort * secondaryAxis.y * transform.lossyScale.y * moveInfluence * BackAndSideDampen * Vector3.up;
    If secondaryAxis.y is negative, then it reverses the up vector naturally.




  • L4Z3RC47L4Z3RC47 Posts: 15 Oculus Start Member
    Thank you! I had a feeling like there was something small I was missing there :s
Sign In or Register to comment.