まず最初に書いておくと、この方法は失敗作だ。
単純にパフォーマンスが良くないし、精度も今ひとつ。
だけど、同じ過ちを犯す人がいるかもしれないから、メモに残しておく。
ちなみに、こんな感じになる。一応リアルタイム。
画像はSweetSpotの見せられないよアイコンより。
少し前からあった自分好みのアセットで、制服・パジャマ・道着のような物から、ボロボロにされた服やバスタオル一枚、スク水ニーソ・セーラー服の下にスク水といった、マニアックな物も入ってる逸品。
モーションも格闘から会話・移動等々、非常に良い感じ(62種類?多すぎて分からん)
Aoi Character Pack
あ、ちなみにバスタオルの中は黒塗りです。つまりシュレティンガーのぱんつ。
この方法、やってる事はすごく簡単だ。
- Mesh Coliderをリアルタイムに更新
- パンツにコライダーを設定
- パンツへ向けてRaycastを飛ばす
- 当たれば見えてるので、「みせられないよ」を出す
1、Mesh Coliderをリアルタイムに更新。
これは単純で、SkinnedMeshRendererのBakeMeshでメッシュをベイクして、それをMeshColiderへ流し込んでる。この方法はパフォーマンスをアホみたいに消費するけど、一応はリアルタイムでメッシュコライダーを動かすことが出来る。
とりあえずこのままだと凄くしんどいので、数フレームに1回動かすことにした。なので、AOIちゃんの前蹴りで見えてしまうパンツには対応できない。
bakedMesh = new Mesh();
mesh = transform.GetComponentInChildren<SkinnedMeshRenderer>();
meshCollider = GetComponent<MeshCollider>();// 中略
mesh.BakeMesh(bakedMesh);
meshCollider.sharedMesh = null;
meshCollider.sharedMesh = bakedMesh;
また、スカートは実際は透明色で破いていたので、その辺りも考える必要があった。例えば、ヒットしたコライダーがMeshColiderなら、そのメッシュのUVから色を取り出して、色が透明だったら再送する等々。RaycastAllでも良い。
2,パンツにコライダーを設定
次にパンツにコライダーを設定する。パンツの位置はHipの位置から少し下にした。しかし、これが意外と難問で、コライダーの大きさを小さくするとパンツが見えてしまうし、コライダーの大きさを大きくすると見えてないのに「みせられないよ」が出てしまう。
なので、スカートの上のような位置には大きめのコライダーを設定し、特定の角度でないと「みせられないよ」が出ないようにした。正直、この辺りでメッシュコライダー要らなくね?と思い始めたが、ふとももは見えてるがパンツは見えない状態もあるので、一応残した。
ちなみに、パンツは割と下の方に配置している。理由は簡単で、下から覗いた時に反応しやすいように。ローアングラー!
3、パンツへ向けてRaycastを飛ばす
単純にカメラからパンツの位置へRaycastを飛ばしてるだけ。
正しくは、パンツがカメラの位置を取得してカメラの位置からRaycastを飛ばしてる。
Rayの設定はこんな感じ。
そう、面積に対してRayを飛ばしていないので、ここでも穴がある。Ray ray = new Ray(cameraTransform.position, target.position - cameraTransform.position);
面積に大して飛ばしていれば、もう少しパンツのコライダーを小さくしても何とかなったかもしれない。
4,パンツの位置に「見せられないよ」を出す
まずパンツの位置のスクリーン座標を出す。その座標にGUI Textureを出すだけ。なので、近づくと「みせられないよ」が非常に大きくなってしまう問題がある。
実際は、カメラ方向へ「みせられないよ」をビルボードとして表示する方法の方が良さそうだ。
transform.position = Camera.main.WorldToViewportPoint( target.position );
ちなみに、「みせられないよ」の位置は若干右上にずれているので、単純に表示しただけでは位置がずれてしまう。この対策は、一旦スクリーン座標(0/0)へ移動した後に、Pixel Insetで中心にしたい物が左下になるように調整するのが楽だ。
と、ここまで作って色々と考えた結果、もっと良さそうなアイディアがあるんじゃないかと思う。例えば「パンツ判定用テクスチャを作り、それを別途レンダリング・判定を行う」とか、「足の位置から見える範囲を計算する」等々。
それに、実際は東京大学・五十嵐研究所の開発したこだわり物理エンジン(アニメ的に見栄えの良いようにスカートの中を隠したりポリゴンを歪めたりする物理エンジン・Unityで使用可能)でスカートの中が見えないように上手くごまかす方法もある。
色々と案があるが、とりあえず来週の日曜日にでも試してみよう。
この記事では他のアイディアや不明点、あと最近のアニメでよく見る「謎の光」の画像などを募集しています。何かあれば@tsubaki_t1やこの記事のコメント欄まで。