多くの文字の回転があります。
本明細書中で使用される回転四元方法を説明
Quaternion.LookRotation(Vector3 dir);
Quaternion.Lerp(Quaternion a, Quaternion b, float t);
まず、我々はユニティのベクターを導入する前に理解する必要があるのVector3
まず、次のようにスクリプトユニティ、Unityは描かれて調整します作成します
座標の位置0,0,0起源図白いボール
コードは以下の通りであります:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[ExecuteInEditMode]
public class DirTest : MonoBehaviour {
// Update is called once per frame
void Update () {
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
Debug.DrawLine(new Vector3 (0, i, j), new Vector3 (10, i, j), Color.red);
Debug.DrawLine(new Vector3 (i, j, 0), new Vector3 (i, j, 10), Color.blue);
Debug.DrawLine(new Vector3 (i, 0, j), new Vector3 (i, 10, j), Color.green);
}
}
}
}
第二には、の2つの小さなボールのF1、F2を作成してみましょう
F2 F1へ左へ右
第三に、我々は黒い線を描かれた2つのボールの間に描かれた白いボール直線で調整し、ベクトルが黄色の線の二つの小さなボールで表されます。
スクリプトは2、P1トランスフォームP2を追加します
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[ExecuteInEditMode]
public class DirTest : MonoBehaviour {
/// <summary>
///
/// </summary>
public Transform p1;
/// <summary>
///
/// </summary>
public Transform p2;
// Update is called once per frame
void Update () {
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
Debug.DrawLine(new Vector3 (0, i, j), new Vector3 (10, i, j), Color.red);
Debug.DrawLine(new Vector3 (i, j, 0), new Vector3 (i, j, 10), Color.blue);
Debug.DrawLine(new Vector3 (i, 0, j), new Vector3 (i, 10, j), Color.green);
}
}
Debug.DrawLine(Vector3.zero, p1.position);
Debug.DrawLine(Vector3.zero, p2.position);
Debug.DrawLine(p1.position,p2.position, Color.black);
Vector3 dir = p1.position - p2.position;
Debug.DrawLine(Vector3.zero,dir, Color.black);
Debug.DrawLine(Vector3.zero,dir, Color.yellow);
}
}
結果は以下の通りであります:
ここでは、ブラックとイエローの線の大きさの方向を見つける同じであるが、位置が異なっています
私たちが行う必要があるの横にある黄色の線方向にオブジェクトを回転させるオブジェクトを作成します
黄色ラインの終わりに(0,0,0)ベクトルの方向である:黄線方向であります
なぜなら回転Yは以下に示す構成に0及びyにので、ここでIイエローライン単位ベクトルベクトルの大きさの座標値を検討する必要はありません
したがって、回転我々の目的に向かってある白線単位ベクトルのルート
回転オブジェクトを作成します。
コードは以下の通りであります:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[ExecuteInEditMode]
public class DirTest : MonoBehaviour {
/// <summary>
///
/// </summary>
public Transform p1;
/// <summary>
///
/// </summary>
public Transform p2;
/// <summary>
/// 物体
/// </summary>
public Transform p3;
// Update is called once per frame
void Update () {
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
Debug.DrawLine(new Vector3 (0, i, j), new Vector3 (10, i, j), Color.red);
Debug.DrawLine(new Vector3 (i, j, 0), new Vector3 (i, j, 10), Color.blue);
Debug.DrawLine(new Vector3 (i, 0, j), new Vector3 (i, 10, j), Color.green);
}
}
Debug.DrawLine(Vector3.zero, p1.position);
Debug.DrawLine(Vector3.zero, p2.position);
Debug.DrawLine(p1.position,p2.position, Color.black);
Vector3 dir = p1.position - p2.position;
dir.y = 0;
Debug.DrawLine(Vector3.zero,dir, Color.black);
Debug.DrawLine(Vector3.zero,dir, Color.yellow);
Debug.DrawLine(Vector3.zero,dir.normalized, Color.white);
p3.rotation = Quaternion.Lerp(p3.rotation,Quaternion.LookRotation(dir.normalized),Time.deltaTime * 3f);
}
}