【Unity入門】OculusGoで静止画集めて動画作成して遊んでみた♬

<a href="http://www.youtube.com/watch?feature=player_embedded&v=-nAGFIzi1DE
" target="_blank"><img src="http://img.youtube.com/vi/-nAGFIzi1DE/0.jpg" 
 </a>
※画像をクリックするとYouTube動画につながります

動画は簡単だった。。。静止画ももう簡単なはずなんだけど、。。

ハマりました。。。

ただ、その理由が未だにわからないので、今回は簡単にできるよ～という説明です。
静止画さえ用意されていれば、だいたい5～10分位の作業です。

やったこと
（１）Oculus用に設定する
（２）ProjectでAssetsの下にResourcesというディレクトリを作成する
（３）HierarchyにImage張り付けてOVRCameraRig配下に置く
（４）Imageの設定
（５）ImageにC#Scriptを張り付ける
（６）C#Scriptの中身
（７）実行
###（１）Oculus用に設定する
①これは今までと同じく、最初にあったCameraを削除
②Oculus－VR－Prefabs-でOVRCameraRigをHierarchyに貼る
③File-BuildSettingsを開いて、Androidを選んで下のSwitchPlatformを押す
③PlayerSettingsを押して、OtherSettingsのPackage名を変更、APILevel21以上、そしてXRSettingsを選んで、VirtualRealitySupportecにチェック入れ、VirtualRealitySDK'sを＋して、Oculusを選ぶ
###（２）ProjectでAssetsの下にResourcesというディレクトリを作成する
このResourcesに静止画を入れておくと、そこからC#ScriptでImageに渡して描画できるというのが、今回のメインディッシュです。
①Assetsにカーソルを持って行って、右クリックして、Folder作成する
②名前をResourcesにして、Assets配下に置く（最初からそこにできるはず）
③Resourcesへの静止画の配置は、Assets-ImportNewAssets..して一個づつ入れることもできるが、そもそもResourcesはリアルなFolderなので、そこへ静止画を配置してもよい。
④ResourcesはNewUnityProject配下のAssets配下にある。因みに、Projectはドキュメント配下に存在していた。
※Project新規作成時にProjectのディレクトリを指定できるので見つけやすいところに配置するのが良い
④大切なことは、配置した静止画の属性変更である。静止画をクリックするとTextureTypeがDefaultになっているので、それをSprite(2DandUI)に変更する。
今のところ、この作業はひとつずつ実施した。
###（３）HierarchyにImage張り付けてOVRCameraRig配下に置く
ここまでの設定は以下のとおり、特にCanvasの設定が肝心です。
![canvas_Resources.jpg](https://qiita-image-store.s3.amazonaws.com/0/233744/7145fc8d-ab96-1e58-c3a8-6f90fce89da2.jpeg)

###（４）Imageの設定
![Image_set2.jpg](https://qiita-image-store.s3.amazonaws.com/0/233744/31698cc4-68d1-52f3-0e4d-470d18c8951e.jpeg)

###（５）ImageにC#Scriptを張り付ける
これは今までやったのと同じ。。。Assets－Create-C＃Scriptで追加。
そして、（６）のコードをコピペする。
それをImageにドラッグドロップする。
###（６）C#Scriptの中身

```GetSprite.cs
using UnityEngine;
using UnityEngine.UI;

public class GetSprite : MonoBehaviour
{
    Image image;
    //[SerializeField]
    //private Sprite sprite;
    int i = 30;
    // Use this for initialization
    void Start()
    {
        image = this.GetComponent<Image>();
    }
    public static Sprite Load(string fileName, string spriteName)
    {
        // Resoucesから対象のテクスチャから生成したスプライト一覧を取得
        Sprite[] sprites = Resources.LoadAll<Sprite>(fileName);
        // 対象のスプライトを取得
        return System.Array.Find<Sprite>(sprites, (sprite) => sprite.name.Equals(spriteName));

    }
    void Update()
    {
        if (Time.frameCount % 120 == 0)
        {
            i++;
            var sp = i.ToString();
            image.sprite = Load("", sp);
         }
    }
}
```
【参考】
①[【Unity】スプライト画像を読み込む方法](https://www.cg-method.com/entry/unity-c-sharp-get-sprite/)
②[ResourcesからスライスしたSpriteを取得する3つの方法 ](http://tsubakit1.hateblo.jp/entry/20131222/1387654182)
③[【Unity2D】Multiple Spriteを動的に変更する方法](https://qiita.com/2dgames_jp/items/ed79779893a69cfc17aa)
 
ちなみに
//[SerializeField]
//private Sprite sprite;
は、とりあえず実行するにはいらないが、デバッグするときのためにこの行を残している。
使い方は、この行を生かすとImageのGetSpriteのところにSpriteを入力する欄が出現して、そこに画像を入れれば、それが表示されることが確認でき、画像取得だけがうまくいっていないことが確認できる。
###（７）実行
特に問題なく実行できると思いますが、静止画が多いとエラーが出て、途中で止まってしまいました。単にメモリーが枯渇しただけかもしれませんが、止まるとProjectを再作成しないといけないので、手間です。
ということで、ほぼ５分で再作成できるようになりました。。。

以下YouTube動画へのリンクです。
[Unity：カテゴリ間変換Pix2Pixの-pngファイルから動画作成♬](https://youtu.be/-nAGFIzi1DE)
###まとめ
・静止画を集めて動画作成してみた
・Resourcesに入れておけば自由に静止画を使えます。
・これは配下にさらにFolder作って指定して持ってくることも可能です。

・当初、いろいろやった後にこの作業をやっていたときは、ResourcesといってもこのProject以外のCache配下のProjectのResources配下の画像を持ってきていて、その場合はディレクトリ指定できませんでした。この原因はいまだに不明です。
同じような状況になったら、新たに最初からProject作成してやり直すことが近道みたいです。
※Project作成のときにディレクトリ指定できるので、分かりやすいところにするのが良い

・静止画の属性を手動でDefaultからSpriteに変更しましたが自動的に変更したいと思います