Unityを使ったiOS-Windows間のリアルタイム姿勢計測

## この記事で分かること
* Unityでのジャイロセンサーの有効化方法
* Unityでの3Dオブジェクトの回転制御
* Unity Remote 5の使い方
## #1 事前準備
#### iPhone側
###### 1\.AppStoreから Unity Remote 5 をインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012104/3e1b76f6-6179-44b8-a7c5-aea068653bd6.png)
###### 　[Unity Remote 5 のインストール：AppStore](https://apps.apple.com/jp/app/unity-remote-5/id871767552)
###### 2\.Unity Remote 5を開いて、iTunesがインストールされたPC(Windows)とUSBで接続
<img width="240" alt="Image.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012104/07c72426-4796-4e63-b966-d9fad57c83c0.jpeg">

###### [PC(Windows)にiTunesがインストールされていない場合はこちら](https://itunes.softonic.jp/?utm_source=bing&utm_medium=paid&utm_campaign=bing_JP_Japan_KW_Desktop_Program_iTunes_6524&msclkid=0b24a5e1b41b1c2b991dc2510f903f3d)
###### 3\. iPhone側で「このコンピュータを信頼しますか？」というメッセージが表示されるので、「信頼」をタップ
***
#### PC(Windows)側
###### 1\. Unity Hub から Installs > Add modules > iOS Build Supportを選択し、インストールする（バージョンは任意のものを選択）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012104/dc8fb391-b975-4b9b-9851-2740a866f5ef.png)
###### 2\. Projectsに戻り、New Project > Universal 3D を選択、好きな名前を付けて Create project を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012104/2bae278e-5825-4754-854f-d93e96cc85fb.png)
###### 3\. Hierarchyウィンドウの＋マークをクリックして、3D Object > Cube を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012104/b9724bf8-0977-440a-bfe7-4f85e10cacde.png)
###### 4\. Cubeを選択した状態でInspectorウィンドウを開き、Transform > Scaleを<br>　[X:0.0715, Y:0.1467, Z:0.0078] に設定<br>　※iPhone14のサイズをもとに設定<br>　[参考：J:COM 歴代iPhoneシリーズの情報まとめ](https://www.jcom.co.jp/service/mobile/column/011.html?utm_source=microsoft&utm_medium=cpc&utm_campaign=lt_ms_sv_sb_3_mum_xxother_dt_mumd000001&msclkid=d5d2dc195f2e1b066e29bba9ecfcdb5a)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012104/56d0381e-5ff4-47e6-ae10-ccdecc4d9342.png)
###### 5\. Edit > Project Settings... を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012104/e6a01f5b-0154-4dca-9a51-9c79dff030ea.png)
###### 6\. Project Settingsウィンドウから、Editor > Unity Remote > Device を None から Any iOS Device にする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012104/cb3d4a2b-2123-4b41-a4c3-f0d2d35b1046.png)
###### 7\. Project Settingsウィンドウから、Player > Other Settings(Setting for iOS) > Target minimum iOS Version を 13.0 から手持ちのiPhineのバージョンの番号に変更する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012104/a608a5f3-bc5c-48d6-85b5-0b095118ef6c.png)
***
## #2 プログラム作成
###### 1\. ProjectウィンドウでAssetsフォルダ内にcodeフォルダを作成し、そのフォルダを開いた状態で＋マークをクリックして、Scripting > Empty C# Script を選択し、"iPhone_gyro"という名前のcsファイルを作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012104/072e10c0-92e2-4cf3-8656-421e80ae2ebc.png)
###### 2\. iPhone_gyro.cs を開き、以下のコードを入力する
```iPhone_gyro.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class iPhone_gyro : MonoBehaviour
//           ~~~~~~~~~~~ 波線上はファイル名を入力する
{
    // Start is called before the first frame update
    void Start()
    {
        //ジャイロ機能を有効化する
        Input.gyro.enabled = true;
    }

    // Update is called once per frame
    void Update()
    {
        //クォータニオン（4次元ベクトル）を使用。
        Quaternion attitude = Input.gyro.attitude;
        //Cubeを回転させる
        //iPhoneは実行時の反対側の方向をZ軸の基準にするためオフセット値として180°を設定
        transform.localRotation = Quaternion.Euler(90, 0, 180) * new Quaternion(-attitude.x, -attitude.y, attitude.z, attitude.w);
    }
}
```
###### 3\. Unityに戻り、iPhone_gyro.cs をCubeにコンポーネントする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012104/14767275-f8e2-4da4-928a-fb1ad39a1478.png)
***
## #3 カメラ（Gameビュー）の調整
###### 1\. Hierarchy ウィンドウから Main Camera を選択し、Transform の Position を [X:0, Y:1, Z:-10] から [X:0, Y:0.17, Z:0.46] に、Rotationを [X:0, Y:0, Z:0] から [X:15.47, Y:180, Z:0] に設定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012104/ea5fdef3-dce5-4539-8551-47791fe94d4b.png)
###### 2\. Gameビューを開き、Cubeが映っていることを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012104/a25501d3-7c4d-4f7d-8049-ef3574e0bc92.png)
***
## #4 実行
#### オススメの実行方法
###### 1\. ScaneウィンドウとGameウィンドウが映るようにUnityのレイアウトを調整
###### 2\. Transform ToulでCubeオブジェクトを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012104/503981c1-5ccd-483e-abfa-f4e44c83e8f3.png)
###### 3\. 実行ボタン（▶）を押してプログラムを動かす<br>　※この時にiPhineはモニターに対して上部を向けた状態にする<br><br>　Unity画面の出力(Windows PC)
![MicrosoftTeams-video (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012104/2df2e728-8b12-4640-930b-a02d189351a2.gif)
###### 　スマホ画面の出力(iOS iPhone)
![MicrosoftTeams-video (2).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012104/6b7e8f9a-50dd-4a9a-b894-f98a2d66fb5b.gif)
***
## #5 まとめ
今回紹介した姿勢計測を応用すれば、球転がしゲームや簡易的なARゲームなどの作成も可能です
Unity Remote 5 はジャイロセンサ以外のiPhoneのセンサも利用可能なので、組み合わせで使用すると、より高度な作品ができると思います
是非皆さんもUnityを使用したiOS開発の第一歩として気軽に挑戦してみてください！