ユニティの数字を詳細に回転方向を説明します

多くの文字の回転があります。

本明細書中で使用される回転四元方法を説明

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);
    }
}

このとき、関係なく、走行シーンオブジェクトの回転の最後のシフトの方向は白い線が遅くなりますどのくらいの問題ではありません。

ここに画像を挿入説明

公開された62元の記事 ウォンの賞賛5 ビュー3912

おすすめ

転載: blog.csdn.net/qq_42194657/article/details/103731509