Doom 3 like interactive GUIs (on world's surfaces) - possible ?

Is it possible to have interactive GUIs on the world surfaces, like Doom 3 had it ?

For example, you’d have a computer screen model in-game, which would have a screen with UI which player can interact with when focusing on the screen of that model (when crosshair is over the screen, it would turn into mouse cursor) and call events that would do stuff in-game (open doors, turn lights on/off, etc.). Vice versa, events in-game would provide feed back to the interactive screen on the model.

If it’s doable, how would I go about it with Unity free (or Pro) ?


Canvas has an option to be rendered in world view.
I suppose you would clock on the buttons normally. But for the record I’ve never done this myself.
And you don’t need Unity Pro for this.

Alternatively you can use a cube (or any gameobject) with an on-click event.

You basically render the UI to a texture and then use that texture on the game object. It requires Pro to do efficiently. You can use pretty much any GUI system, but I believe Scaleform and NGUI both have examples of this kind of effect.

One of my own experiments with Unity 5’s built in uGUI, had me making a World Space Canvas set to the Ratio size that I wanted.

Example: 800x600 or 1024x768 (For larger more detailed screens)

I then Scaled it down a lot by 0.001 in the X,Y,Z Axis. Then making this a Child of and positioning it into a model sized to house such a UI Canvas.

Sadly I moved on and did not test if I could interact with the Canvas by looking at what I wanted to click on.

I should however do some more research on this. Maybe adding a script or something to the camera that Raycast seeking a UI canvas to change the Cross hair into a Cursor and allowing the Fire button to click on a button that it comes into contact with.

As a general Animated Screen however, this worked out great as the Masking and arrangement ability of the uGUI system allowed to to try all sorts of neat effects.

Maybe I’ll go back to my experiment scenes again and further test this out.