2016-05-04 34 views
-1

我在處理一個簡單的問題時遇到了一些麻煩,我的2D圓形精靈會拍攝腳本,我知道它背後的想法,但我無法精確地編寫代碼。如何拉回2D拍攝精靈? (C#+ Unity)

我已經有一半人在使用Unity 2D資產中的憤怒的小鳥克隆腳本工作,但是依賴於另一個對象並且與一個彈簧關節相連,它以某種方式工作,但是如果我嘗試拍攝它慢慢地,在特定的角度,它會向後反射,而不是它打算去的方式。

此外,我需要腳本只是在球本身,以便當球停止移動時,它可以從該位置再次拍攝。

這裏就是我想的是解決方案,但不能制定出確切的代碼:

Mathf.Atan2(ballStartY - ballCurrentY,ballStartX - ballCurrentX)。那麼可以通過添加180來翻轉它?然後使用角度將其分解爲x和y分量(xSpeed = cos(angle)* force)和(ySpeed = sin(angle)* force)?

我還需要使用上點擊鼠標的位置就像我有發生移動球,使其運動它被點擊的同時,也鎖定它,所以你不能拉回來進一步比指定浮動金額。

我真的很感激你可以給的任何幫助!感謝大家!

回答

0

如果我理解正確,您有三個問題使對象移動,讓對象在停止時重新拋出,以及如何拉動對象以啓動它。

因此,對於第一個如果您旋轉球,以便當地繩索的x軸在您想要拍攝的方向,那麼您可以使用此代碼使球向前飛行, 。力量模式是衝動,因爲你想要瞬間的力量。

gameObject.GetComponent<Rigidbody>().AddRelativeForce(9,0,0, ForceMode.Impulse); 

旋轉應與看功能簡單。這樣的文檔是here,然後使用四元數函數旋轉180。您使用與mouse position得到的東西是這樣的:

rotation = Quaternion.Euler(180, 0, 0) * Input.mousePosition; 
transform.LookAt(Rotation); 

然後,只需使用一個如果發現如果你點擊來激活它。如果你想顯示其拉回使用Vector3.Distance與if語句,如:

if(Vector3.Distance(thisGameobeject, someParentObjectThatWontMoveWhenPulledBack)<50) 
{pull further back} 

至於檢查,如果你停止,你可以用Rigidbody.velocity使用if語句,這應該只是面面俱到。我希望這至少有一點幫助。

+0

哎謝謝您的建議,並感謝您儘快回覆我!但我有幾個問題。首先,我想知道如果父母是我需要依靠的,並且如果父母不會移動到我的球移動到一旦被射門的地方,我該如何再次投籃。另外我得到了你告訴我如何處理另一個腳本,雖然我不認爲一個LookAt函數可以工作,但我不確定所有這些腳本如何組合在一起,你能幫助更多一點嗎?在那個過程中?我真的很感激它! –

+0

只是它不顯示的球是父母。孩子是視覺對象。當你拉回來時,你用itween做一個動畫,或者只是快速和骯髒的拉回與鼠標位置直接相關,然後在拍攝時或兩者的混合物時跳轉到父母。所以兩者都是推出的,實質上兩者都是球。 –

+0

好吧,謝謝,我明白你的意思了。雖然我確定以相同的對象編程方式會更容易,但我願意嘗試一下。你能否給我一個整體劇本的例子?我對C#很陌生 –