概要ゲームでは様々なオブジェクトが描画されていますがこれらのオブジェクトはその場にとどまっていることは少なく、プレイヤーや敵などは様々な方向に移動します。移動処理の結論を書くと移動とは「現在の座標と違う座標に変更する」ことです。座標を変更することで、私たちが見ている画面上ではオブジェクトが1フレーム前とは違う位置に描画されるので私たちにはオブジェクト移動しているように見えます。移動処理の方法には「別の座標を代入する」「ベクトルを加算する」等があります。前提知識このページでは以下の項目の知識があることを前提に書いていますので確認をお願いします。別の座標を代入する別の座標を代入する方法は今の座標とは全く関係のない新しい座標を代入することでオブジェクトを移動させる方法です。この方法はオブジェクトを画面上に出現させる時(座標の初期化)やワープなどで使用します。以下のコードは量を減らした内容で処理を書いてます。player.m_PosY);}}ベクトルを加算する移動量を加算する方法は今の座標に対してベクトルを加算して移動処理を行います。一般的な移動処理はこちらを指します。ゲームの仕様次第でオブジェクトは様々な方向に移動することになります。シューティングゲームの自機の移動なら「上下左右キーを押すことで、押したキーの方向に自機が移動する」アクションゲームの敵なら「プレイヤーの方向に向かっていく」などです。これらの移動処理はベクトルという移動量を用意して、その移動量を今の位置に加算して描画位置を更新しています。ベクトルベクトルには「方向と大きさ」が含まれています。PLの作成してくれる移動関係の仕様にもその情報が含まれているはずです。以下の例はプレイヤーの移動に関する挙動の仕様です。この仕様のベクトルの情報を置き換えると以下のようになります。ベクトル意識の有無ベクトルは仕様によってきちんと意識して使わないとPLの意図した挙動とは異なった動作になります。意識しなくていいケースベクトルを意識しなくていいケースはオブジェクトが斜め移動しない場合です。敵の挙動で「一定の間隔で左右にスピードの値の分だけ移動する」という仕様だった場合、X軸に対してのみ移動する仕様ということがわかります。Y軸やZ軸に対して移動することがないのでベクトルを意識することなくX軸に対してスピードを加算、減算しても問題なく動作します。意識をする必要があるケースベクトルを意識するケースはオブジェクトが斜め移動をする場合です。上下左右キーをユーザーが押した方向にスピードの分だけ移動する仕様になっています。この時、上下キーと左右キーが同時に押された場合は斜め方向に移動するとしたら、ベクトルを意識する必要があります。プレイヤーの移動速度を2として、ベクトルを意識せずに実装した場合のコードは以下のようになります。speed;}このコードで下キーと右キーを同時に押した場合、プレイヤーは斜めに移動するので方向としては問題ありませんが大きさに問題が生じます。斜め移動した場合のベクトルの大きさ(移動量)は以下のようになります。√のままだとわかりづらいので、√をはずします。予定よりも大きく移動してしまいます。指定された移動量にするには単位ベクトルにして方向のみを抽出し、その情報に大きさ(移動量)を反映させます。normal_y;}これで、PLが望んだ移動量とほぼ同じ値で移動できます。ベクトルを意識しないケースの意識しない理由ベクトルを意識しないケースはX、Y、Z軸の1軸に対してのみ向きを指定します。移動量の計算で出たベクトルと同じ結果になります。移動量をかけるという方法をとらなくてもよくなっています。探している内容が見つからなかったら以下のサイトにあるかもしれません。筆者が開発にかかわらせてもらったアプリのリンクです。