一. 爲物體施加一個向上的力, 使物體的重力和上升力平衡
/// <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;
}
}