Non classé

Interaction

On my latest game project, I designed a new interaction system. To make my character able to interact with the environment, I use a system based on mainly three classes.

– InteractionComponent
– AAction (with some ADecorator)
– Int_Touch

unityInteraction

 

InteractionComponent

This script is attached to the character, it manage the interaction and the different suitable action.

This component has a list of targets.

AAction

Derived in Act_Open, Act_Describe, etc… this script define a capability. Each action has one or more Decorator, which are basically condition in the form of a script.

Int_Touch

This script make an object interact-able by a touch. Whenever the character will be in the trigger collisionBox of this object, it will be added in the target list of InteractionComponent.

 

How does it work?

We have on the level a GameObject with an Int_Touch script and a Key script.

Thanks to the Int_Touch, the Key will be added in the player’s InteractionComponent target list.

The player will then press the « use » button, which will trigger the ProximityInteraction function of the InteractionComponent script. This function will go through every action the character is capable of, and try each of them.

In this case, the character as a Act_Pickup action, attached with a decorator Dec_IsClass. For the Try to be a success, the target must have a component of the type specified by the decorator Dec_IsClass, which is here Key. The condition of the decorator being met, the action Act_Pickup is valid and will be launched.

And, voilà, the key is picked up.

 

Demonstration

Link to the github project page.

 

I created a quick project demonstrating this system. I took several script from my main game project and simplified them. The demonstration is meant to be played in editor, and the more important part are the script. For the purpose of explanation I heavily commented the different script, so feel free to have a look.

The project is available on my github at this adress, you can either clone the entire repository or pick the script files.

To make it work, clone the repository with the Assets and ProjectSettings directory. Launch Unity3D and choose to open a project, select the directory where Assets and ProjectSettings are. And you are good to go.

Thanks for playing!

 

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s