My UI is organized into panels. Each panel should have its own world space canvas. I need only one EventSystem per scene. How about StandaloneInputModule and GraphicsRaycaster? Do I need them per canvas? Should I create a hierarchy of canvases with one global one? In general: how should I structure my Unity API calls if I want to have windows/panels in world space?
Input modules are only needed once. GraphicsRaycaster is needed per-canvas so that that canvas can work with the EventSystem.
No need for a global canvas. Just make sure to have one parent object over all of them,if you’re gonna use an AnimatorController to blend between canvases. Otherwise you won’t have access to all of them in one Animator.
You could also create one animator controller per canvas with its own set of individual animations. This is probably a better approach if your UI is prone to changes. Having a single animator controller for all canvases, means that you have animation clips that handle multiple objects from multiple canvases,which means that when you change stuff in the hierachy you need to update the animations and so far the workflow hasn’t been too easy for animation modifications. Perhaps in 5.6 or 2017 it will be better but so far its not.
It’s all about trade-offs.
You should check this talk from Unite 2016 out.Near the end he talks about how Canvases are redrawn due to changes and a good practice is to cut UI into multiple canvases to avoid redrawing all UI due to small changes.