Improbable Icon


Consolidated Feedback - What I think of Spatial after tutorials



Hello Spatials or rather Improbables,

As I have just finished dealing with the two tutorials available, I thought I’d share my feedback of the whole thing so far, perhaps that might help you guys and you won’t see it as a rant. I am just speaking my mind about the whole experience so far.

Before I start with any feedback I always like to mention a little disclaimer so here it goes:
I completely understand that SpatialOS was in Alpha and today entered Beta. I know exactly what is the meaning of both terms (I am a developer after all). However, the below feedback doesn’t assume such and is written in a general way. I understand that it is only natural that things aren’t thought out well, not working at times or plain weird. It isn’t finished at all. However, I find pure feedback in general is much more helpful as it doesn’t leave out stuff under the impression “oh, they probably know about it and will fix it/change it later”. Maybe, just maybe, it slipped off your minds and what I say – on the 1% off chance – could help out.

With that said, here is the feedback in no particular order:

  • I love SpatialOS – I am not a network engineer nor am I network programmer. Networking is confusing and the fact that I don’t have to even deal with networking is just amazing. It is pure wow for me. I can make a multiplayer game without writing a single networking code :D. Well unless you count Command as one. But you get the gist. Thank you very much for such a project. I just love it. Albeit, this leads to the below point:

  • It is complex and not at all quite as obvious as I thought. There are too many things that need to be done and done over multiple facets of the development environment that it is literally too easy to mess up. I have to edit a schema file, make sure I have this template thing added, then implement functionality. For some more advanced programmer I am sure they are rolling their eyes and saying “What did you expect?”. However, I would love to have everything in one place. If I am developing in Unity then I’d like to stay in Unity. Why can’t I do everything from within Unity? In 10.0.0 we can build from Unity (a bit broken but the idea is there) why then do you have to ask me to leave Unity to start the server or upload the build for deployment? Why can’t I just do that from there. The SpatialOS inspector inside Unity is too much to ask (albeit it is a link that I would open so Unity arguably shouldn’t have too much trouble doing it) so that is fine. But the rest… I find the process a bit messy.

  • One of the annoying things is the authentication that happens in the browser and fails the first time when I try to upload a deployment. For some reason when I try to upload a deployment my entire internet connection is used up by the upload and I can’t use anything on the internet. So when the authentication page loads, it fails. The upload then fails. I have to reupload again (after reaching halfway I assume from all the upload loading I see) to work. I use a quota based internet so that makes things quite complicated fast. Which leads to the below point

  • Codegen, cleaning, building, starting server, etc… all time consuming process with loading screens. While loading screens aren’t bad (yeah, I am kidding myself, they are bad), it could have been done better. Why not include a progress bar in there? You already have it with fast processes at certain point in the building/cleaning and codegen, why not the rest? Same when the building process requires a download or upload.

  • Why do players have to redownload the client when the build didn’t change? Say I uploaded a deployment, launched the client from the launcher, it downloads the client. Sure the first time is OK. But if I close the client and load the launcher again (from the Inspector) it redownloads the client. Looking at it from players’ perspective that isn’t very efficient. Specially when I didn’t change the build at all. I just mistakenly closed the client. I later found out it was downloaded in AppData, but why not have the launcher launch the current version in AppData as long as it is similar to the online one? Not to mention that users won’t be happy heading off to AppData to launch a game.

  • The tutorial sometimes likes to not mention some “using” statements while I use VS so thankfully it was smart enough to know them. Had I been using something else I don’t think I would have known. Thus creates a loop of frustration ending up with people having to post on the forums about it (perhaps it didn’t happen so far but I am guessing I would have done it if I didn’t use VS).

  • The first tutorial I went through is the Hello World since that is what you guys showcase as going through first. That tutorial is beyond confusing. The only thing I picked up off that tutorial is that there are things called workers and something called Inspector. What is a worker I couldn’t tell you. Alstair was trying to help me with my first problem and mentioned something casually that I should have known but I didn’t. It doesn’t explain anything. I would suggest that this tutorial changes to a “Make a game from scratch” tutorial and Pirates tutorial becomes the “Hello World” tutorial. I’ll address this a bit later below again.

  • The balance between details and skimming in the tutorials are sometimes off. For example sometimes you put screenshots and explain things that don’t need so much explaining and other parts you skim over it. An example of this is the activating and deactivating of objects in Unity. That doesn’t really need a screenshot and a few lines about it. Anyone using Unity and trying SpatialOS already knows + Unity has tutorials for that. However something like the different keywords in schema deserves a few pages (and I don’t mean documentation, I mean in context of the tutorial).

  • With my limited knowledge I am going to guess Schema is a language you guys made. I am not sure of its rules and what it is. I tried a quick search on Google but it lead me nowhere. If this is the case, why is the language like that? Why do I have to write the variable with an “_” underscore and then go in C# and use it without it? Why not adapt something more akin to C# and its ilk? Yes, you have brackets and all… but it feels weird. I can almost read a line of C# code as if it is English, in Schema I can’t. It just looks weird sometimes and other times it is OK.

  • Prior to 10.0.0 when I launch the inspector if I click on an entity on the map, it doesn’t get selected. I had to actively select the square tool (next to move tool) and draw a square around my entity to select it. Then the tool gets deselected and I had to do that again. I tried closing the browser, the tab, nothing fixed it. Once I updated to 10.0.0 that problem went away.

  • In the tutorial you give the entire paths of the file you want me to edit. It is as if I am navigating from the folders in my system and not inside Unity. So you quote the path something like Worker/Unity/Assets/etc… this confused me quite so at first since I thought you were talking about the project view’s folders and not from the system. I kept looking for a worker folder inside of Unity until it clicked. If I have Unity open, I don’t need to know all that. You can refer to the folders in a fashion similar to the Pirates tutorial. You just sometimes mention the “Assets” folder and sometimes you ignore it and just tell me the correct folder.

  • What is the difference between the [WorkerType] statement and [Require] statement? The way I understand it, either of them tells SpatialOS that this is either a script controlled by an FSim or the client. Then why do we have to include both?

  • This isn’t quite feedback but I am guessing SpatialOS works well with 2D and shouldn’t pose a problem? Have you thought about making a tutorial that deals with a 2D game?

  • Spatial Upgrade guide says that you should run “spatial clean” before changing the engineType statements. Unfortunately if you do so it errors out and won’t run.

  • The upgrade guide is quite confusing. Why can’t there be an updater? Just like the Unity updater? If that is an Alpha thing, I can understand otherwise, it is quite messy and easy to get wrong.

  • The idea of setting an ID in schema. I see we increment the ID by 1 each time so that we give each script its unique ID. That is cool, but do I really have to track each ID I gave and give it manually? Can’t it be automated. How do I remember which ID I gave last in a project with hundreds of IDs? This leads to the next point

  • In the tutorial What does this mean “int32 current_health = 1 sets the ID for the current_health property”? How do we set the ID (1004) to 1? And why in this version 1 and last version it was 0? Or do I remember this wrong?

  • This one might get some rolling eyes from advanced programmers and CS guys but this part ShipControlsWriter.Send(new ShipControls.Update().AddFireLeft(new FireLeft())); looks complicated and convoluted. Is that because of the code generation or is that a C# thing. I am guessing it is the code generation. If that is the case, why can’t it be cleaned up a bit?

  • In lesson 7 of the pirates tutorial the wording of this “Your sending of the command could look like this”. I’d say something like “Sending a command would look like this” would read better.

  • In lesson 7 there is a typo “to either a successful or erroneous command requenst” – I think you meant “request”.

  • The level of support on this forum is astounding. I can’t say when was the last time (if ever) I posted on a forum and found a reply right back. Yes, some will say because we aren’t many and the alpha users’ number is small. Nonetheless, it actually feels like I am not in the water alone. I had 3 people contribute to my thread. I got a PM to help me out. I am talking to actual people from the company, not other users only. I felt I am “safe” in relative to getting in to trouble and that the problem will be resolved. Kudos to you guys. I hope it continues like this when this thing goes viral :slight_smile:

All in all SpatialOS looks amazing and I really love what you guys have done so far. In fact I think this is quite revolutionary (at least to me). I can make a multiplayer game without having to deal with networking. Unfortunately the networking is masked by another layer of complexity because of the low user friendly system in general. I have to keep like 6-7 windows open just to do the tutorial and that isn’t counting the browser. Whereas I believe this whole thing could be done from within Unity or some other application (such as the launcher for example) that is used with Unity. Some parts are really easy to understand and implement and other parts I feel are complete enigma.

That probably might be because of alpha and beta - that is OK. However at the current state of the system, the documentation is seriously lacking. I mean I understand how things work but if you ask me can you make a game from scratch I’ll scream “NO!”. Yeah I know how it could be implemented theory wise but I can’t code it. I don’t even know where to start. Perhaps this is me the noob talking since I tend to learn by doing, I have to be hand held through a step by step example from start to finish then left alone. People criticize Unity’s documentation and tutorials a lot and in many ways they are right. However, one thing I’d say is great about Unity is that I went from not touching coding in C# since 2011 to making a game in a week. They had a few tutorials that allowed you to make a full game from start to finish. I did one after the other and so on until I looked back to see 3 games done. I attempted my own, struggled a bit and was able to do it. With SpatialOS, I can’t. I can only implement simple functionality that demand simple processing.

I really hope SpatialOS gets more tutorials and more in depth tutorials handling a complete game from start to finish, implementing various mechanics and functionality. I have a few ideas in mind I’d like to implement and see to fruition (one of them have been cooking for 5 years) so I’ll be watching anticipating such tutorials and resources.

With all this said and done, I apologize for the long winded feedback, I wish this is helpful in anyway and I thank you very much for putting up with me.

EDIT: fixed some typos and reduced the level of English language mutilation in my post.


This is ridiculously awesome feedback @Vallar. Thanks so much for taking the time to consolidate your thoughts and post them here. It’s super valuable to the team here at Improbable.

I’ll be going through this in detail soon and making sure we have assimilated each point. It’s possible someone might get to that before me, though!



This one might get some rolling eyes from advanced programmers and CS guys but this part ShipControlsWriter.Send(new ShipControls.Update().AddFireLeft(new FireLeft())); looks complicated and convoluted. Is that because of the code generation or is that a C# thing. I am guessing it is the code generation. If that is the case, why can’t it be cleaned a bit?

Sending updates like this can be hard to read I prefer something like this (C#):

var update = ComponentName.Update();
update.AddEventName(new EventType());


You are most welcome and I hope it helps in anyway :slight_smile:


OK, here we go!

Have been meaning to get back to you with a proper reply for a while. Thanks again for spending the time to put your thoughts down - they’re incredibly useful us. Posts like yours help us validate what we want to do next, and raise new things we haven’t yet thought about improving.

You are welcome! Can’t wait to see more multiplayer games built using SpatialOS by other non-network engineers :slight_smile:

We’ve got a long way to go before your development workflow is as simple as it could be. We’re always planning new improvements in this regard (e.g., the introduction of the SpatialOS Window in Unity with v10) where we can. There is obviously a balance to be struck as we also aim to support other game engines (see: UE4 at GDC) and we want to stay as platform agnostic as possible.

This isn’t great! We’ll look into ways to improve the experience here. Watch this space :slight_smile:

You’re right that a progress bar can go a long way to making the build process a bit more tolerable :stuck_out_tongue: Right now, we’re focused on shortening the build times as much as possible as priority - ultimately, iteration time matters. Can’t wait to put some shiny animations on top, though! :projector:

We will be adding caching in the next version of the Launcher to prevent re-downloading.

Thanks for the feedback. @beth and the tech teams are working to make sure each code example is self-contained going forwards. :writing_hand:

This is great feedback. We will look at how to explain the concepts of SpatialOS within the tutorials more effectively, whether in Hello World or Pirates. Hello World aims to give you a sense of what the SpatialOS platform can do - it falls short of being a great introduction to the paradigms, tools & architecture. We can and will improve this :slight_smile:

This is really interesting. We will need to continue to iterate to get the right balance - the example you give is super useful to do that!

Schemalang is indeed our creation. It actually compiles down to Protocol Buffers, with which it shares a lot of syntax. It’s language neutral since we generate code for many language SDKs (e.g., Java, C#, C++, [more to come]).


Good point, we need to be more consistent there (cc @beth).

The [WorkerType] annotation specifies which worker type a particular MonoBehaviour should run on (i.e., a MonoBehaviour with [WorkerType(WorkerPlatform.UnityWorker)] will only ever be enabled on the UnityWorker, not the UnityClient).

The UnitySDK considers individual [Require] statements independently of the worker type. You can read about the full lifecycle of UnitySDK-managed MonoBehaviours in the docs.

You’re right that 2D is inherently no different - we haven’t got any plans to offer a 2D tutorial at the moment, but given demand there’s always a possibility.

I presume you’ve managed to upgrade to 10 now? Sorry that you ran into this - the upgrade guide is a tricky beast!

It’s an Alpha thing :slight_smile: We’ll work on an auto-upgrade process further down the line.

Noted. For now I’d recommend a workflow similar to that in Hello World - add to a text file your assignments whenever you assign a new ID and keep them sorted. For the future, this is a workflow we’d love to improve!

1 is the ID of the current_health field. 1300 is the ID of the Health component (see: Health.schema).

Agree that the update APIs are pretty verbose. We’ll consider again how we can make this nicer :books:

@beth can help out with these :slight_smile:

Thanks - we couldn’t do it without the help of this awesome community. Shout out to all our champions (you know who you are)!

:support: :support: :support:


Thanks for your detailed reply. I’ll comment on a few points you raised if you don’t mind.

Great, I seriously hope SpatialOS support all engines and not one language or platform for that matter and I have seen your plans on GDC and Google 17 talks. That said, I am only suggesting to make more readable, more easier to understand in general. C# was just an example as so far it and Python are about the two languages that I believe are quite readable (and probably most C based languages). Not only readable but guessable. For example when I dive into Unity and develop I usually can guess what a class could have in terms of methods and fields. With Schema I don’t even know what this.

Perhaps, I am going about it the wrong way – suggesting to make the language easier – maybe it is better to have tutorials building stuff from the ground up with it to have a more in-depth understanding of what this is.

Yes, thank you very much. I am looking forward to a much easier process to be honest :slight_smile:

Thanks for the explanation. This raises the “confusing” point about the language I mentioned earlier.

That said, thank you so much for your explanations and links it helped. You guys are really awesome and super accommodating. I have to mention that I once emailed you guys quite a while ago (Bossa Studios was still fresh talking about Worlds Adrift) and asked if SpatialOS was for non-programmers and you replied with a really polite and well written email. I just remembered that and thought to stress this fact. :slight_smile: