UNITY3D兩個物體相對位置、角度、相對(duì)速度方向
2019/4/9      點擊:
using UnityEngine;
using System.Collections;// 兩物體相對位置判斷、追蹤相(xiàng)對速度方向、朝向等(děng)計算方向(xiàng)以及角(jiǎo)度
public class Direction : MonoBehaviour {
    public Vector3 V1;
    public Vector3 V2;
    void Start()
    {
        // 為了方便理解便於計算,將(jiāng)向量在 Y 軸(zhóu)上的偏移量設置為 0
        V1 = new Vector3( 3, 0, 4);
        V2 = new Vector3( -4, 0, 3);        // 分別取(qǔ) V1,V2 方(fāng)向上的 單位向量(隻是為了方便下麵計算)
        V1 = V1.normalized;
        V2 = V2.normalized;        // 計(jì)算向量 V1,V2 點乘結(jié)果
        // 即獲取 V1,V2夾角(jiǎo)餘弦    cos(夾角(jiǎo))
        float direction = Vector3.Dot(V1, V2);
        Debug.LogError("direction : " + direction);        // 夾(jiá)角方向一般(bān)取(0 - 180 度)
        // 如果取(0 - 360 度)
        // direction >= 0 則夾角在 (0 - 90] 和(hé) [270 - 360] 度之間
        // direction < 0 則夾角在 (90 - 270) 度之(zhī)間
        // direction 無法確定具體角(jiǎo)度        // 反餘弦求V1,V2 夾角的弧度(dù)
        float rad = Mathf.Acos(direction);
        // 再將弧度轉換為角度
        float deg = rad * Mathf.Rad2Deg;
        // 得到的 deg 為 V1,V2 在(0 - 180 度的夾角)還無法確定V1,V2 的相對夾角
        // deg 還是無法確定具(jù)體角度        // 計算向量 V1, V2 的(de)叉乘結(jié)果
        // 得到垂直於 V1, V2 的向量, Vector3(0, sin(V1,V2夾角), 0)
        // 即 u.y = sin(V1,V2夾角(jiǎo))
        Vector3 u = Vector3.Cross(V1, V2);
        Debug.LogError("u.y  : " + u.y);        // u.y >= 0 則夾角(jiǎo)在 ( 0 - 180] 度之間
        // u.y < 0 則夾角在(zài) (180 - 360) 度之間
        // u.y 依(yī)然無法確定具體角度        // 結合 direction >0 、 u.y > 0 和 deg 的值
        // 即可確定 V2 相對於 V1 的夾角
        if (u.y >= 0) // (0 - 180]
        {
            if (direction >= 0)
            {
                // (0 - 90] 度
            }
            else
            {
                // (90 - 180] 度
            }
        }
        else    // (180 - 360]
        {
            if (direction >= 0)
            {
                // [270 - 360]
                // 360 + (-1)deg
            }
            else
            {
                // (180 - 270)
            }
        }        Debug.LogError(deg);
    }
}
- 上一篇(piān):unity3d角度偏移計算方法(fǎ) 2019/4/9
 - 下一篇:UNITY3D 腳本實現鼠標控製物(wù)體旋轉 2019/4/9
 
