UniShare: sharing scores to social media with Unity

Español

One of the features I have missed in Unity when developing Countless, is the ability to share scores to social networks like Twitter or Facebook, as well as any other media like email and other messaging applications. Today’s mobile operating systems have integrated, standard tools that allow applications to easily share text and images to the media chosen by the user, and it would make sense that Unity integrated a unified, multi-platform API to deal with these features when deploying to mobile devices, but it doesn’t.

 

iOS Sharing Dialog
An example of a standard sharing dialog

 

So, after searching a lot, I finally found what seems to be the best existing option at the moment: the UniShare plugin by Level One Games. It allows to easily get a screenshot and share it via the OS’ standard dialog. It is not free, but it is definitely worth its price.

 

Honestly, after installing it I didn’t find it very straightforward to start using it, because I could not manage to find any documentation, and despite of including an example, it didn’t work for me. But everything turned out to be quite simple after taking a look into its code.

 

How to use UniShare

 

After installing it, a new folder called UniShare will appear in your project under Assets/Plugins. It includes an example folder. You can simply remove it. So you will have a structure similar to this one:

 

UniShare Folder Structure

 

If you go to the Scripts folder, you will find a script called UniShare. If you open it, you can find some of the methods that you will need to perform the most common operations related to sharing, like TakeScreenshotTakeScreenshotAndShare, and ShareScreenshot. But… how and where can you use them?

 

Simple. Add a Script component to one of your game objects, with this script:

 

UniShare Script Component

 

There you can see the parameters you can set for sharing, like ShareText and the four Border values. All of them can be configured both in the UI and from code. Once you have this component, it is possible to go to a custom script attached to this same object and do something like this:

 

[code language=”csharp”]
private UniShare uniShare;
private string originalSharingMessage;

void Start () {
uniShare = gameObject.GetComponent<UniShare> ();

// Compute values for borders depending on screen’s aspect ratio if needed
uniShare.BorderLeft = Screen.width * …;

// Keep the original text so we can update it afterwards
originalSharingMessage = uniShare.ShareText;
}
[/code]

 

In the example, I am storing the original value of ShareText in order to be able to update it afterwards. My intention here, is to define the text in Unity’s UI, but with a parameter ({0}):

 

UniShare Share Text

 

… so, from my script, I can use that exact text but replacing the parameter with the needed value:

 

[code language=”csharp”]
public void openSharingDialog(int _score) {
uniShare.ShareText = string.Format (originalSharingMessage, _score);
uniShare.TakeScreenshotAndShare ();
}
[/code]

 

Another important feature, is the ability to set borders for the screenshot. In my custom script, you have seen I was updating the screenshot’s width according to some criteria and depending on screen’s aspect ratio. The parameters defined by UniShare for this, are values between 0 and 1 that are relative to screen’s width and height. In order to make it easier to know what we are doing, UniShare allows us to print a semi-transparent rectangle in Unity’s simulator indicating the area that will be captured, by checking “Simulate Captured Area” in the script’s parameters:

 

UniShare Simulating Captured Area

 

So, you can use that information to tweak the borders and get the data you need to adjust the screenshot.

Comment/share

 

==============

 

UniShare: compartiendo en redes sociales con Unity

 

Una de las funcionalidades que he echado en falta en Unity al desarrollar Countless, es la posibilidad de compartir puntuaciones en redes sociales como Twitter o Facebook, así como cualquier otro medio como email u otras aplicaciones de mensajería. Los sistemas operativos móviles de hoy en día tienen herramientas integradas y estándar para compartir fácilmente texto e imágenes a los medios escogidos por el usuario, y tendría sentido que Unity integrase una API unificada y multiplataforma para acceder a esas características al exportar nuestro proyecto a dispositivos móviles… pero no lo hace.

 

iOS Sharing Dialog
Un ejemplo de un diálogo estándar para compartir

 

De modo que, tras buscar mucho, finalmente encontré lo que parece ser la mejor opción existente en este momento: el plugin UniShare de Level One Games. Permite obtener una captura de pantalla y compartirla fácilmente a través del cuadro de diálogo estándar del sistema operativo. No es gratuito, pero sin duda vale la pena por su precio.

 

Sinceramente, tras instalarlo no encontré demasiado intuitivo cómo comenzar a usarlo, porque no logré encontrar documentación, y a pesar de incluir un ejemplo, este no me funcionó. Pero todo resultó ser muy sencillo tras echar un vistazo a su código.

 

Cómo usar UniShare

 

Tras instalarlo, una nueva carpeta llamada UniShare aparecerá en tu proyecto bajo Assets/Plugins. Incluye una carpeta con un ejemplo. Puedes simplemente borrarla. Así, tendrás una estructura similar a esta:

 

UniShare Folder Structure

 

Si vas a la carpeta Scripts, encontrarás un script llamado UniShare. Si lo abres, verás algunos de los métodos que necesitarás para realizar las operaciones más comunes relacionadas con la funcionalidad de compartir, como TakeScreenshotTakeScreenshotAndShare, y ShareScreenshot. Pero… ¿cómo y dónde puedes usarlos?

 

Simple. Añade un componente Script a uno de tus game objects, con este script:

 

UniShare Script Component

 

Ahí puedes ver los parámetros que puedes configurar para compartir, como ShareText y los cuatro valores Border. Todos ellos pueden ser configurados tanto en la UI como por código. Una vez tengas este componente, es posible ir a un script custom enlazado a este mismo objeto y hacer algo como esto:

 

[code language=”csharp”]
private UniShare uniShare;
private string originalSharingMessage;

void Start () {
uniShare = gameObject.GetComponent<UniShare> ();

// Calcular valores para los bordes dependiendo de la relación de aspecto de la pantalla, si es necesario
uniShare.BorderLeft = Screen.width * …;

// Guardar el texto original de modo que podamos actualizarlo después
originalSharingMessage = uniShare.ShareText;
}
[/code]

 

En el ejemplo, estoy almacenando el valor original de ShareText para poder actualizarlo después. Mi intención aquí, es definir el texto en la UI de Unity, pero con un parámetro ({0}):

 

UniShare Share Text

 

… y así, desde mi script, puedo usar ese texto pero reemplazando el parámetro con el valor requerido:

 

[code language=”csharp”]
public void openSharingDialog(int _score) {
uniShare.ShareText = string.Format (originalSharingMessage, _score);
uniShare.TakeScreenshotAndShare ();
}
[/code]

 

Otra característica importante, es la posibilidad de establecer bordes para el screenshot. En mi script custom, has visto que actualizo el ancho de la captura de pantalla de acuerdo con algún criterio y dependiendo de la relación de aspecto de pantalla. Los parámetros definidos por UniShare para esto, son valores entre 0 y 1 relativos al ancho y alto de pantalla. Para hacer más fácil saber lo que estamos haciendo, UniShare nos permite activar un rectángulo semitransparente en el simulador de Unity indicando el área que será capturada, si activamos “Simulate Captured Area” en los parámetros del script:

 

UniShare Simulating Captured Area

 

Así, puedes usar esta información para configurar los bordes y obtener los datos que necesitas para ajustar la captura de pantalla.

 

4 thoughts on “UniShare: sharing scores to social media with Unity

Leave a Reply