Kit2について、簡単なご紹介をしました。今回は、Oculusを使った簡単なゲームを作りながら、パフォーマンスの改善について触れていきます。■これから作るゲーム・自分に対して向かってくる物体(ダメージブロック)を避けるゲーム・物体に当たると自分がどんどんフィールドから押し出され、最後は床から落下する・Oculusを装着した状態で、首を傾けることでブロックを避ける■ベースPJを作成UnityでPJを新規に作成します。部品として、「Oculusのカメラ」「床」「ダメージブロック」を配置しています。配置した部品を元にプログラムで、ダメージブロックを動的に複製して、プレイヤーに向って飛ばす処理を以下のように作りました。0);}}}このプログラムで行っていることは、以下の通りです。・一定時間毎に、DamageBlockを複製してゲーム画面に配置します・時間経過とともに、プレイヤーに向ってブロックを移動します・ブロックがプレイヤーの横を通過して、さらに進んだら、不要となったブロックを消します・首が傾いている場合には、その方向に自分を移動しますカメラの傾きは、VR.InputTracking.GetLocalRotation(VR.VRNode.CenterEye);で取得できます。取得できる値は、カメラが水平であるときに0で、首を右に倒した場合はマイナス値に、左に倒した場合はプラス値になります。今回計算する際に不便でしたので、180度分補正をかけたうえで、左右にどの程度傾いているのか判断して、カメラを移動しています。■プログラムを実行するプログラムを実行すると、定期的に自分に向ってダメージブロックが飛んできます。ブロックがカメラに衝突すると、カメラが外に押し出されていき、最終的には床から落下します。■チューニング無事にダメージブロックが自分に向って飛んでくるようになりましたが、このプログラムにはいくつかの問題があります。・環境によって、Updateが実行される間隔が異なるので、挙動が実行環境依存である・ブロックの複製方法が、上述のプログラムではメモリ効率が悪いそこで、上述のプログラムを改良し、問題点を解消してみます。■Update周りの改善Updateでは実行される間隔が環境等に依存します。具体的には、毎フレーム実行される関数ですので、FPS=20の環境と、60の環境では、Updateが実行されるタイミングが3倍も変わってしまいます。このため、プログラム側で経過時間を元に、処理するタイミングを決定するように修正します。この変更を行うために、2つの改善を行います。内で経過時間を見て、自分で処理すべきタイミングかどうかを判断する⇒FixedUpdateの実行タイミングが、その時々で若干変わる部分を、プログラムにて吸収しますUpdate周りについて、改善したプログラムは以下の通りです。EXEC_INTERVAL;count++;execBlock();}}■ブロックの生成方法の改善Unityにおいて、Instantiate(ダメージブロックを動的に生成するために利用しているもの)は処理が遅いです。これは、Instantiateを行うと、テクスチャ読み込み処理が毎回実行されるからです。これを改善するために、[Prefab]という機能を利用します。この機能は、あらかじめ部品データをキャッシュしておいて、実際に使うタイミングで利用するというものです。テクスチャの読み込みが毎回走らなくなり、高速化を図れます。画面左下の、[Create]-[Assets]配下に、[Resources]-[Prefabs]というフォルダを作成します。※[Resources]フォルダ配下のものは、プログラムから動的に読み込むことができますので、上述のフォルダ名にします次に、今作ったフォルダの中に、[Hierarchy]の中に入っている、[DamageBlock]をドラッグ&ドロップで追加します[Hierarchy]には、[DamageBlock]が不要になるので削除します。追加したDamageBlockをプログラム内であらかじめロードしておいて、必要なタイミングでインスタンスを生成するように修正します。DamageBlockについては頻繁に生成&削除を繰り返しますので、削除のタイミングでガベージコレクションを走らせるようにします。この改善を行ったプログラムは、以下の通りです。改善後はFPSによらず、ブロックの速度が一定に改善されています。FPS30ただし、Prefab(キャッシュ)の効果を実感するには、今回のプログラムのように立方体の物体を、少量配置するだけでは、差がほとんどありませんでした。以下のように、Prefabを利用した方が高速に動作しました。今回利用したマシンでは、0.6秒の改善となりました。スペックの高いマシンで、たくさんの部品を配置するようなケースでは、更なる改善が見込めます。■最後にここまでご覧いただいてありがとうございました。コメントをキャンセルメールアドレスが公開されることはありません。BlogFeathersFeathersHTMLJavaScript。