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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章