線形代数の5つの小さな知識を恐れないでください

3956 ワード

線形代数の5つの小さな知識を恐れないでください


ゲームの開発を始めたばかりの頃は、直接コードしていましたが、Unityを使用している場合は、最初は線形代数を理解する必要もなく、Unityに内蔵されている関数でさまざまな機能を簡単に完成することができます.その後、一定のレベルに達すると、線形代数をUnity開発にどのように運用するかを理解し、クールな特性をロック解除すると、ゲームを修正してカスタマイズすることができます.しかし、最も頭が痛いのはこのような最初の段階で、この段階を乗り越えるために、私はあなたたちにいくつかの小さなテクニックとコードを教えて、それによってUnity開発の中で線形代数に対して正しい認識を持っています.

1.ベクトルとスケール


Unityでは,2 Dまたは3 D空間にベクトルを通して物体を移動させる必要がある.これらの操作の多くは、いわゆるオブジェクトのTransformを使用して行われます.Transformは、position(位置)、scale(サイズサイズ)、rotation(回転角度)などのオブジェクトの情報を保存します.ほとんどの場合、これらのアトリビュートはTransformに含まれ、ベクトルで表されます.例えば:gameObject.transform.positionは、3次元ベクトル(x,y,z)である、またはgameObjectを用いることができる目標の座標位置として理解することができる.transform.position.x,gameObject.transform.position.y,gameObject.transform.position.zで表す.Jsコードは以下の通りです.
var position:Vector3 = gameObject.transform.position;
var x:float = position.x;

2.ベクトルとフォースの追加


unityでは、リジッドボディにフォースを作成できます.たとえば、リジッドボディに1つまたは複数のフォースの結合力をシミュレートします.
フォースはベクトルで表すことができるので、フォースを追加し、フォースを計算してリジッドボディコンポーネントを持つゲームオブジェクトに適用することができます.jsコードは以下の通りです.
var v1:Vector3;
var v2:Vector3;
var v3:Vector3;
function Start ()
{
v1 = new Vector3 (0,0,1);
v2 = new Vector3 (1,0,0);
v3 = v1+v2;
}
function FixedUpdate ()
{
rigidbody.AddForce(v3);
}

3.ベクトルにスカラーを掛ける


Unityでは、オブジェクトを前に移動させることができます.しかし、前に移動すると、速度を設定する必要があります.unityは内蔵されたベクトル「transform.forward」(前方)を提供しているので、このベクトルにスカラー(数値)を乗じてオブジェクトがどのくらい進むかを指定することができます.これは、ベクトル「forward」のデフォルトサイズが1(単位ベクトルとも呼ばれる)であるためです.最初に述べたように,我々の速度はベクトルに基づいており,大きさは1(1 m/秒)で方向が前進している.したがって,速度サイズを増やして同じ方向を保つために,この方向が「forward」のベクトルに数を乗じることができる.コードは次のとおりです.
//The velocity is used to move the NPC forward
var velocity:Vector3;
function Update ()
{
//The player will be moving 1 meter forwards every second
//Time.deltaTime corresponds to the number of seconds elapsed since the last frame
transform.Translate(velocity * Time.deltaTime*1);
}

4.回転


スクリプトでゲームオブジェクトを回転させる必要がある場合があります.四元数とオーラ角を使用することができます.オブジェクトを回転します.通常は構文を使用します.「transform.rotation=Quaternion.Eular(x,y,z);」x軸に沿ってx度、Y軸に沿ってy度、z軸に沿ってz度という意味です.
簡単に言えば、これらの文は回転軸と角度を指定できます.前の例を使用して、「start」に回転を追加し、次のコードを取得します.
//The velocity is used to move the NPC forward
var velocity:Vector3;
function Start ()
{
//By default the player is looking in the direction of the positive z axis
//we rotate the player around the y axis so that its path crosses the NPC's field of view
transform.rotation = Quaternion.Euler(0,-45,0);
//we set the direction of the player using local coordinates
velocity = Vector3.forward;
}
function Update ()
{
//The player will be moving 1 meter forwards every second
//Time.deltaTime corresponds to the number of seconds elapsed since the last frame
transform.Translate(velocity * Time.deltaTime*1);
}

5.ポイント積


ポイント積は、これらのベクトル間の角度関係について真実に示すことができ、例えば、ポイント積は、2つのベクトル間の角度が−90度と90度であることを示し、ポイント積がゼロであることは、互いに垂直であることを示す.unityでは、内蔵されたVector 3クラスにより、ポイント積をより容易に使用できます.jsコードは次のとおりです.
var v1:Vector3 = new vector (1,1,1);
var v2:Vector3 = new vector (-2,-2,-2);
var productOfV1AndV2:float =vector3.Dot(v1,v2);

ポイント積は、ベクトルが一致しているか、同じ方向を指しているかを判断するためにも使用できます.最初から単位ベクトル(正規化ベクトル.サイズは1に減少します).
したがって、2つのベクトルが完全に同じ方向にある場合、点積は1になります.もし彼らが反対の方向であれば、点積は-1になります.これは,点積を計算するとき,2つのベクトルの大きさが1であれば,点積はこの2つの間の余弦角に等しいからである.角度が0度の場合、余弦は1に等しい.角度が180度の場合、コサインは-1で、これらのベクトルが一致している場合に便利になります.unityでは、次のようにすることができます.
var v1:Vector3 = new vector (1,1,1);
var v2:Vector3 = new vector (-2,-2,-2);
var productOfV1AndV2:float =vector3.Dot(v1.normalized,v2. normalized);

最初の2行は前のコードに似ています
3行目はv 1とv 2の点積を計算します.この例では、点積が-1(ベクトルが反対の方向を指す)に等しいことを示します.
http://mp.weixin.qq.com/s?__biz=MjM5NjM3NDA1Mg==&mid=207091712&idx=1&sn=49523bb102f1891ac0a601e636e858a9#rd
出典:www.unitymanual.com