# LYNC Unity Movement SDK

LYNC Unity Movement SDK is a no-code Modular Unity SDK supporting PC (MacOS and Windows) , Mobile (Android and iOS) and WebGL on [Aptos Move (M2)](https://movementlabs.xyz/).&#x20;

**Platform Supported:** PC (Windows and MacOs) , Mobile (Android and iOS) and WebGL\
**Network Supported:** Movement Testnet and Mainnnet

This release includes the following:

* Social Logins
* Custom Transactions in Social Login

### Get your API Key <a href="#get-your-api-key" id="get-your-api-key"></a>

Please get your API key before downloading the SDK from [**here**](https://www.lync.world/form.html)

### Installation <a href="#installation" id="installation"></a>

Download the LYNC Unity Movement SDK from [Here](https://github.com/LYNC-WORLD/LYNC-Unity-Movement-SDK)

Example Project:

&#x20;​Import the SDK .unitypackage file to your project or simply drag and drop .unitypackage file to your project.

<figure><img src="/files/trPf7DvV4KlFzRlQbtkY" alt="" width="561"><figcaption><p>Assets -> Import Package -> Custom Package</p></figcaption></figure>

Once the LYNC Movement SDK package has finished importing into your Unity project, you can begin integrating it into your game.

The Folder structure looks like this

<figure><img src="/files/nQu5Xc0CX7oGfyQRieqS" alt="" width="270"><figcaption><p>SDK Folder Structure</p></figcaption></figure>

### Integrating LYNC Movement SDK in Unity

There are 2 Example Projects present in the SDK:&#x20;

1. Assets/LYNC-Movement-SDK/Example/MoveExample.unity
2. Assets/LYNC-Movement-SDK/Example/Example 2.unity

<figure><img src="/files/ZReQAEqMi3Y8wcpxCcOl" alt="" width="563"><figcaption><p>Example Projects</p></figcaption></figure>

You can find the example scene in the folders. Simply pass the API key in LyncManager GameObject.

To test, Build and Run after adding this scene in (Scene in Build).

<figure><img src="/files/zZzMcgSdyPqqBWWjR5lJ" alt="" width="563"><figcaption><p>Pass LYNC API Key</p></figcaption></figure>

## **Setup the Project**

To use LYNC Aptos SDK, attach LYNC Manager Prefab(Assets/LYNC-APTOS-SDK/LYNC Manager.prefab) on the starting scene.\
This will serve as the starting point for your project. In LYNC Manager Prefab, be sure to provide the following details:

1. LYNC API Key ([The API Key can be generated from here](https://lync.world/form.html))
2. Choose Network -> Testnet / Mainnet
3. Sponsor Transactions -> If you want to sponsor transactions for users (Please contact [LYNC](https://calendly.com/shanu-lync/30-minute-meeting) to setup Paymaster)
4. Pass a deep link name (example: lyncmovement/gameName etc.)

### Integrating Login or Transaction Layer via LYNC Aptos SDK in Unity

The Sample Code for Login can be found at APTOSExample.cs.

> **Make sure to Import LYNC.**

**Example (Event Trigger):**

LYNC ready Should be a function which has an argument of type "LyncManager"

```csharp
LyncManager.onLyncReady += LyncReady;

private void LyncReady(LyncManager Lync)
    {
        // Once LYNC is ready, you can do any steps like Login, Logout, Transactions etc.
        
        //To Login:
        Lync.WalletAuth.ConnectWallet((wallet) =>
        {
            OnWalletConnected(wallet);
        });
        
        //To Logout:
        Lync.WalletAuth.Logout();
        
    }
```

**To Check if the user is logged in or not:**

```csharp
using LYNC;

private AuthBase authBase;

    authBase = await AuthBase.LoadSavedAuth();
        if (authBase.WalletConnected)
        {
            // User is Already Login
            OnWalletConnected(authBase);
        }
        else{
             // Ask user to login
        }
```

On Wallet Connected (TypeOfLoginMethod)

```csharp
//To OnWalletConnected(TypeOfLoginMethod):
        
        private void OnWalletConnected(AuthBase _authBase)
        {
            if (AuthBase.AuthType == AUTH_TYPE.FIREBASE)
            {
                Populate(_authBase as FirebaseAuth);
            }
        }
        

        public void Populate(FirebaseAuth firebaseAuth = null)
        {
            WalletAddressText.text = (firebaseAuth == null ? "Disconnected" : AbbreviateWalletAddressHex(firebaseAuth.AptosFirebaseAuthData.publicKey));
            balance.text = (firebaseAuth == null ? "0" : firebaseAuth.AptosFirebaseAuthData.balance) + " APT";
        }
```

**To Logout directly:**

```csharp
LyncManager.Instance.WalletAuth.Logout();
```

## Transaction Flow&#x20;

There are two methods for proceeding with a transaction:

1. **Gasless Transaction -** Game Developer/ Game Studio will be sponsoring the transaction fee.
2. **User Paid Transaction-** The Gamer/ User will be responsible for paying the gas fee and cost if any, required to do the transaction.

### Gasless Transaction

To Enable Gasless Transactions or to Sponsor Transactions for your users, \
Set Sponsor Transactions as true, and [contact LYNC team to setup your paymaster](https://calendly.com/shanu-lync/30-minute-meeting)

<figure><img src="/files/OpLsMRtFwuje4p2aUszz" alt="" width="563"><figcaption><p>Sponsor Transactions</p></figcaption></figure>

To do transactions, MoveExample.cs can be taken as a reference.

Pass in the Contract Address, Contract Name, Function Name and Network.

Arguments are not compulsory parameters, but if the function accepts any argument, make sure to pass them.

<figure><img src="/files/PK7IObSCzvPv0Tu7Wo4L" alt=""><figcaption><p>Transaction Object</p></figcaption></figure>

```csharp
LyncManager.Instance.TransactionsManager.SendTransaction(Transaction);
```

You can create a public Transaction Object, pass in the parameters and hit the function call where you want to do the transactions

```csharp
public Transaction mintTxn;

TransactionResult txData = await LyncManager.Instance.TransactionsManager.SendTransaction(mintTxn);

if (txData.success)
    SuccessfulTransaction(txData.hash, "MINT");
else
    ErrorTransaction(txData.error);

```

Or you can create a Transaction Object

```csharp
public Transaction mintTxn;

//LyncManager.Instance.TransactionsManager.SendTransaction( new Transaction(ContractAddress, ContractName, FunctionName,ListOfArguments));

TransactionResult txData = await LyncManager.Instance.TransactionsManager.SendTransaction(
new Transaction("0x55db3f109405348dd4ce271dc92a39a6e1cbc3d78cf71f6bf128b1c8a9dfac33","tst_unity","set_data_bytes",arguments));

if (txData.success)
    SuccessfulTransaction(txData.hash, "MINT");
else
    ErrorTransaction(txData.error);

```

List of Arguments:&#x20;

```csharp
//List<TransactionArgument>{
//    new TransactionArgument{ argument = value, type = ARGUMENT_TYPE.STRING }
//};

List<TransactionArgument> arguments = new List<TransactionArgument>{
    new TransactionArgument{ argument = "0xb66b180422a4886dac85b8f68cc42ec1c6bafc824e196d437fdfd176192c25fccfc10e47777699420eec0c54a0176861a353a43dd45b338385e1b975709f2000", type = ARGUMENT_TYPE.STRING }
};
```

### Some common bugs and their resolutions

**Problem:** Newtonsoft JSON is missing.

**Solution**: Please, Add this as a git URL in adding package

```
com.unity.nuget.newtonsoft-json
```

<figure><img src="/files/aOEWEI34ig2pv2zo3Cy8" alt=""><figcaption><p>Add newtonsoft Json</p></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lync-1.gitbook.io/lync/movement-labs/lync-unity-movement-sdk.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
