Unity實用腳本片段總結

一. 爲物體施加一個向上的力, 使物體的重力和上升力平衡

    /// <summary>
    /// 爲物體施加一個向上的力, 使物體的重力和上升力平衡
    /// 9.81f爲Unity中的重力加速度
    /// </summary>
    void FixedUpdate()
    {
       GetComponent<Rigidbody>().AddForce(Vector3.up * 9.81f * (GetComponent<Rigidbody>().mass));
    }

二. 檢測扇形角度

Debug.DrawLine來繪製兩條紅色的線,用來顯示所在的區域。

//目標位置與當前位置的距離
float distance = Vector3.Distance(target.transform.position, transform.position);
//返回向右旋轉30度的四元數
Quaternion right = transform.rotation * Quaternion.AngleAxis(30, Vector3.up);
//返回向左旋轉30度的四元數
Quaternion left = transform.rotation * Quaternion.AngleAxis(30, Vector3.down);
Vector3 n = transform.position + (Vector3.forward * distance);
//旋轉30度後的向量
Vector3 leftPoint = left * n;
Vector3 rightPoint = right * n;
//繪製射線進行顯示
Debug.DrawLine(transform.position, leftPoint, Color.red);
Debug.DrawLine(transform.position, rightPoint, Color.red);

三. 球形插值 - 太陽升降

public class Sunrise2Sunset : MonoBehaviour
{
    public Transform sunrise;
    public Transform sunset;

    // 日出到日落的時間
    public float journeyTime = 1.0f;

    // 動畫開始時間
    private float startTime;

    void Start()
    {
        startTime = Time.time;
    }

    void Update()
    {
        // 圓弧的中心
        Vector3 center = (sunrise.position + sunset.position) * 0.5F;

        // 將中心向下移動一點
        center -= new Vector3(0, 1, 0);

        // 相對於中心的弧線插值
        Vector3 riseRelCenter = sunrise.position - center;
        Vector3 setRelCenter = sunset.position - center;

        // 到目前爲止發生動畫的部分是經過時間 / 所需時間
        // 總旅程
        float fracComplete = (Time.time - startTime) / journeyTime;

        transform.position = Vector3.Slerp(riseRelCenter, setRelCenter, fracComplete);
        transform.position += center;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章