こんにちは世界(Hello World)

#こんにちは世界(Hello World)
THE SEED ONLINEを眺めていた皆さん。
いつかはプログラムを仕込んだVCIを作ってみたいと思ったことでしょう。
ほとんどの人がまずは「Hello World」から入ります。（入るよね？）
「Hello World」表示させてみましょう。

#VCIはどんなプログラム言語？
VCIではLuaと呼ばれるプログラム言語（スクリプト言語）を使用しています。
ただし純粋なLua言語ではなく、一部使用不可の命令文が存在します。
基本的に気にしなくて問題ありませんが、詳しくは公式を参考にしてください。
そのほかにもプログラムの書き方や、VCI特有の記述についても書いていますので参考になります。
*https://virtualcast.jp/wiki/vci/script/reference*

**・レッツ作成**
　箱作りのオブジェクトを流用して作成していきましょう。
　「VCI　Object」内にある、
　「Script Enable Debugging」にチェックを入れましょう。後々デバッグに必要になります。
　「サイズ」は「1」
　「Source」に「print("Hello World")」
![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/c7e9a3cf-7108-6e7f-b809-a957273493fb.jpeg)

　VCIに出力すれば完成です。
![2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/6b26937f-3725-e1e0-89e5-13b7da95096d.jpeg)

**・何も表示されない？**
　ごめんなさい、「print」で記入した文字はデバッグコンソール上に表示されます。
　バーチャルキャストのリングメニューより、「システム」→「VCIデバッグ」→「コンソール表示　」
　これで「Hello World」を表示させることが出来ました。
![3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/81a74577-63d2-076e-7302-822ceff99680.jpeg)

**・テキストオブジェクトを追加**
　これではウィンドウだらけで困ったことになります。
　ちゃんとテキスト表示出来るようにしましょう。
　「VCI」→「テキスト」を選択しましょう。
![4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/17319d98-5ad7-8a29-9cc9-8774e058bbd4.jpeg)

※TMPのインポート
　初めて「テキスト」を選ぶと下のような表示が出ます。
![5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/cb9bf350-9348-9805-64ba-7ab16efb72ee.jpeg)
　「Import TMP Essentials」と「Import TMP Examples&Extras」をクリックしましょう。

**・テキストの設定**
　良い感じに大きさと配置をしましょう。
　トランスポートの目安として箱オブジェクトと密着させるより少し浮かせるのが良いでしょう。
　また、「Font Sizu」の「5」は大きすぎるので「1」にしておきましょう。
　VCI出力しましょう
![6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/14c2a3b7-77b9-c97c-2e4f-84f99a5de9f4.jpeg)

**・VCI**
　「システム」→「インベントリ更新」したのち、再度アイテムを出現させましょう。
　はい、テキストを書き換えるプログラムが入っていないので「VCI]と表示されました。
![12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/e7e544eb-7741-b581-a6eb-a1601c4f9e99.jpeg)

**・デバッグしよう**
　C:\Users\「ユーザー名」\AppData\LocalLow\infiniteloop Co,Ltd\VirtualCast\EmbeddedScriptWorkspace
　を見てみましょう。
　この中には「Script Enable Debugging」が有効になっているアイテムのスクリプトファイルが出力されています。
　「VCI Object」の「Title」で設定したフォルダーがあるはずです。
　「_main.lua」を「main.lua」にファイル名を書き換えましょう
![16.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/d7803d4c-609d-f7ff-ba8f-ad2b29ef1df3.jpeg)

**・中身の確認**
　「main.lua」の中身を確認すると、「Source」に記入したとおり、

```
　print("Hello World")
```
　と書いてあります。

**・書き換えよう**

```
--print("Hello World")
vci.assets._ALL_SetText("Text","hello world")
```
　と書き換え、保存しましょう。
　箱に「hello world」と表示されました。
※ちょっと解説。
　「--」この行は無効（コメントアウト）する。

　「vci.assets._ALL_SetText("Text","hello world")」
　この命令文は、ヒエラルキーで「Text」と名前付けしたオブジェクトに対し、
　「hello world」と全員が見えるように書き換えると言う意味です。

**・ここまで来たらいっそのこと時計表示させよう。**
　今度はこのように書き換えましょう。

```
function update()
 vci.assets._ALL_SetText("Text",os.date())
end
```
　はい、時計が出来ました。
![13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/5b51487d-0301-9734-c765-010e447819e8.jpeg)
※ちょっと解説。
　function update()～end は、VCIを出したユーザーが毎フレーム処理するイベント関数です。
　ここで、「os.date()」関数により、PC時刻を「Text」に書き出しています。

**・改良しよう**
　見切れているし、秒数がないので少し残念です。
　改善しましょう。

```
function update()
 vci.assets._ALL_SetText("Text",os.date("%Y年%m月%d日\n%H時%M分%S秒"))
end
```
　はい、見切れてはいますが良くなりました。
![14.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/f26c96c1-af1b-0ec2-3987-2de356effd4f.jpeg)
※ちょっと解説。
　なんとなくわかると思いますが、%Yは年、%mは月、%dは・・を表示しろという命令です。
　間の「\n」は改行しろという命令です。

**・さらに改善しよう**

```
function update()
 vci.assets._ALL_SetText("Text","<size=0.6>"..os.date("%Y年%m月%d日\n%H時%M分%S秒"))
end
```
　これで良い感じになりました。
![15.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/b9aee8e4-7ea1-cc79-0d40-879a5d8dd2eb.jpeg)
※ちょっと解説。
　＜size=0.6＞はフォントサイズを「0.6」へ変更する命令です。
　関数と関数、または文字と関数等のつなぎとして「..」を間に挟みます、そのため
　"＜size=0.6＞"..os.date("%Y年%m月%d日\n%H時%M分%S秒"
　と記入する必要があります。

#終わりに
くぅ～疲れました。
今回のカレンダーではLuaに触れるつもりでは無かったですが
さすがに思いつくネタがなかったので書きました。
はじめてUnityを触る人向けにこれまで記事を書きました。
これらの記事をとっかかりにし様々なVCIを作成できるようになっていただければ幸いです。