[Released] Aimfire Gaming SDK: Seamless cross-screen gaming

Greetings everyone:

I’m a long time observer of the forum but this is my first post. I’ve been working on a new mobile gaming technology for quite some time. If you develop games for mobile platforms, please read on.

What it is:
Aimfire Gaming SDK for Unity enables seamless local multiplayer mobile games. It contains the following parts:

  1. A synchronization library that sync the clocks between mobile devices to < 1ms.
  2. A peer-to-peer library that removes the typical requirement of devices be connected to the same WiFi network (in fact, no internet connection is required at all)
  3. A zero-effective-latency layer that makes cross-screen games not only possible, but easy to implement.

Seeing is believing - below are some demos that showcase its capabilities wrt multi-screen games:

https://vimeo.com/170025206

The problem:

The key problem solved by the SDK is that of latency. Latency is bad, as probably anyone who has worked on a multi-player networked game can agree - the difference of a few hundred milliseconds can make or break a networked game. Cross-screen games, defined as games with playing surface spanning multiple devices, are even more sensitive to latency. As all screens are visible to all users at the same time, the slightest latency and jitter in the communications link can shatter the seamless experience that a developer might hope to achieve. Latency-hiding strategies designed for networked multi-player games simply do not apply to cross-screen games. The picture below illustrates what a game would look like if it attempts to combat latency using traditional methods. This is precisely the reason why no such game exists today.

The solution:

The goal of the Aimfire SDK is to help game developers design seamless cross-screen experiences, in which any latency in the physical layer is well hidden from the end-user, so that ZERO latency is perceived. This SDK packs in more mobile technology than meets the eye. With it, cross-screen games not only become possible, but also fairly straightforward for you to implement.

The SDK handles synchronization and the underlying communication layer between the mobile devices - there is no explicit lock-steps for you to design or states to synchronize, and there is no server that you need to set up. You are still designing ONE game - the SDK takes care of screen splitting for you.

The possibilities:

The SDK gives you much more than just an extended display. The mobile devices can form nonplanar relationships, and suddenly you have a whole new spatial dimension to play with! This is, again, super easy for you to set up, with the APIs provided.

You can quickly and easily adapt your existing games to cross-screen, and in the process add lots more fun and social elements to them: just imagine an “Angry Birds” type game in which birds and pigs flying across multiple phones, or a “Clash Royale” type game where your troops marching seamlessly into your friend’s device.

More opportunities will come from games that are designed specifically to take advantage of this new capability. Some fun examples include party games (such as pouring wine, or dumping coins from your device to your friend’s), board games, TCG/CCG games, or strategy games. Another area of recent interest is Virtual Reality games - our SDK can help you turn solitary VR activities into social experiences, by allowing end-users to see, hear, and react at exactly the same time.

Limitations:

If you reached here, you are probably wondering “this sounds too good to be true!”. So here’s the catch

  1. Aimfire’s technology is cross-platform, however the current release of the SDK will include support for Android devices only. iOS device support will come in a future release.

  2. While multiple devices (>2) will be supported in the future, the current release officially supports only two devices. With a bit of work, you can do the extension yourself. Or you can wait for our next release.

  3. Aimfire’s technology hides latency, but it does’t completely eliminate latency (no one can - we all have to obey the laws of physics, remember?). The side effect of latency-hiding is that there will be a narrow zone along the boundary between the devices where free movement is restricted. When games are designed with this characteristic in mind, the restriction is completely imperceptible to the end user.

The ask:

We intend to release the library to the Asset Store soon, and I would love to hear your feedback and feature requests! I plan to post much more information (feature lists, tutorial videos and documentation) here as we move towards release. Your input is super important for me as it helps us shape the product to best suit your needs.


[Update 7/30/2016]

The Aimfire SDK is now LIVE on Asset Store! Please go ahead and try it out - it’s FREE.

After you import the Unity package, please go to “File → Build Settings”, and manually add all the scenes in the AimfireSDK/_Scenes folder, as shown in the picture below. This is due to a glitch when uploading the SDK to Asset Store, and we will fix it in the next update.

4 Likes

Very interesting. I could see this to work very well with board games/ ccg.

What happens if I mix low-high end devices together? I’m thinking of a setup of a tablet in the middle, and two or more phones around it.

Thank you very much for your interest. To answer your question: yes you can mix different devices (high/low-end, Android/iOS). We also do screen adaptation, so objects that cross screen appear to be the same size on all devices regardless of display size/resolution. The scenario you mentioned (one tablet + phones) certainly will work.

1 Like

For people who had trouble viewing the YouTube video, I have switched to use Vimeo. Please let me know if you still have trouble seeing it. My apologies.

Wow very cool indeed. Can you post a walkthroug video of a simple hello world app to get and idea of how complex is to use your API. Also how much it will cost?

Thank you for the feedback. I will post tutorial videos soon. A quick answer to your question is this - when I say it’s extremely easy for developers to enable multi-screen, I do mean it. You literally just tell the library how the screen should be split (e.g. landscape side-by-side, portrait head-to-head, etc), and put a single line of code in your Update/FixedUpdate function, that’s it! We make the APIs flexible enough so you can do custom stuff as well.

Seems I neglected to answer the pricing question. We plan to make two versions: the standard version will be FREE and includes all the features you see in the demo video. The Pro version will include extra features including:

  1. The ability to detect device spatial relationship, e.g. how each device is oriented in space. With this ability you can set up a game and assign devices to different roles without user intervention. This is important especially if multiple (>2) devices are involved in a game.

  2. The ability to record and playback 3D (binaural) audio.

For the Pro version we are leaning towards a royalties model, where it’s totally free if developers are not making money, and we only take a very small percentage if it’s a success.

1 Like

The Aimfire SDK is now LIVE on Asset Store! Please go ahead and try it out - it’s FREE.

Please note: after you import the Unity package, please go to “File → Build Settings”, and manually add all the scenes in the AimfireSDK/_Scenes folder, in the order as shown in the picture below. This manual step is needed due to a glitch when uploading the SDK to Asset Store, and we will fix it in the next update.

2 Likes

@cren888
Hey, (you might recognize my username from reddit, I was the one asking a bunch of questions cause your asset makes me super excited haha), I ran into a slight problem which has me a bit perplexed.

In your asset video you show the demos built on a Samsung which looks pretty identical with the S3, however, I also am trying to build the demos to a Samsung S3 and the UI isn’t showing up correctly.

Instead of trying to explain it I’ve just taken a photo and put it on Imgur HERE. Excuse the poor level of detail due to using another phone to take the picture and the reflection of my ceiling fan light.

However, on my Sony Xperia Z1, it builds perfectly. I have Android SDKs installed for versions 4.0 - 6.x and am running 2.1 Android Studio with JDK 8.

My Samsung S3 is installed to the final version it can: 4.4.2
My Unity is the latest build: 5.4.0f3 (although I do plan on downgrade to the latest stable 5.3 whenever you make that version support update, purely for 5.3 already having most of its bugs smashed.)

Thoughts? Any ideas? I tried changing the canvas from static to scaling with the screen and still no change.


It might be a weird question, but I could see it possible due to the time between 5.4’s release and your asset release.

But is it possible you made those builds for the video using 5.3? I see the asset currently includes code that is deprecated in 5.4 (like Windows Phone 9 and Web Player).

Have you tried your demo builds in 5.4?

@SkyTech6

Thanks for trying this out. The phone you saw in the demo was a GS4 not s3. I’m surprised you even succeeded in loading the build on s3 as it requires android API level (17).

My guess of what’s causing the problem is the screen resolution on S3 affecting UI placement. I will look into this tomorrow.

Btw, unity 5.3.0 version of the SDK was submitted to asset store today, pending approval. so you will see it soon

@cren888

I found the mistake. It turns out that although I changed your UI canvas from constant size to scaling, I forgot to apply it to the prefab. My bad completely. Applied it to the prefab and now all the UI fits.

So on the UI, Canvas Scaler set UI Scale Mode from “Constant Pixel Size” to “Scale With Screen Size” and then just adjust the X until it is within your canvas border again. From there it SHOULD scale for every phone.

And since it has 4.4, I believe that falls within API Level (18)? As 17 was for 4.3.

Now my only problem is getting it to change from Connecting to Connected haha.

They both just sit there “Connecting” endlessly. Do you know if there is a minimum Android version for this?


Update: Tried this morning with my Sony Xperia Z1 (Android 5.0.2) and a ZTE (Android 5.1) and it was able to connect to the point it asks the ZTE if it would like to accept or decline a connection from the Xperia. However, once I do accept the connection the ZTE stops connecting and changes scenes back to One Player.

@SkyTech6

Thank you for finding the problem with UI - will have it fixed in next release.

For the connection problem you are having - can you check if WiFi is ON for both devices? The devices don’t need to be connected to any network, but WiFi needs to be on because we use P2P

Also in the Xperia Z1 to ZTE problem you described - ZTE changes back to One Player - did the Xperia Z1 changes to one player mode as well?

Sorry for the questions - I don’t have a ZTE device (btw what’s the exact model) with me to test it out myself. Worst case I may need to send you a debug build, if you are open to that. thanks.

@cren888

Yea Wifi is on for both devices as well Bluetooth.

And when the ZTE changes back to One Player, the Xperia doesn’t; in fact it continues to say “Connecting”.

The ZTE’s model is M9518

And I think I might need to specific the Xperia Z1 is a Z1s(Essentially just the TMobile version, but stopped getting the Z1 Android updates at my current one), model is C6916.

I’m completely up for using a debugging build for you (although I don’t know your API much yet. So I recommend writing it to save everything you need to know to an output_log that I can send you).

That is very strange. I’ve sent a debug build to you. Please send back the log files when you have them. Thank you!

Great one. Any chance this sdk will split ALL the screen contents of 1 phone to another phone - like homescreen, calendar, messaging, image, video, all apps, games, etc, just like an extended second screen for phone…? Example: NEC Docomo Media S phone…

Thank you for the link. Our SDK is intended for use by Unity developers to develop games. Obviously the same technology can be embedded in any non-game app to do seamless extended screen (like the video is showing), as well. To synchronize every app on the phone all at the same time would require a deeper integration with the phone manufacturer, though.