C#でcharをASCIIコードに変換したり戻したりする方法
ASCIIコードにする方法
(int)変換したい文字
ASCIIから戻したい場合
(char)ASCIIコード
例
char foo = 'A'; Debug.Log ((int)foo); // ==> 65 char bar = ((char)65); Debug.Log (bar); // ==> A
C#でファイルの読み書きの方法
Read
StreamWriter writer = new StreamWriter(path); writer.Write(value); writer.Close();
- pathは保存したいファイルのパス
- Unityとかだと『Application.streamingAssetsPath + "/" + filename』みたいな
- valueは保存したいデータ
Write
StreamReader reader = new StreamReader(path); string value = reader.ReadToEnd(); reader.Close();
- 上記と同じ
- ファイルが隠しファイル(Hidden属性をもっている場合)はReadはできるがWriteはできない
EasyMovieTextureで動画をポーズ/再開させる
前回のポストの続きになります
portaltan.hatenablog.com
前回は起動したら単純に一回だけ再生するというシンプルすぎるアプリでしたが、今回は自前のスクリプトを貼りつけて、ユーザの入力に応じてポーズなどの処理をできるようにしましょう
1. デフォルトのスクリプトの再生設定を削除
- Sphere100のMedia Player CtrlのInspector上でStr File Nameの項目を削除します
(これで自動再生されなくなります)
2. 自前のスクリプトの作成
- 今回はEasyTest.csという名前にしました
using UnityEngine; using System.Collections; public class EasyTest : MonoBehaviour { public MediaPlayerCtrl EasyMovieTex; void Start () { EasyMovieTex.Load ("slider.mp4"); EasyMovieTex.Play (); } }
3. スクリプトをSphere100へ貼りつけます
- EasyTest.csスクリプトをhierarchyビューのSphere100へD&Dで貼りつけます
- Inspector上のEasyTest(Script)で、Easy Movie TexにSphere100をアサインします
ここまでで以前同様に起動したら一回だけ再生する状態になりました
4. ポーズ処理の追加
再生中にスペースを押したらポーズし、ポーズ中にスペースを押すと再開するような処理をUpdate内に書いていきます
using UnityEngine; using System.Collections; public class EasyTest : MonoBehaviour { public MediaPlayerCtrl EasyMovieTex; void Start () { EasyMovieTex.Load ("slider.mp4"); EasyMovieTex.Play (); } void Update () { if (EasyMovieTex.GetCurrentState ().ToString () == "NOT_READY") { Debug.Log ("Preparing"); } else if (EasyMovieTex.GetCurrentState ().ToString () == "END") { Debug.Log ("Finished"); } if (Input.GetKeyUp (KeyCode.Space)) { switch (EasyMovieTex.GetCurrentState ().ToString ()) { case "PLAYING": EasyMovieTex.Pause (); break; case "PAUSED": EasyMovieTex.Play (); break; } } } }
以上です。
最初の4行は再生の準備中と終了時にはログを表示させています
EasyMovieTextureでGearVR用の360動画アプリを作成する
Unityには標準でMovieTextureという動画を再生する機能がありますが、この機能はAndroidには対応していないので、GearVRでは利用できません。
UnityでGearVRの360動画アプリを作成する方法はいくつかあるようですが、現在はEasyMovieTextureというassetを利用して作成することが主流なようです。
https://www.assetstore.unity3d.com/jp/#!/content/10032
以下はEasyMovieTextureの使い方の簡単な説明です
1. EasyMovieTextureのimport
まずはEasyMovieTextureをimportします
- 2016/07/07現在65ドルです
- importすると動画再生に必要なコンポーネントやデモシーン、デモ動画がプロジェクトにimportされます
2. EasyMovieTexture Editor Mode(beta)のimport
EasyMovieTextureによる動画機能は、Unityのシミュレータで確認することができません。
つまりどういうことかと言うと、確認には毎回Andoridにプロジェクトを書き出して実機で確認する必要があります。
これは凄い手間だったのですが、現在は作者様がベータ版としてUnityのEditor上でシミュレーションできるUpgrade packを用意してくださったので、こちらもダウンロードしてimportしておきます
3. 360動画の用意
Equireqtagular形式の360動画を用意し、Assets/StreamingAssetsにimportします
- 配置先はここでないといけません
- Unity標準のMovieTextureのようにimport時に変換は行われません
- 今回はTheta公式サイトからダウンロードしてきた滑り台の動画を使用します
4. 動画を投影する天球マテリアルの準備
Blenderとかでも自分で作れるようですが、私は以下のサイトで公開してくださっている天球マテリアルを利用させて頂いています
No hack, no work • UnityとOculusで360度パノラマ全天周動画を見る方法【無料編】
- Sphere100.fbxをimport
- importしたSphere100をHierarchyビューへD&D
- Scaleを適当に100, 100, 100とかに拡大
5. Texutureの設定
このままでは天球自体の影が出来て動画が暗くなってしまうので、Texutreの種類をStandardからUnlit/Textureへ変更します
6. 動画スクリプトの貼りつけ
EasyMovieTexture/Scripts/MediaPlayerCtrlをHierarchyビューのSphere100へ貼りつけます
貼りつけるとInspectorにMedia Player Ctrlという項目ができます
ここでちょっとややこしいのですが、HierarchyビューのSphere100自身をTargetMaterialという項目にD&Dします
7. 再生する動画の指定
次にStr File NameにStreamingAssets以下に配置した再生したい動画ファイル名を入力します
- 拡張子も必要です
8. 確認します
ここまでで再生の準備は完了したので再生してみましょう
以下のように360動画が再生されることが確認できます
今回はただ単純にアプリを起動したら1回だけ再生するという単純なアプリだったので、次回はポーズなど動画操作をする方法を載せたいと思います
Oculus Rift DK2からCV1に変えたらUnityで認識しなくなった([VRDevice] Initialization of device oculus failed)
問題
Oculus Rift DK2で今まで開発をしていたのですが、そろそろCV1に変えようということで以下の公式サイトからインストーラをダウンロードしてセットアップは無事完了したのですが、UnityがCV1を認識してくれなくなりました。
Oculus Rift Setup | Oculus
エラーメッセージを見ると以下のようなエラーが出ていました
[VRDevice] Initialization of device oculus failed
解決法
その1
Unityをupdateする
5.3.2とか5.3.3では使用しているOVRPluginが古いらしくCV1を認識してくれません
2016/6/22現在最新の5.3.5を利用すると認識されるようになります
その2
Pluginだけ最新のものに入れ替える
どうしてもUnityのversionをあげたくない場合は、OculusのHPから最新のOVRPluginをダウンロードしてUnityのディレクトリに配置しましょう
https://developer.oculus.com/downloads/game-engines/1.3.2/OVRPlugin_for_Unity_5/
配置先はデフォルトの場合
C:\Program Files\Unity\Editor\Data\VR\oculus
です
ansible実行時のオプションTips
特定のサーバにのみ実行したい場合
-l <実行したいhost>
例
ansible-playbook playbook_example.yml -l 192.168.33.11
特定のHostsグループのみに実行したい場合
-l <実行したいhostグループ>
例
hostsファイル
[web] 192.168.11.11 192.168.11.12 [storage] 192.168.11.21 192.168.11.22
ansible-playbook playbook_example.yml -l storage
指定したタクスからはじめたい場合
--start-at <タスク名>
例
ansible-playbook playbook_example.yml --start-at='install package'
1タスクずつ確認しながら実行したい場合
--step
タスク毎に引き続き実行するか確認が入る(y/n/c)
- y: 実行
- n: スキップして次のタスクへ
- c: キャンセル
playbookの確認
--check
実際に実行はせずテストが出来る
sudo のパスワードを実行時に指定する方法
-K
vagrant環境などsudoのパスワード入力が要求されない場合はいらないが、実際の環境では当然パスワード入力が必要になるのでこのオプションで指定する
指定したタクスのみ実行したい場合
playbookの中でtagsを指定し、実行時にタグ名で指定する
--tags=<タグ名>
例
playbook
- hosts: webserver sudo: yes tasks: - name: download package get_url: url: https://hogehoge.deb dest: /usr/local/src/hogehoge.deb validate_certs: no tags: - download - name: install package command: dpkg -i /usr/local/src/hogehoge.deb tags: - install
実行オプション
ansible-playbook playbook_example.yml --tags=download ansible-playbook playbook_example.yml --tags=install
grafanaでAPIを使ってCUIからダッシュボードを作成する方法
CUIから
2. jsonファイルの作成
ダッシュボードの設定ファイルをjsonで作成します
名前はなんでもいいです(今回はtest.json)にしました
{ "dashboard": { "id": null, . . . }, "overwrite": false }
3. APIからダッシュボードの作成
コマンドは
curl -H "Authorization: Bearer {YOUR_AUTH_KEY}" http://{YOUR_GRAFANA_ADDRESS}/api/dashboards/db -H "Accept: application/json" -H "Content-type: application/json" -X POST -d @{JSON_FILE_NAME}
例
curl http://192.168.33.13:3000/api/dashboards/db \ -H "Authorization: Bearer hogehogehogeohgeohgeohgeohgoehgoehgoeg" \ -H "Accept: application/json" \ -H "Content-type: application/json" \ -X POST -d @test.json
問題なく作成が完了すれば
{"slug":"ダッシュボード名","status":"success","version":0}
と表示されます。
以上で完了です
4. 確認
以下のコマンドでダッシュボード情報も取得できます
curl -H "Authorization: Bearer {YOUR_AUTH_KEY}" http://{YOUR_GRAFANA_ADDRESS}/api/dashboards/db/{DASHBOARD_NAME}