Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Unityで“外積”を使い倒す

2025年09月08日に「Qiita」が公開したITニュース「Unityで“外積”を使い倒す」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Unityの「外積」は、2つのベクトルに垂直なベクトルを求める計算のこと。オブジェクトがどちらを向いているか、他のオブジェクトの左右どちらにあるかといった位置関係の判定に利用でき、3Dゲームのキャラクター制御などで広く活用される。(116文字)

出典: Unityで“外積”を使い倒す | Qiita公開日:

ITニュース解説

Unityをはじめとする3Dゲームエンジンで開発を行う際、オブジェクトの位置や向き、動きを制御するために「ベクトル」という数学的な概念が不可欠である。特に、3D空間における方向や回転を扱う上で非常に強力なツールとなるのが「外積」計算だ。外積は、2つのベクトルから、それら両方に対して垂直な3つ目のベクトルを算出する演算である。この性質を理解し使いこなすことで、3Dプログラミングの表現力は格段に向上する。

外積の最も基本的な性質は、2つのベクトルが作る平面に対して直角なベクトルを生成することである。例えば、地面を表す平面上にベクトルaとベクトルbが存在する場合、この2つのベクトルの外積を計算すると、地面に対して垂直に突き立つ、真上もしくは真下を向いたベクトルcが得られる。UnityではVector3.Cross(a, b)という関数でこの計算を実行できる。

外積で得られるベクトルの「向き」は、座標系の種類と引数の順番によって決まる。Unityが採用しているのは「左手系」座標である。これは、左手の親指をX軸の正方向、人差し指をY軸の正方向に向けると、中指が自然とZ軸の正方向を指す座標系だ。この左手系のルールに基づき、Vector3.Cross(a, b)の結果のベクトルは、ベクトルaからベクトルbの方向へ左手の指を曲げたときに、親指が指す向きとなる。したがって、引数の順番を入れ替えたVector3.Cross(b, a)は、元の結果とは正反対の向きを持つベクトルになる。この引数の順序が結果の向きを反転させるという性質は、外積を応用する上で極めて重要である。

外積で得られるベクトルの「大きさ(長さ)」にも重要な意味がある。その大きさは、元の2つのベクトルaとbが作る平行四辺形の面積に等しくなる。この性質から導き出される重要な応用として、2つのベクトルが平行であるかどうかの判定がある。もしベクトルaとbが同じ向きか、あるいは真逆の向きを向いている場合、それらが作る平行四辺形は面積が0になる。つまり、外積の結果は長さが0のベクトル、すなわちゼロベクトルとなる。この特性を利用すれば、2つのオブジェクトが正確に同じ方向を向いているかなどをプログラムで判定できる。

この外積の性質は、3Dゲーム開発の様々な場面で応用される。例えば、3Dモデルを構成するポリゴン(通常は三角形)の向きを決定する際に外積が使われる。三角形の任意の2辺をそれぞれベクトルとみなし、その外積を計算することで、そのポリゴン面がどちらを向いているかを示す「法線ベクトル」を求めることができる。この法線ベクトルは、光源からの光がどのように反射するかを計算するために不可欠であり、オブジェクトの陰影を正しく描画するために用いられる。

また、キャラクターの相対的な方向を計算するのにも外積は役立つ。例えば、キャラクターの前方方向を示すベクトルと、空間における絶対的な上方(ワールド座標のY軸正方向)を示すベクトルがあるとする。この2つのベクトルの外積を計算すると、キャラクターから見た「右」方向を示すベクトルを正確に得ることができる。これにより、プレイヤーの入力に応じてキャラクターを真横に移動させたり、キャラクターの周囲を周回するカメラの制御を実装したりすることが可能になる。

さらに、2つのベクトルがなす角度の回転方向を判別する際にも外積は活躍する。UnityのVector3.Angle関数は2つのベクトル間の角度を0から180度の範囲で返すが、一方のベクトルからもう一方のベクトルに到達するために時計回りに回転すべきか、反時計回りに回転すべきかの区別はできない。ここで外積を用いると、この回転方向を特定できる。例えば、プレイヤーの前方ベクトルと、プレイヤーから敵への方向ベクトルの外積を考える。この計算結果のベクトルが上向きなら敵は右側に、下向きなら敵は左側にいる、と判定できる。Unityに用意されているVector3.SignedAngle(from, to, axis)関数は、まさにこの原理を利用して、指定した軸周りの回転方向を加味した符号付きの角度を返す便利な機能である。

このように、外積は単なる抽象的な数学演算ではなく、3D空間におけるオブジェクトの姿勢制御、相対的な位置関係の把握、回転方向の決定など、極めて実践的な問題解決に貢献する。外積の「2つのベクトルに垂直なベクトルを生成する」という基本原理を理解し、その向きと大きさの意味を把握することで、より高度で直感的な3Dプログラミングが実現できるだろう。

関連コンテンツ