# UNITY

## **Quick Start**

最新バージョンダウンロード

{% embed url="<https://github.com/naver/navergame-sdk-unity/releases/tag/1.3.8>" %}

### **1. プロジェクト設定**

NaverGame SDKを使用するためにはUnityで以下のとおり開発環境を設定してください。

* Unityのメニューで**Asset > Import package**をクリックしてから**Custom Package**のダイアログボックスでダウンロードした**NaverGameSDK-x.x.x.unityPackage**ファイルを選択してください。

本ガイドはUnity2019.4.20fバージョンを基準として作成されています。

* Unityのメニューで**Asset > Import package**をクリックしてから**Custom Package**のダイアログボックスでダウンロードした**NaverGameSDK-x.x.x.unityPackage**ファイルを選択してください。

![](https://2139408215-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F62NAlL66NlO6fj2tpGNj%2Fuploads%2FdtYqaYG25nA3n7HdzRwm%2F05.png?alt=media\&token=586044a4-547f-402d-99b1-fecd0f748558)

* **Custom Package**のダイアログボックスで**Import**をクリックすると、**NGSDK**フォルダと**Plugins**フォルダが作成されます。

![](https://2139408215-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F62NAlL66NlO6fj2tpGNj%2Fuploads%2FN8vm4OSBP3SFK0rQE8Ck%2F06.png?alt=media\&token=fe7d480f-257f-45dd-ba9c-831a03e2694b)

* **NGSDKフォルダのSample**フォルダにある**SampleScene**ファイルには基本実行ボタンが含まれています。Unityバージョンが異なると、**SampleScene**が正常ローディングされないことがあります。この場合は、以下のガイドを参考にして新しいUIを構成してください。

**Canvasにボタンを作成する**

* **GameObject > UI > Canvas**をクリックして**UGUI Canvas**を作成してください。
* **NGSDK**フォルダの**Sample**フォルダにある**SampleButton.Prefab**を、作成した**Canvas**の下位にドラッグして入れてください。NaverGameSDKで基本的に提供するボタンが作成されます。

![](https://2139408215-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F62NAlL66NlO6fj2tpGNj%2Fuploads%2FUqjQ9WhVMOP3AumtypYG%2F07.png?alt=media\&token=5f4aa608-de88-4afc-863c-3874d9559fb8)

* NaverGame SDKの実行ボタンは開発の利便性のためNaverGame SDKが基本的に提供するボタンで、直接作成することもできます。**SampleBehaviour.cs**ファイルにサンプルコードが作成されています。
* NaverGame SDKの実行ボタンは、UnityのUGUIをベースに作成されています。UGUIを使用しなかったり他のライブラリを使用する場合でも、**SampleBehaviour.cs**ファイルを参照して使用することができます。

> OS別のNaverGame SDKに関する詳細は、GitHubリポジトリをご参考にしてください。
>
> * &#x20;​[Android用Naver Game SDKのGitHubリポジトリ](https://github.com/naver/navergame-sdk-android)​
> * &#x20;​[iOS用Naver Game SDKのGitHubリポジトリ](https://github.com/naver/navergame-sdk-ios)​

### **2. iOSの追加設定**

{% hint style="info" %}
NAVERゲームのiOS SDKは、iOS 12.0以降のバージョンに対応しています。
{% endhint %}

iOS用ゲームを開発する場合は、以下の事項を追加で設定する必要があります。

**2-1 .bundleファイルのリンク**

Unity 5.4.0f3以上のバージョンは、iOS用アプリケーションをビルドするときに.bundleファイルがリンクされないよう設定されています。**NNGSDK.bundle**ファイルをリンクするよう、以下のように**Select for platforms for plugin**で**iOS**を選択する必要があります。

![](https://2139408215-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F62NAlL66NlO6fj2tpGNj%2Fuploads%2FGnhCSVcfjwP3dc2CfOwk%2F08.png?alt=media\&token=f5e193b4-ac10-4250-a9c9-4b25d72fc9a3)

**2-2. Xcodeの設定**

Xcodeで以下のように開発環境を設定してください。

* **TARGETS**の項目のうち**フレームワーク**を選択してください。
* **Build Setting**タブを選択して**Linking**項目で**Other Linker Flags**を探してください。
  * **Basic**または**Customized**モードは**Other Linker Flag**が見えない場合もあります。この場合は、**All**モードを選択してください。
  * 画面右上にある検索ウィンドウに**Other Linker Flag**を入力すると容易に見つけることができます。
* **Other Linker Flags**&#x306B;**-ObjC**オプション&#x3068;**-lc++**&#x30AA;プションを追加してください。

![](https://2139408215-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F62NAlL66NlO6fj2tpGNj%2Fuploads%2F7PkAuRNteFOShNzg2l5K%2F09.png?alt=media\&token=36031e5f-2b02-408d-aed0-fe08213de356)

* **Info.plist**に以下のユーザー権限取得オプションを追加してください。
  * Privacy - Camera Usage Description
  * Privacy - Photo Library Usage Description

![](https://2139408215-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F62NAlL66NlO6fj2tpGNj%2Fuploads%2Fk4CA6zLVcKD7xbzrQtlX%2F10.png?alt=media\&token=9ab76503-9bfc-41da-8b9e-b408fd0816ea)

* **TARGETS**の項目のうち実行されるアプリを選択して**Info**タブの**URL Types**項目に**Identifier**値と**URL Schemes**値を入力してください。
* **Identifier**値は当該**TARGET**の**General**タブで確認できます。
* **URL Schemes**値には[NAVER IDでログイン開発者センター](https://developers.naver.com/apps/#/register?api=nvlogin)にアプリケーションを登録時に入力した[URL Scheme](https://developers.naver.com/apps/#/myapps)値を入力してください。

![](https://2139408215-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F62NAlL66NlO6fj2tpGNj%2Fuploads%2Fb3HG3jLAs4rg5CZ2PG4X%2F11.png?alt=media\&token=f9fad7a9-6d50-4269-b46c-aa121a456039)

![](https://2139408215-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F62NAlL66NlO6fj2tpGNj%2Fuploads%2F128GCPCpluXLQu5UREPs%2F12.png?alt=media\&token=d365b07f-a47e-4bbf-becf-da95c119fe22)

&#x20;

## **NaverGameSDKの使用**

NaverGameSDKを使用するためには、まずinitメソッドを呼び出さなければなりません。

### **init()メソッド**

init()メソッドはNaverGameSDKをセットするメソッドです。必要な引数は以下のとおりです。

* loungeId: 公式ラウンジを申請時に受け取ったLoungeId
* clientId: [NAVER IDでログイン開発者センター](https://developers.naver.com/apps/#/register?api=nvlogin)でアプリケーションを登録時に受け取ったクライアントID
* clientSecret: NAVER IDでログイン開発者センターでアプリケーションを登録時に受け取ったクライアントシークレット

```
public void init(string loungeId, string clientId, string clientSecret);
```

以下はinit()メソッドを実装した例です。

```
GLink.sharedInstance().init(
    "naver_game_4developer", 
    "UKvNABLDsyEJusJGsXL2",
    "rK4suc_Qd0"
    );
```

**​**

### **terminateSdk()メソッド**

Terminate()メソッドは、NaverGameSDKを終了させるメソッドです。特定の状況でsdkを終了させる必要がある場合に呼び出します。例えば、GLinkDelegateコールバックを通じて送信されるインゲームメニューコードを実行するときには、必ずTerminateSdk()メソッドを呼び出してsdkを閉じなければなりません。

```
void terminateSdk();
```

以下はterminateSdk()メソッドを実装した例です。

```
Glink.sharedInstance().terminateSdk()
```

### **executeHomeBanner()メソッド**

登録したバナーウィンドウを表示させるメソッドです。

```
public void executeHomeBanner()
```

以下はexecuteHomeBanner()メソッドを実装した例です。

```
Glink.sharedInstance().executeHomeBanner()
```

### **executeSorryBanner()メソッド**

点検用または特定のお知らせページを表示させます。このページは他の画面への移動が制限されます。

```
public void executeSorryBanner()
```

以下はexecuteSorryBanner()メソッドを実装した例です。

```
Glink.sharedInstance().executeSorryBanner();
```

### **executeBoard(int boardId)メソッド**

**公式ラウンジ管理ページ** > **SDK管理** **> 掲示板管理**ページで登録した特定の掲示板を直接実行させるメソッドです。

```
public void executeBoard(int boardId);
```

以下はexecuteBoard()メソッドを実装した例です。

```
Glink.sharedInstance().executeBoard(1);
```

**​**

### **executeFeed(long feedId, bool isTempFeedId)メソッド**

登録された投稿の番号で直接実行するメソッドです。**予約機能によって登録した予約投稿**の場合は、予約投稿の番号をFeedIdに入力してIsTempFeedIdを**True**と入力してください。

予約投稿が掲示されるまでは、メソッドを実行しても投稿は表示されません。

* FeedId: 投稿または予約投稿の番号
* IsTempFeedId: FeedIdが投稿の場合はfalse、FeedIdが予約投稿の場合はtrue

```
void executeFeed(long feedId, bool isTempFeedId);
```

以下はexecuteFeed()メソッドを実装した例です。

```
Glink.sharedInstance().executeFeed(50154, true);
```

**​**

### **getCountryCode()メソッド**

端末のcountryCodeを取得します。

```
public string getCountryCode(Activity activity);
```

countryCodeは2文字のアルファベットで構成された国コード([ISO 3166-1 alpha-2](https://ko.wikipedia.org/wiki/ISO_3166-1_alpha-2))です。これを活用すると、コード内で国別に分岐処理することができます。主な国コードは以下のとおりです。その他の国コードは[リンク](https://ko.wikipedia.org/wiki/ISO_3166-1_alpha-2)をご参考にしてください。

&#x20;

| 国コード | 国  |
| ---- | -- |
| CN   | 中国 |
| JP   | 日本 |
| KR   | 韓国 |
| TH   | タイ |
| US   | 米国 |

以下はgetCountryCode()メソッドを使用して韓国の場合にのみSDKを初期化してバナーを呼び出す例です。

```
if (GLink.sharedInstance().getCountryCode().Equals("KR"))
{
    GLink.sharedInstance().init("LoungeId","ClientId","ClientSecret");
    GLink.sharedInstance().executeHomeBanner();
}
```

​

## **GlinkDelegateデリゲート**

Sdk内部で特定のイベントが発生した場合、eventを通してこれをGameEngineに知らせます。

### **SdkOpenedDelegateイベント**

NaverGameSdkが実行されたときに発生します。

```
public delegate void SdkOpenedDelegate();
public static event SdkOpenedDelegate sdkOpenedEvent;
```

登録方法は以下のとおりです。

```
private void Awake()
{
    GLinkDelegate.sdkOpenedEvent += SdkOpenedEvent;
}
void SdkOpenedEvent()
{
    Debug.Log("BannerOpenedEvent");
}
```

**​**

### **SdkClosedDelegateイベント**

NaverGameSdkが終了したときに発生します。

```
public delegate void SdkClosedDelegate();
public static event SdkClosedDelegate sdkClosedEvent;
```

登録方法は以下のとおりです。

```
private void Awake()
{
    GLinkDelegate.sdkClosedEvent += SdkClosedEvent;
}
void SdkClosedEvent()
{
    Debug.Log("BannerClosedEvent");
}
```

​

### **SdkCallInGameMenuCodeデリゲート**

NaverGameSdkでインゲームメニューコードを実行する必要があるときに発生します。**公式ラウンジの管理ページ** > **SDK管理** **> バナー管理**ページでバナー&#x306B;**「インゲームメニュー」**&#x3092;登録したときに使用します。AndroidとiOSの各プラットフォームによって登録した値が各自伝達されるため、別の値を入力した場合は各自処理しなければなりません。

```
public delegate void SdkCallInGameMenuCode(string InGameMenuCode);
public static event SdkCallInGameMenuCode sdkCallInGameMenuCode;
```

登録方法は以下のとおりです。

```
private void Awake()
{
    GLinkDelegate.sdkCallInGameMenuCode += SdkCallInGameMenuCode;
}
void SdkCallInGameMenuCode(string inGameMenuCode)
{
    GLink.sharedInstance().terminateSdk();
    Debug.Log("SdkCallInGameMenuCode " + inGameMenuCode);
}
```

​

## **ビルド**

各プラットフォームに合わせてビルドして、正常にビルドされるとSDKを使用できるようになります。

### **1. 発生する可能性のあるビルドエラー**

**1-1. Androidビルドエラー**

* &#x20;​[Class Duplicate Exception](https://navergame.gitbook.io/naver-game/naver-game-sdk-faq-1#unity-android-class-duplication-exception)​
* &#x20;​[Multidex Exception](https://navergame.gitbook.io/naver-game/naver-game-sdk-faq-1#unity-android-mutidex)​

&#x20;

## **横モード、縦モード**

NaverGameSDKは横モードと縦モードのどちらにも対応しています。

Android、iOSのどちらの環境も、別途に設定しなくても画面の縦横状態によって横モード、縦モードが自動的に適用されます。
