分123立方体を中心に三角関数でカメラを回すつぎは,カメラを動かそう。立方体を真ん中にして回るようにする。記憶のよい読者は,前回第6回の「スカイボックスの中にドーナッツ型を置く」の項で行ったと思い出したかもしれない。おさらいばかりではつまらない。引出しを増やす意味でも別のやり方を使ってみよう。カメラの向きは後に回し,立方体を中心として水平に円を描くように動かす。円軌道の座標は,三角関数のsinとcosで求める。sinθ)と定められている(図3⁠)⁠。sinθ)ということだ(※2⁠)⁠。すると,原点からの距離と角度をもとに,円周上のxy座標はつぎの式で導かれる。sinθ)では,カメラはどうやって立方体に向ければよいか。動かすたびに,カメラに対してDisplayObject.lookAt()メソッドを呼び出せばよい(第6回の「スカイボックスの中にドーナッツ型を置く」の項を参照⁠)⁠。カメラを動かす関数(setCamera())は,つぎのように定めよう。引数にはCameraオブジェクトと距離および角度を渡す。Mathクラスの三角関数を使うので,角度の単位はラジアンとする。角度)前掲コード1は,つぎのように手直しする。カメラを動かす関数(setCamera())は,まず初期設定の関数(initialize())から呼び出す。距離と角度は変数(distanceとangle)に定めた。-90度)は立方体の手前正面になる。アニメーションの関数(rotate())が,経過時間(timeStamp)に応じて角度を増し,そのたびにカメラを動かす関数が呼び出される。camera.lookAt(ORIGIN);}この機会に,描画領域(view)の幅と高さは変数(stageWidthとstageHeight)に定めた。0x0);}これで,立方体を3次元空間の真ん中に捉えつつ,カメラがその周りを回る(図4⁠)⁠。手を加えた後のスクリプト全体は以下のコード2のとおりだ。お題の土台ができたといえる。camera.lookAt(ORIGIN);}すでに述べたとおり,このようなカメラの動きは前回と同じようにTransform.moveBackward()メソッドを用いてもできる。三角関数を使うことで,何か得はあるのだろうか。sinとcosを使って楕円軌道を描くこともできる。その場合には,x座標とy座標それぞれを求める距離の大きさを変えればよい。試しに,前掲コード2のカメラを動かす関数(setCamera())で,座標を求める式の一方につぎのように比率(0.5)を乗じてみる。すると,カメラは楕円軌道を動くので,立方体に近づいたり離れたりすることになる(図5⁠)⁠。Transform.moveBackward()メソッドで後ろに下げようとすれば,その距離を求めなければならず,三角関数を使わざるを得ない。それなら,初めから三角関数でカメラそのものを動かすほうが早い。楕円軌道を回るとカメラは箱に近づいたり離れたりする※2これは三角関数のsinとcosの定義だ。直角三角形の辺の比で覚えた人も多いかもしれない。この図で理解した方が応用の幅は広がる。興味のある読者は,「⁠sinとcosは何する関数?」を読んでほしい(15分間のビデオでも解説している⁠)⁠。