読者です 読者をやめる 読者になる 読者になる

未踏作業日誌――余計なもの作るよ!

未踏の作業日誌的なものを書きましょうということで書くことにしました.余計なことばっかりしています.

ミクさんの眉毛をむにむに動かすだけの何かを作ってみた

Unityでミクさんの眉毛だけむにむに動かす物を作ってみました.

Unity Web Player | MMD Fukuwarai

 

f:id:grgsiberia:20140114173333p:plain

(ノブは4個しかないですが,リリース版は6個です)

 

どうやらオブジェクトをつまむ処理にバグがあったらしく,複数のノブを配置したら全部動いてしまいました.おまけにノブ本体を掴んでも動かず,ミクさんを触ると動くようになる.

よくよく考えると,ノブにColliderをつけていませんでした.とりあえずSphereColliderをノブにアサインしたら掴めるようになりました.

ただ,このままだとミクさんでも反応してしまうので,オブジェクトと視線との当たり判定を追加することにしました.RaycastHitの中身とtransformで比較して,同じなら掴んだことにする処理を付けるだけです.

ただ,もったいないのは,Raycast関数をオブジェクトの数だけ毎回呼ばなければならないので,リファクタリングするのであれば,マネージャクラスからメッセージを送るみたいな感じがベタなんじゃないかと.

 

まあ,それは置いといてだいたい形になってきたんじゃないかなと思います.コントロールパネル的なものを配置したかったのですが,パースとミクさんの顔の距離考えると調整が難しそうです.

もちろんミクさんの顔が画面に対して大きくなるほどかわいいのですが,それだとカメラに近づいてしまうので画角を絞るなり工夫が必要かもしれません.

 

次はスクリーンショットを撮ってTweetする機能をつけようかなと.問題はTweetボタンから画像を投稿できないことが発覚しているので,ちょっとこれをクリアするにはかなり苦労しそうです.

Tweetボタンを使えばTwitter APIへの接続や認証なしで投稿できます.しかし,Tweetボタンから画像を投稿する機能は存在しないので,何かしら画像投稿サービスに接続しなければなりません.画像を投稿したらそのURLを返信して,Tweetボタンへ動的に貼り付けるプログラムを書かなければ実現しないでしょう.

可能な限り,クライアント側で済ませたいものです.

 

一般的なアップローダへユーザエージェントを偽装して投稿し,投稿したファイルのアドレスを取得する,となると個人的にRubyが必要になってくるのでJSからの制御は難しいです.RubyのJS実装とかもあるそうですが,gemするのに時間がかかると思うのであまり良さそうではありません.

2つ目にAmazon S3を用意しておいて,AWS SDKのJS版を利用してアップロードする方法です.実はこれが今のところ一番シンプルな気がします.IPアドレスと投稿時間からハッシュを作成して,それをS3に投げるようにすれば,URLの取得とかも簡単なので苦労はしないでしょう.この方法の問題はSecret Keyが丸見えになるので,セキュリティ的に大丈夫なのかという話です.場合によっては任意のウイルスの仕込まれた画像をアップロードされかねません.一番簡単だとは思いますが悩みますね.

3つ目の方法はTwitterのユーザ認証を挟んでから投稿する方法です.ただし,Dropboxでセッションを保存できるとは思えないので,なんか失敗しそうです.どのみちこれはサーバが必要になってくるでしょう.

4つ目の方法はInstgramやTwitPicに直接投稿する方法です.これも認証を挟まなければなりませんが,捨てアカウント+捨て鍵を使って頑張って投稿するという方法になります.あまり賢くありませんね.

 

一番有望なのはS3を使うことです.他の方法は回りくどく,考慮する必要のある要素があまりにも多すぎます.正直なところ,鍵が丸見えになるのはあまり気が進みませんが,一番スマートな方法にも見えるので,この方法で実装してみようかなと思います.