如何在 Unity 3d 中為飛行相機創建碰撞?防止相機掉入場景中的物體。我的相機腳本片段:
public class FlyCamera : MonoBehaviour
{
void FixedUpdate()
{
if (!isAlternative)
SetCameraMovement();
}
private void SetCameraMovement()
{
lastMouse = Input.mousePosition - lastMouse;
lastMouse = new Vector3(-lastMouse.y * camSens, lastMouse.x * camSens, 0);
lastMouse = new Vector3(transform.eulerAngles.x lastMouse.x, transform.eulerAngles.y lastMouse.y, 0);
if (Input.GetMouseButton(1))
transform.eulerAngles = lastMouse;
lastMouse = Input.mousePosition;
GetBaseInput();
transform.position = Vector3.Lerp(transform.position, NewPosition, Time.deltaTime * movementTime);
}
private void GetBaseInput()
{
Speed = Input.GetKey(KeyCode.LeftShift) ? superSpeed : mainSpeed;
if (Input.GetKey(KeyCode.W))
NewPosition = transform.forward * Speed;
if (Input.GetKey(KeyCode.S))
NewPosition = transform.forward * -Speed;
if (Input.GetKey(KeyCode.A))
NewPosition = transform.right * -Speed;
if (Input.GetKey(KeyCode.D))
NewPosition = transform.right * Speed;
}
}
uj5u.com熱心網友回復:
最好LateUpdate()按照檔案中的建議讓您的相機移動。
使用剛體和碰撞器正確設定碰撞檢測。檢查檔案,以便您可以正確檢測沖突。
檢查“注意:碰撞事件僅在其中一個碰撞器還附加了非運動學剛體時才會發送”,因此您的相機可以是一個沒有剛體的游戲物件,以便您可以自由飛行和碰撞。
我的情況下,您可能需要相機的物理行為,并且您希望它也表現得像剛體我會使用剛體.SetPosition而不是 with來設定相機運動transform.position = new Vector3(),因為您需要選擇在幾何或物理世界中設定變換. 此外,您還需要取消選中重力選項以防止墜落。
uj5u.com熱心網友回復:
如果你想實作一個類似 RTS 的飛行相機,你可以將相機設定為一個類似小車的父物件,并讓它一直看著那個物件:
Object (Camera Dolly) -> 這被 wasd 移動并旋轉到所需的視角
子物件:Camera -> 只有相機的 position.y 會改變
然后,在 Update()中小車上的自定義腳本上,從小車向相機發送LineCast。當演員擊中碰撞器時(在這里使用例如標簽很重要,因此它不會與世界上的任何東西碰撞,例如單位),逐漸(隨著時間的推移)減少相機的位置。如果沒有被擊中,逐漸增加它所需的高度。它不會完全阻止相機剪切較大的物體,而是移動它,使其不會停留在對撞機的“內部”。類似的東西也通常用于 RPG 第三人稱相機。
如果需要更多說明,請告訴我!
編輯:不過,我只會對非常大的視線阻擋物件這樣做,而不是針對地形或較小的建筑物/單位 - 至少如果您的目標更像是 RTS 或模擬游戲。
Edit2:在太陽系設定中,它有點復雜。幾個選項:
在平移相機之前,對所有天體 SphereCollider執行SphereCast(在所需的(最終)移動方向,球體半徑為到任何物體的最小允許距離),并將“NewPosition”設定為最近的 hitPoint 減去所需的最小允許距離一個天體。還要在這里添加一些邊距,這樣相機就不會卡住。這將是一種連續的碰撞檢測方法。
每次平移相機后,對所有天體執行CheckSphere(允許球體半徑到任何物體的最小距離),只要有任何命中點,隨著時間的推移,將相機位置移出它。這是一種看起來“更柔和”的方法,但如果你飛得非常快,它仍然可以夾在什么東西上。
您可以在 LateUpdate() 中同時執行這兩項操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/388821.html
