2016-05-07 74 views
0

我正在嘗試在玩家前面實施一個'子彈'(該腳本附加到gameobject)。我試過(正如我在其他線程看到的),但不工作:在玩家C前面射擊子彈#

GameObject bulletobj = Instantiate (bulletFired, transform.position + transform.forward * 2, Quaternion.identity) as GameObject; 

的問題是,子彈具有撞機總是打的球員,因爲在一定的旋轉後面的玩家子彈產卵:/,所以我需要在他面前產卵。這是我作出propulse它的線條:

var mousePosition = FindObjectOfType<Camera>().ScreenToWorldPoint (new Vector3 (Input.mousePosition.x, Input.mousePosition.y, Input.mousePosition.z - FindObjectOfType<Camera>().transform.position.z)); 

bulletobj.GetComponent<Rigidbody2D>().velocity = (mousePosition - transform.position).normalized * bulletSpeed * Time.smoothDeltaTime; 

在此先感謝球員:d

回答

0

你想以停止使用Physics.IgnoreCollision(實際讀取的文檔爲這對你以後就省事)子彈擊中發射它的玩家。

GameObject bulletobj = Instantiate (bulletFired, transform.position + transform.forward * 2, Quaternion.identity) as GameObject; 
Physics.IgnoreCollision(gameObject.GetComponent<BoxCollider>(), 
         bulletobj.GetComponent<BoxCollider>())); 

這裏假設你有兩個對象連接了BoxColliders。您必須根據您附加的對撞機的類型來更改此設置。

編輯:我覺得我應該添加,像這樣實例化大量對象效率非常低。如果你剛剛開始使用團結,只是想要得到一些工作,然後繼續這樣做。如果您想以正確的方式進行操作,請查看object pooling。這是你在遊戲開始時實例化一組子彈的地方,然後重複使用它們。這可以節省不必要的大量內存。

+0

不錯,我會試試看:D謝謝 – Ay0m4

+0

把這個後 - Physics.IgnoreCollision(GetComponent ,bulletobj.GetComponent ); - 我得到「參數'#1'不能將'方法組'表達式轉換爲鍵入'UnityEngine.Collider'」 – Ay0m4

+1

哎呦,我的錯字。在兩個'GetComponents'之後添加括號。現在檢查我的答案我編輯它 –