【UiPath】見えないRPAロボットに受肉してみた

RPAロボットはソフトウェアなので実体が無く姿が見えません。
PCの画面上で次々にアプリケーションを起動して操作してくれる様は映えるんだけど、宗教における仏像とかキリスト像と同じように、姿を具現化した偶像が無いと私のような大衆は**イマイチ萌えない**わけです。

というわけで、今回は姿の無い**RPAロボットに受肉を試み**ようと思います。
【目に見える姿を与えたRPAロボットのイメージ】 
![gxvdemo.gif](https://qiita-image-store.s3.amazonaws.com/0/255097/fc3391c2-6b71-8807-1732-8c9d0e92f8d9.gif)
名前はとりあえずUmemaruから取って**ウメ子**にします。

# まず肉体＝デスクトップマスコットを作る
利用するソフトウェアは以下。個人利用なら全部タダで使えます。
お絵かき：GIMP
モーション付け：Live2D（[Live2D Cubism 3 FREE](https://www.live2d.com/ja/download)）
アプリ化：Unity（[Unity Persional](https://store.unity.com/ja) ）

受肉する手段は何でもいいのですが、個人的にLive2Dに興味があったので今回チャレンジ。Unity用に強力なSDKが用意されているのもポイント。
デスクトップマスコット自体の作り方だけでかなりのボリュームなので、そこはLive2DやUnityに詳しい人の記事にお任せして、ここでは簡単に手順だけ紹介。
![umeko.png](https://qiita-image-store.s3.amazonaws.com/0/255097/fd78eef2-f6e6-f323-5f31-15e610301f0a.png)
1. GIMPで動かす部位毎にレイヤー分けしてパーツを描く
2. 全部のパーツが出来上がったらPSDにエクスポート
3. PSDをLive2D Editorに読み込んで動くモデルを作る（[公式チュートリアル](https://docs.live2d.com/cubism-editor-tutorials/psd/)）
4. 作ったモデルにLive2D Animatorでモーションをつける（チュートリアル＋[公式マニュアル](https://docs.live2d.com/cubism-editor-manual/animation-preparation/)）
5. UnityにLive2D SDKをロードし、Live2Dから出力したファイルをインポート→Asset化される
6. UnityでSDKコンポーネントを活用しつつ、追加でスクリプト書いたりAnimatorで動作を制御する
7. モデルの背景を透過するために [Unity_TransparentWindowManager](https://github.com/XJINE/Unity_TransparentWindowManager) パッケージを利用
8. Windowsアプリケーション用にビルドしてデスクトップマスコット完成
![unity.png](https://qiita-image-store.s3.amazonaws.com/0/255097/b1e6ace7-7816-93af-c89d-86fac4c93ca7.png)
Live2D公式で動作保障してるPSD作成ソフトはPhotoshopとCLIP STUDIOの２つですが、別にGIMPでもいけます。ただテクスチャアトラス作成時に解像度の修正が必要だったので、コメントに要望いただければその部分も追記します。

# ロボットマスコットの状態遷移
今回は超簡単に、こんな状態遷移でマスコットを動かします。
![transition.png](https://qiita-image-store.s3.amazonaws.com/0/255097/eea364e4-ac5b-2e37-c4ff-b9059520cd53.png)
オートメーションが動いてなければ居眠り、動いている間はランダムでモーション動かし、終わったら次の実行までまた居眠りに戻る。動いているはずのタイミングで寝てたら、何かのトラブルで止まっている事がわかるというわけです。

この状態遷移をUnityで実装するのですが、オートメーションが実行中かどうかを判断する必要があります。

# UiPathロボットプロセスを監視する
UiPathロボットがオートメーションを実行している間は"UiPath.Executor.exe"というプロセスが上がっているので、その有無を条件判断に使います。

UnityのAnimatorにisRunningというbool型のパラメータを用意して、それをExecuting（活動）⇔Sleep（居眠り）のtransitionのConditionsに使います。
![animator.png](https://qiita-image-store.s3.amazonaws.com/0/255097/9a3f8a47-ec21-8090-de6f-269aea65e636.png)

で、UiPath.Executorを監視するスクリプトをGameObjectにアタッチすればＯＫ。

```UiPathProcessController.cs
using UnityEngine;
using System.Diagnostics;

namespace UiPathController
{
    /// <summary>
    /// UiPathのProcessに応じてGameObjectの状態遷移を行う
    /// </summary>
    public class UiPathProcessController : MonoBehaviour
    {
        Animator animator;

        private void Start()
        {
            animator = GetComponent<Animator>();
        }

        void Update()
        {
            try
            {
                foreach (Process p in Process.GetProcesses())
                {
                    if (p.ProcessName.Equals("UiPath.Executor"))
                    {
                        animator.SetBool("isRunning", true);
                        break;
                    }
                    else animator.SetBool("isRunning", false);
                }
            }
            catch
            {
            }
        }
    }
}
```

#できた
というわけで無事にロボットへの受肉を終えたため、その様子を動画にしてみました。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">見えないRPAロボットに受肉してみた（Qiita掲載用）<br>この子がウチのUiPathです。<br>基本寝てますが、オートメーションの実行中だけ動きます。<br>（受肉にあたりLive2DとUnityにお世話になりました） <a href="https://t.co/kAHJr9zftp">pic.twitter.com/kAHJr9zftp</a></p>&mdash; Umemaru (@UmegayaRollcake) <a href="https://twitter.com/UmegayaRollcake/status/1077910835798761472?ref_src=twsrc%5Etfw">2018年12月26日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

まあ自宅だとしょっちゅうオートメーションを動かすわけじゃないから、ほとんど寝てるんですが。

このウメ子、せっかく作ったので今後いろいろな場面で活躍してもらおうと思います。
→2019/01/13 早速Youtube動画に登場してもらいました。
　[オートメーション作成10箇条](https://youtu.be/wP9iQhjIWNQ)
過去の[週アスのLive2D紹介動画](https://weekly.ascii.jp/elem/000/000/281/281785/)を真似て、ゲームパッドの操作で表情やモーションを切り替えられるようにしました。私の代わりに画面に登場してUiPathネタを解説するのが主な仕事です。

---
今回はここまで。
デスクトップマスコットを作るのに、平面イラストを3Dっぽく動かせるLive2Dという技術を使いました。

このLive2D、2010年頃からいくつかのゲームに使われるようになって、最初に存在を知った時は
「何その中途半端な技術ﾌﾟｰｸｽｸｽ」
とか笑ってましたが、改めて[公式サイト](https://www.live2d.com/ja/products/cubism3)を訪れてみると・・・

すみません大変素晴らしい技術です。世界中の二次元に住む人々に夢を与えてくれます。個人ならFREE版使えるし、公式のチュートリアルビデオもあるので一人で勉強できます。
Unityもそうですが、個人でタダで勉強できて好きに使える点はUiPathと同じですね。こういう製品大好きです。