Search Issue Tracker

Not Reproducible

Votes

3

Found in

5.4.0f3

Issue ID

824186

Regression

Yes

[Gear VR] Application freezes when image with radial 360 method is filled

Android

-

Reproduction steps:
1. Open the attached reproduction project
2. Build and run the project on Android device that supports Gear VR (Samsung Galaxy S6)
3. Move head/phone to point at the UI element "STARE HERE!" (on the right side)
4. If application doesn't freeze move away from "STARE HERE!" and repeat step 3
5. In about 10 tries the application will freeze

Regression introduced in 5.4

Comments (3)

  1. SaraYamit

    Nov 21, 2016 03:50

    I am having the same problem using Radial fill. Application runs fine on the editor but crashes in the mobile build.

  2. ndelmas

    Oct 24, 2016 06:00

    Well scratch that. I was tired and mixing up the input held vs input down events. The coroutine starts once.

    Ended up solving this simply by increasing the size of the canvas that contains the radial selection. I'm still not sure why this works exactly. Fix found here:

    https://issuetracker.unity3d.com/issues/ui-android-slash-ios-changing-image-fillamount-causes-freeze-on-small-world-space-canvas-on-mobile

  3. ndelmas

    Oct 23, 2016 09:19

    Can't see the reproduction project. But I encountered exactly this bug with the SelectionRadial script from the free Unity VR Samples pack. In case anyone else is looking for a solution to this here is some info.

    There is a bug in the script, as long as the mouse input (or touch pad or what have you) is held down it keeps spawning infinite coroutines until the radial is filled or disabled. For some reason this worked in 5.3 but it causes performances issues in 5.4 which really should be expected.

    A fix: I used an extra private bool m_StartFill initialized to true.

    private IEnumerator FillSelectionRadial(){
    m_StartFill = false;
    ...
    }

    private void HandleDown(){
    if (m_SelectionRadialActive && m_StartFill){ //this prevents more coroutines from spawning
    ...
    }
    }

    private void HandleUp(){
    m_StartFIll = true;
    ...
    }

    And for good measure you probably want to stop the fill coroutine when the radial is hidden.

    public void Hide(){
    if(m_SelectionFillRoutine != null){
    StopCoroutine(m_SelectionFillRoutine);
    ...
    }

Add comment

Log in to post comment

All about bugs

View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.