2018-4-18

モデルビューワーメモ

雑な技術メモ

勉強のために、モデルを回転・拡大・移動させる簡易ビューワーを作成した。

GitHub Pages

その際に詰まったことや学んだことのメモ。

マウスの座標を取得

Input.mousePositionで取得可能。

ウィンドウの左下を(0, 0, 0)として現在のマウスポインタのピクセル座標を Vector3 として返却。(z は常に 0)

C#には static なローカル変数が無い

JavaScript とか C#で static ローカル変数の代わり - Qiita

一応上記のように無理やり同様の事をやることはできるが、素直にフィールドに変数用意してやるほうが素直でいいと思う。

Quaternion の合成に関して

とあるオブジェクトの角度を(90, 90, 0)にしたい場合

this.transform.rotation = Quaternion.Euler(90, 90, 0);

とやると、当然(90, 90, 0)になる。

ところが、

this.transform.rotation = Quaternion.Euler(0, 45, 0);
this.transform.rotation = Quaternion.Euler(90, 0, 0) * this.transform.rotation;
this.transform.rotation = Quaternion.Euler(0, 45, 0) * this.transform.rotation

とやると目的の角度にならない。

これは実際に指を使って「X 軸中心に 45 度回転し、Y 軸中心に 90 度回転した後、更に X 軸中心に 45 度回転」という事をやってみると直感的には理解できた。

ただまだ直感的な理解しか出来ていないので、ひとまず「Quaternion の*演算子による合成は、直感と異なる結果になりやすいので極力避ける」という形で対応することに。

ローカルで HTTP サーバーを用意

Node.js のhttp-serverを使えばいい

DOTween でなめらかに動かす

DOTween をふわっとまとめてみた - Qiita

カメラを初期状態に戻す際に使用。jQuery の animate や CSS Animation みたいな感じで手軽に使える。

基本ワールド座標を基準に行われ、ローカル座標を基準に行いたい場合はDOLocalMove等 Local をつける必要があるので注意。