Extending the editor for collaboration...

Hi,

I’ve recently seen some engines using collaborative editing of scenes, objects, etc. I thought it’d be pretty cool to extend the Unity editor to do the same.

Essentially, one would just keep a socket to an ‘editor proxy server’ (one might call it) open, and send a packet on every change, and do a regular receive. Can this be done in Unity as it is? One would need to be able to call into the editor itself, to place objects, edit terrain, etc programmatically, in order to replicate changes from other editors.

Any feedback is greatly appreciated - thanks in advance!

Yeah, I think it should be possible. It would be a massive undertaking, sure, but it could really be a refreshing change for the design workflow.

I’m taking this approach with my audio engine project; where a game designer can work on gameplay on one machine, while a sound designer or composer is on another machine tweaking the audio. Both working on the same instance of a scene via network, of course.

Doing this in a generalised manner for all facets of development seems hugely exiting to me.

You’d could have something akin to a NetworkView associated with all objects in a scene in editor, and also one for each asset in the project folder. The former could work much like the in-game NetworkViews do (although they’d probably have to be a bit more flexible). The latter would have to monitor a file for changes, and be able to serialize it efficiently. Kind of like a real-time/continuous sequence of SVN check-ins/check-outs, with optimized NetworkView subclasses for each supported asset type.

Thinking about it, I guess you would encounter all of the problems you’d find when designing the network architecture for a very scalable multiplayer game, meaning a lot of the same rules (and solutions!) apply. Maybe not so much things like dead reckoning, but pretty much all other things that come with a distributed object system that has limited bandwidth.

[/braindump]

Indeed!

One problem with watching file changes is that every single terrain change should appear rapidly on the other end - or it might become too confusing for the user(s).

Essentially, one would need some kind of hooks on the editor, of sorts…

That’s true, my mind had not crossed terrains yet.

QUELSOLAAR:COM : Verse - Realtime networking protocol for 3D graphic – This might be worth a look; if not for usage, then for inspiration (and general coolness). Eskil Steenberg has developed a lot of fine tools for the development of his game, Love, including a real-time network synchronization layer that can be plugged into other content creation applications.

The nice thing about using Verse for part of the sync process would be that you would immediately have the possibility to tightly sync with all kinds of other external applications. Not just by file, but truly real-time. [/wild_speculation]

But yeah, the first thing that needs researching is getting some solid hooks into the editor. If you can’t reach or manipulate the data, it’s not going to work.

I just had this same idea today, and on the premise that all good ideas have already been thought of, found this thread with Google.

I’m in! Anyone for a collaborative effort? Perhaps sourceforge?

You can get hooks to the data in the editor. I’ve worked on some import/export scripts already. Not too fancy, but haven’t found anything (so far) I couldn’t get at. I don’t see it as too different, as long as a network connection could be maintained ‘at edit time’ (I KNOW this can be done at run-time)

Some quick thoughts:
Even if all updates are not immediately real-time, there is still huge value in multiple people working on multiple assets.

There will be issues of people ‘stepping on each others toes’ which can be addressed in early stages by division of labor. No two people edit the same mesh at the same time, instead, one does mesh while another does textures, and so on.

Undo would be cool, and Undo per-user or globally too.

Would want save ‘current state’ occasionally.

I’m a big fan of Verse, Eskil’s a genius. Would be great to use that protocol, because then it would inherit any/all? tools that already support Verse. I don’t know if it is possible or necessary, just sayin’.