4
\$\begingroup\$

How can one add a level to an already published iOS/Android Unity3D game on a daily/weekly basis?

I know this probably isn't feasible but it won't harm if I just made sure of it. Our game requires to allow access to just one level a day/week. You may access levels that were released on previous days and play to your heart's content but all players will get access to a new level every day/week. I know this may sound crazy but the concept requires it so just roll with me.

Is there anyway to achieve this for iOS/Android games built with Unity? Of course, we could package a whole game with 10 levels and allow access to each level after a set time, but the game will need to talk to a back-end CMS all the time to allow login and verification of users, make sure they aren't cheating, etc, etc, over proper security and https (proper anti-cheat solutions are a must and that's why maybe HTML5 route is better).

We are now moving towards doing all this in HTML5 and completely bypass Unity, but was hoping to find a solution with Unity because 3D is better than 2D depending on the situation, and some levels could be 3D while others 2D. Patching/updating everyday to upload new levels won't go down well with anyone, the app stores or the users.

\$\endgroup\$
  • 2
    \$\begingroup\$ The obvious solution to this problem is cryptography: ship the levels encrypted, each with a different key, and publish one key per day. The bandwidth requirements for delivering a key are very low compared to delivering new content, which could be prohibitive. Unfortunately I don't know if you could get past draconian app store regulations with an approach like this... \$\endgroup\$ – R.. Jul 3 '15 at 2:42
  • 1
    \$\begingroup\$ see the app store regulations and how draconian they are is the reason why I posted here. I have never tried anything like this and I know the app stores just need a reason to reject your app, especially apple. hmm.. \$\endgroup\$ – masterpiece Jul 3 '15 at 7:45
2
\$\begingroup\$

Laszlo Fuleki's answer is fine. The problem is that, if you are asking this, you probably are not using a suited level structure.

So if there's an internet connection, check for a new level avaliable and if it proceeds, show it to the user (you can use a system notification or an inbox icon inside the game). Then there are 2 options:

  1. The level is already there, pre-packaged, and the access is automatically allowed once the server notification.
  2. The level data is sent by user request to the server.

The user can't cheat because the server controls the schedule. Pre-packaging a level and granting access to it in an schedule manner, without internet connection, seems ackward to me (candy crush lives is a similar concept). And it can be cheated. So internet connection is required.

\$\endgroup\$
  • \$\begingroup\$ yeah, pre-packaged levels CAN be cheated and even if there's a tiny chance they can be, its a risk we can't take. So thats out of the question I guess. The level data being sent by server to user request? Think the app stores wont like this at all. Its insta-ban from apple as far as I know. So really, we are running out of options. But since big games like Clash of Clans already have a way of only allowing access to "In-app purchases" once everything is verified and there's no cheating, surely allowing access via "In-app purchases" is possible. \$\endgroup\$ – masterpiece Jul 3 '15 at 8:16
  • 1
    \$\begingroup\$ I don't know anything about unity3D or bundles. I'm answering as an android programmer. Are the new levels free? I don't see how loading data from server is not allowed (seems you talk about loading executable code). The new level notification is, for example, data sent by the server. I'm thinking about loading a string, xml or whatever (a more or less complex level definition... where is a tree, how much points you need to complete the level, etc.) and then parse it to create the level. That if all images and resources are already packaged... if not, an update is needed (like in Angry Birds). \$\endgroup\$ – Roberto Valdunciel Jul 3 '15 at 18:58
2
\$\begingroup\$

Unity's Asset Bundles were designed specifically for this purpose, to allow you to add/download new Unity content and prefabs without the user having to update their game client at all.

http://docs.unity3d.com/Manual/AssetBundlesIntro.html

\$\endgroup\$
  • \$\begingroup\$ I have been spending my time getting familiar with Asset Bundles and how I can use them to our requirement. They are very promising, but as mentioned here, loading and executing scripts is not allowed in iOS, windows stores, etc, so that is a big hurdle. Any sugestions on how to get round this? \$\endgroup\$ – masterpiece Jul 3 '15 at 9:27
  • \$\begingroup\$ TBH I think we will find a way with asset budles and they are promising if we solve the issue mentioned in the above comment, especially cos big games have post-release DLC cycles and really, thats what we are after too. Just more regularly. \$\endgroup\$ – masterpiece Jul 3 '15 at 9:33
  • 1
    \$\begingroup\$ You can't get around the iOS AOT issues as I mentioned on the Unity forums. \$\endgroup\$ – Greg Quinn Jul 3 '15 at 22:01
1
\$\begingroup\$

Since you use security checks on the server, in your place I would use the existing backend to provide the daily new level as well. You could transmit a JSON, XML, whatever really to the client, and based on that the client would construct the level. This way you would have full control over what is available and what is not (e.g. sending level data when the user requests to play it, or decide to cache them on the client machine once they had access to it).

\$\endgroup\$
0
\$\begingroup\$

Maybe look into saving your levels as txt then when the person connects it pulls that file and rebuilds the level reading from the txt.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.