If you missed the first part of this Unity3D series you can read it here.
This example demonstrates how to interact with with objects in Unity.
The mouse cursor was removed and replaced with a cursor in the middle of the screen similar to an FPS. When this cursor is over an object that support interactivity, the cursor changes and the GUI will display a message based on the possible interaction. This is achieved by creating an abstract class called ‘Interactive’ with two abstract functions GetInteractionMessage() and Interact(). All interactive objects will inherit this class and support these two functions.
Within the Update() in the GUI class a Physics.Raycast is done using a ray moving outward from the center of the screen. This returns the first GameObject in which this ray collides. Then it tests to see if this object or a parent of this object has a component of type ‘Interactive’. If type ‘Interactive’ is detected it then can retrieve information about the possible interaction or if the left mouse button is down tell this object to perform an action.
In this example clicking on each TV changes its channel (based on multiple materials) and rotates its dial.
As you may have noticed the TV model has received a significant upgrade. A thanks goes out to Calin Reimer for creating this new model.
Hints and Gotchas:
- Use an abstract class as the parent class for all interactive objects, this way you won’t have to rewrite the basic interaction code for each object. This method also make detection a lot easier.
- To create a Ray moving outward from the center of the screen, use the following code: Camera.main.ScreenPointToRay(new Vector3(Screen.width/2,Screen.height/2));
- Use layers to have certain materials ignore light sources (ie. TV Screen), then use a Self-Illumin shader to brighten this material.
- If you can get someone else to model for you, do it. It speeds up development
To check out the demo click here.
To get the source (unitypackage) click here.
Source Requirements: Unity 2.6, but you will still need Unity Pro to use the Render Texture feature.