在玩家面前射击子弹C#

时间:2016-05-07 20:28:53

标签: c# unity3d

我试图实例化一个' bullet'在播放器前面(脚本附加到的游戏对象)。我试过(正如我在其他线程中看到的那样),但是没有用:

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

问题是子弹有一个始终击中玩家的对撞机,因为在一定的旋转中,子弹在玩家后面产生:/,所以我需要在他面前产生它。这就是我推动它的路线:

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

1 个答案:

答案 0 :(得分: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。这是您在游戏开始时实例化一组项目符号然后一遍又一遍地重复使用它们的地方。这样可以节省不必要的大量内存。