Jump to content
  • Advertisement
Sign in to follow this  
ClementVidal

Unity Gameplay Layer: How Game Objects interact with graphisc sub-system

This topic is 2250 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hello,

I'm currently thinking about how to correctly design the GamePlay layer of my engine.
Here are the several class that compose it (only in my head by now !):

[size=2]- GameParameter
[size=2]A kind of Variant data used to store generic data like:
[size=2] -float, int vec2, vec3, bool

[size=2]- GameService
[size=2]A typical component used to control the various capability of a given GameObject like:
[size=2] - Renderable, GUI, Input ( and at the moment,that's all because i can't figured out other component type ... )

[size=2]- GameEvent
[size=2]An even like onMouseClicked() onUpdate() ...

[size=2]- GameObjectPrototype
[size=2]A definition of a game object containing :
[size=2] - a list of GameComponent
[size=2] - a list of GameParameter with default value
[size=2] - an instanciate method
[size=2]It also contain a script file (lua in my case) which is used to implement custom behavior of the object by responding to the various GameEvents, querying the GameServices and manipulating GameParameters

[size=2]- GameObject
[size=2]They are instance of a given GameObectPrototype including all the predefined GameComponent and GameParameter.

[size=2]- GameContext
[size=2]Contain a map of all the GameObjects

I'm pretty happy with this first draft, but i'm pretty sure i'll have to do a lot of adjustment in order to make it really usable.
Beside that, i have some questions concerning two main points:


First GameServices:
Like i said before, i actually cannot figured out any other interseting services.
I have looked at Unity game component which is really (great... and ) "fine grained":
For exemple there is Transformable Component, and a Renderable Component.
In my case i can't split component this way, because my Renderable Component will give the GameObject the ability to acces a whole Render Node including transformation informations.

So what's your opinion concerning the integration of a GameObject component system within a "Node based" render engine


Second GameEvent:
Does the type of GameEvent a given object is receiving depend upon the kind of components attached to this object ?

Once again, any opinion, or discussion are welcome !



Hope this will inspire you !!

Clément Vidal

Share this post


Link to post
Share on other sites
Advertisement
What you're describing as game services looks a lot like a component based model. Though I didn't really understand your "node based rendering" explanation.
you might want to check out http://en.wikipedia.org/wiki/Component-based_software_engineering as well as http://www.purplepwny.com/blog/?p=215.
I'm not a big fan of the component based model, 'cause I just find that it leads to a lot of classes and not much gained in terms of neatness or flexibility. Anyway, each to his own.

As for the second one, you'll probably have a layer that converts low level events to game events.
For example you might convert keyPress(KEY_W) to something like UNIT_MOVE_UP.
So, all the actual event handling is done by this "layer" and the high level game events are broadcasted throughout your system. A common way to do this is to use the Observer pattern, where all listeners register as "Observers" and another pushes events.

http://login2win.blogspot.in/2008/05/c-observer-patterm.html and http://www.codeproject.com/Articles/888/Applying-Observer-Pattern-in-C-Applications should get you started on the observer pattern.

Best of luck!

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!