2015-05-27 35 views
0

我有一個球,有一個最初的爆發力,將其發射到空中。理想情況下,這個球將能夠轉向目標,同時不斷失去這種開始的勢頭。在朝向目標邁進時不應該獲得任何速度。如何在不增加力度或速度的情況下將剛體移向目標?

重要!它也可以反彈牆壁,這也減少了它的勢頭。

在物理系統中建立的統一模式非常適合將物體扔到牆壁上並以非常自然的方式看到它彈跳,我想保持這一點但輕輕地將它推向目標。

我發現的大多數解決方案(特別是尋的導彈)都會增加連續的力量,如果它們是自供電的,這很好。

在一個腳本這之前我會用

ballRigidbody.Addforce(targetDirection, ForceMode.Impulse); 

那麼我想它使用「運動」類來操縱給球的說... 100力。

下面是球的一個例子不斷加入的力量,因此它更像是一個火箭推(不是我了!)

public class Movement : MonoBehaviour { 

[Header("Get Components")] 
[SerializeField]Transform targetTransform_gc; 
[SerializeField]Transform ballTransform_gc; 
[SerializeField]Rigidbody ballRigidbody_gc; 
[Header("Settings")] 
public float turnSpeed; 
public float ballSpeed; 
//Private 
private Vector3 targetDirection; 
private Quaternion targetRotation; 


void Update() { 
    targetDirection = targetTransform_gc.position -ballRigidbody_gc.position;  
    targetDirection.Normalize(); 
    targetRotation = Quaternion.LookRotation(ballRigidbody_gc.velocity); 
    ballTransform_gc.rotation = Quaternion.Slerp (ballTransform_gc.rotation, targetRotation , turnSpeed * Time.deltaTime); 
} 
void FixedUpdate(){ 
    ballRigidbody_gc.AddForce(targetDirection * ballSpeed); 
    ballRigidbody_gc.velocity = new Vector3(ballRigidbody_gc.velocity.x, 0, ballRigidbody_gc.velocity.z); 
} 
} 

我會,如果任何人有一些非常感激指針或建議。

非常感謝!

+0

我想你正在尋找一種叫做「衝動」的物理事物。 – Almo

+0

嗨Almo,感謝您的評論。在固定更新中將力量改變爲衝動(targetDirection * tankShellSpeed,ForceMode.Impulse);不是我正在尋找的東西。這仍然有完全相同的問題。我會清楚地說明,在我的文章中已經加入了一個力量。 – Jim

回答

1

如果我正確理解你,你正在改變方向,但不是你的速度矢量的大小。您可以使用獲得的電流大小在3個維度:

double magnitude = Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y,2) + Math.Pow(z, 2)); 

然後你可以只乘以這個幅度

編輯

大小的球和目標之間的點單位向量的矢量總是使用下面顯示的公式計算出來的。幅度是矢量的總長度,忽略方向。

單位向量只是在給定方向的矢量指向,用1

的幅度在這一點上你有你的幅度,這是你要如何快速去,和你的單位向量,這是你想去的方向。將這兩個值相乘得到一個向量,既是您想要的方向又是速度。

+0

是的,謝謝。這就是它。我用這個來代替Mathf.Sqrt(MathR.Pow(ballRigidbody_gc.velocity.x,2)+ Mathf.Pow(ballRigidbody_gc.velocity.y,2)+ Mathf.Pow(ballRigidbody_gc.velocity.z,2)); 如果你能給我一個關於爲什麼可以工作的速成班,那就太好了,我對數學並不擅長。我沒有完全理解爲什麼我需要三維空間而不是僅僅使用ballRigidbody_gc.velocity。量級 – Jim

+0

@Jim看到我的編輯爲如何工作的簡要說明。 – pquest

+0

@Jim使用velocity.magnitude也應該工作。我沒有意識到這是對所討論對象的價值(我沒有太多的統一經驗) – pquest

相關問題