OnChange mode doesn't work using initially hidden hierarchies and prefabs.
In the sample project I sent, you may want to change LoadFiles() to sometimes return an empty list so you can also test how the control changes. Something like the following is simple, but not very predictive:
var oFiles = (UnityEngine.Random.Range(0.0f, 1.0f) < 0.5f) ? new List<string>() : new List<string>()
{
"File_1",
"File_2",
"File_3",
"File_4",
"File_5",
"File_6",
"File_7",
};
You will see that as the new "error" row is added, the "Process" button moves up, but is not resized (nor are the other rows.
- Edited
Anthony,
I downloaded 1.0.4 and used it unmodified on the sample project. Here is a video that shows that when the "Process" button is pressed the newly visible objects are not properly contained within their parent containers.
I'm not sure how to make the sample project any simpler and still reproduce the issue. You should just be able to run it and press the "process" button to see this particular improper behavior.
The sample project is built to demonstrate using common Responsive UI prefabs in different UI layouts, which means the runtime view is different than the inspector view.
Here is the updated sample project as a package, with Exoa and TMP removed:
It will now toggle the behavior of "Process" between:
- Showing progress bar of files being processed.
- Showing an error that no files were found.
NOTE: The following functions still return NaNs when the division counts are 1, making a divide by 0 (Infinity) NaN. Also, if the counts are 0 or percentages are just over 100%, they make a Negative number which would also be bad. I believe these functions should only return >= 0 . This also applies to the "out" variables.
- CalculateSpaceBetweenItemsY
- CalculateSpaceBetweenItemsX
- CalculateFlexibleItemSpaceX
- CalculateFlexibleItemSpaceY
EDIT: I have some changes I made if you are interested in seeing them, just let me know where I should send them.
EDIT 2: I expect one problem may be that when the "Process" button is pressed and the active state of "Directory" and "Process" game object is changed, then parent of "Process" and "Directory" does not detect a change since there is still only 1 child active, but it is a different child than what was active previously. Possibly creating a hash of the active children using their UUID's may let this be detected.
I also notice that with the 1.0.4 update, the refresh type gets changed to "Manual", so no updates take place.
I'm not trying to offend you, just trying to offer some constructive criticism. You market this as a "Professional" tool, and as such, it needs the effort associated with a professional tool. This means you need to do full testing of changes, including edge cases and various scenarios, as well as regression testing so that you do not break existing projects when you post an update.
You have been very responsive to issues, which is VERY MUCH appreciated. You just need to spend more time verifying that changes work as expected and don't break other features or behavior of existing code.
dtappe Hi! Thanks for the feedback and new demo.
I tested my changes against my demo scenes and didn't notice issues. Now bugs and edge cases will always happen so that's why I opened this support forum and try to fix bugs as quick as possible.
Switching the refresh mode to manual on sub containers is a new feature to cascade the Resize() from parent to sub containers as you suggested.
I will look into your demo asap.
thanks!
ok so it turns out that this was causing the issue:
ResponsiveContainer parentRC = transform.parent.GetComponent<ResponsiveContainer>(); if (parentRC != null) { refreshType = RefreshType.Manual; }
Anthony,
I figured that was an issue. Seemed like changing to "Manual" mode behavior should be more of a run time thing and not changing actual configuration. For me, "Manual" should mean that the user is responsible for calling Resize, not some other mode.
Also FYI, on the above video, the button text is also not showing for the blue button. I believe this is also a responsive UI issue.
Sorry for the late response, I somehow missed your post notification.
Anthony I'm not seeing NaN's anymore since I:
- Fixed divide by 0 and negative value issues with CalculateSpaceBetweenItemsY, CalculateSpaceBetweenItemsX, CalculateFlexibleItemSpaceX, and CalculateFlexibleItemSpaceY.
- Stopped mixing Responsive components with Layout groups and Rect Transform STRETCH.
- Reverted all overrides on Canvas prefab instances.
I have stopped using OnChange for now, but I can send you what I have changed based off v1.0.3, if you tell me where to send it.
Anthony OK. Just let me know if you want to see my changes. There was more than just the /0. I also added a simple hash return to GetChildrenFirstDepth, so that if one child was hidden and another made visible, thus the same childe count, but different children, could be detected to do a forced resize.