2014年05月20日

「耳かきがしたい」リリース裏話

iWorksアプリ第8弾の「耳かきがしたい」が5/14にリリースされました。
IMG_1538.PNG
このアプリはただ耳かきをするだけという単純極まりないアプリです。ゲーム要素はありますが後付です。
開発は去年の夏頃から開始していましたが、技術的な問題が複数重なり延期していました。
コンセプトとして「耳の中に入って耳掃除ができたらどうか」という意味不明なスタートだったのも原因かもしれません。
耳かきアプリとしては「毎日の耳かき」というゲームがすでにリリースされていました。
ゲームでした。確かにこれはゲームです。収集要素もあり良く出来ていますが、耳かきとしてはどうでしょうか。
意見は色々ありますが、やはりリアルに行きたいと思いました。音もそうです。
最近耳かきボイスなるジャンルでYoutube等に増殖中でありますが、あの音はどうも許しがたい感じがありました。
たぶんボイスのほうがメインなのでしょう。私にボイスは必要ありませんでした。これらの思いがアプリを作らせたのです。

技術的な問題と言うのは、まず耳かきを3次元的にどのように操作するのかという問題です。
タッチパネルを使う場合、どうしても操作が平面的になりやすく自由に動かすのは非常に難しいところでした。
6軸の動き(前後左右ピッチロールヨー)をタッチパネルだけで再現するのは不可能と判断しました。
ということで、前後の動きを画面の特定部分で行い、耳道のカーブをパスに沿って移動する処理としました。
そして上下左右を同時に処理できるようマルチタッチで処理しました。さらに難しかったのは耳道の形が複雑であるということです。
これは耳かきの先端から上下左右にRaycastをだしてポイントを計算して当たり判定を処理しています。
ここまで来るのに試作は10を超えていたと思います。ロールは無しで決着しました。本来回転は必要だとおもうのですが、現在の設計では厳しいと思います。
また耳垢と耳道の当たり判定も困難を極めました。とにかく壁をすり抜けます。MeshColliderは使い物にならず、手動でBoxColliderを大量に配置したりもしました。しかしどれもうまく行かなかったのですが、最終的にSAColliderBuilderという神アセットでなんとかなりました。それでもすり抜けは起こります。
くだらない内容のアプリですが、技術的には非常に大変だったと言う話でした。

DL数は今のところ大したことはないのですが、マイナーなメディカルというジャンルでリリースしたのでランキングでは意外に目立っています。謎なのですが韓国のiPad無料メディカルで1位になったりしましたww 国内iPhone無料メディカルでは20位後半をウロウロしております。さて今後どうなるのでしょうw

posted by iworks2013 at 00:23| Comment(0) | App

2014年05月12日

UnityでIKを知る

私はこれまでいわゆる人物をUnityで使用することは無かったのですが、今後必要になってくると思うので色々と勉強することにしました。

人物の制御をUnityで行う場合、Mecanimと言う仕組みがありますがその中にIKと言う機能があります。

IKとは何なのか?
IKはインバースキネマティクスの略でそれだけだと何のことやらさっぱりという方が多いと思います。私もそうでした。
通常キャラクターを動かす場合、関節をそれぞれ曲げたりねじったりして動きを出すわけです。例えば肘を90°曲げるとか、手首を30°回転させるとかそんな感じですね。これをFK(フォワードキネマティクス)といいます。
IKと言うのは例えば、手のひらの位置を顔の正面から30cmの位置に持ってきたいとか、足を前方50cm高さ15cmの位置に持って行きたいというような目的のある動作を自動的に計算して関節の動きを計算してくれる機能です。

さて、Mecanimとは言うもののUnity上にMecanimと言う名前で機能が登場してきません。これは良くないことだと思うのですが、Unity上ではAnimatorと言う名前で登場します。初心者の人はここで躓くこともありそうです。

インバースキネマティクス (Unity Proのみ)
このオフィシャルの説明で理解できる人はかなりハイパーな人だと思います。
まずIKを使える条件ですが、「メカニムで正しく設定されたアバターのある【ヒューマノイド キャラクター】においてサポートされます。」と書かれています。
つまり、MecanimでHumanoidに正しく設定されたモデルでないとIKそのものが使えないということになります。これは重要です。今はユニティちゃんのような使いやすいモデルがあるので、まずはそれらを使って学習するのが良さそうです。

以下の動画ですが、これはFinalIKと言ってAssetStoreで販売されているものです。
MecanimのIKはここまで高機能ではありませんが、IK動作のイメージが最もよく分かる動画だと思います。


AnimatorでIKを動かす手順ですが、以下の通りです。
基本的なスクリプトは理解している前提で書いてます。

1.Mecanim(Animator)でHumanoidが正しく設定されたモデルデータを用意する。Unityちゃんでいいと思います。

2.サンプルシーンのモデルのAnimatorの中にControllerと言う項目があるので、ダブルクリックしてAnimatorを開きます。
WS000000.JPG

3.BaseLayerにIK Passの項目があるのでチェックを入れます。
WS000001.JPG

4.スクリプトのOnAnimatorIKでIK処理を呼び出します。

OnAnimatorIKの中で何が出来るのか。簡単に説明します。
基本はanimator.の後に続くメソッドで処理を行います。

【SetIKRotationとSetIKPosition】
この2つのメソッドで出来るのは、LeftFoot.LeftHand,RightFoot、RightHandの制御のみです。つまり両手両足の制御を行うためだけのメソッドです。これに合わせてSetIKPositionWeightと言うメソッドを組み合わせてIKの適用度を指定します(0適用なし→1MAXのように使います)

それ以外はどうすんの?それ以外はSetLookAtPositionと言うメソッドがあります。
SetLookAtPositionはVector3を引数に持ちますので、単純にその方向を向くということになります。
こちらも同じく、SetLookAtWeightという適用度を指定するメソッドと合わせて使用します。

【引数】
SetLookAtWeight(全体の適用度、体の適用度、頭の適用度、目の適用度、クランプ値)
0だと適用度0で1だと100%になります。
クランプ値で行き過ぎたりしないように途中で停止させる事ができます。


続きます(未定)


posted by iworks2013 at 11:55| Comment(0) | Unity