在Unity2D中,使用力使实例化的对象以一定角度行进很麻烦

时间:2018-08-04 13:15:51

标签: c# unity3d

我正在使用Unity2D进行第一个项目,所以我是新手,正在学习!。我有一个玩家,当他获得“多重射击”能量提升时,我希望子弹发射三向射击:一个水平,向上30度和向下30度。我最初是用3D完成此项目的,然后在意识到那是我应该做的地方之后转换为2D的。 multishot的代码以前可以使用,但现在不起作用。我也在常规游戏对象上进行了测试,它旋转了对象,然后施加力使其移动30度。我对为什么这种方法不起作用感到非常困惑,并且花了很多小时试图弄清楚这一点之后,我很茫然。另外,我还尝试创建一种2D物理材质,并将摩擦力更改为零,并认为这些小精灵会粘在一起。仅供参考,克隆的子弹确实会旋转,但仍会继续水平射击(不是30度)。所有3个克隆一起向右移动,一个克隆是水平的,一个克隆旋转+30度,另一个克隆旋转-30度。我也尝试了AddRelativeForce,但没有成功。下面的代码显示了我的multishot方法。在我看来,该力仍在全局范围内施加,而不是相对于旋转对象的局部坐标系施加。我所做的所有研究和我做过的小测试都说这应该有效。如果有人可以让我对此有所了解,我将非常感激。

private void FireMultishot()
 {
     StartCoroutine(Cooldown());

     //Play the sound when the bullet is fired.
     AudioSource.PlayClipAtPoint(fireBulletSound, Camera.main.transform.position);

     GameObject Temporary_Bullet_Handler = Instantiate(Bullet, Bullet_Emitter.transform.position, Bullet_Emitter.transform.rotation) as GameObject;
     GameObject Temporary_Bullet_Handler1 = Instantiate(Bullet, Bullet_Emitter.transform.position, Bullet_Emitter.transform.rotation);
     GameObject Temporary_Bullet_Handler2 = Instantiate(Bullet, Bullet_Emitter.transform.position, Bullet_Emitter.transform.rotation) as GameObject;

     //Rotate the top and bottom bullets by 30 degrees.

Temporary_Bullet_Handler1.transform.Rotate(Vector3.forward * 30);

Temporary_Bullet_Handler2.transform.Rotate(Vector3.forward * -30);

     //Tell the bullet to be "pushed" forward by an amount set by Bullet_Forward_Force.
     Temporary_Bullet_Handler.GetComponent<Rigidbody2D>().AddForce(transform.right * Bullet_Forward_Force);
     Temporary_Bullet_Handler1.GetComponent<Rigidbody2D>().AddForce(transform.right * Bullet_Forward_Force);
     Temporary_Bullet_Handler2.GetComponent<Rigidbody2D>().AddForce(transform.right * Bullet_Forward_Force);

     //Basic Clean Up, set the Bullets to self destruct after 3 Seconds.
     Destroy(Temporary_Bullet_Handler, 3.0f);
     Destroy(Temporary_Bullet_Handler1, 3.0f);
     Destroy(Temporary_Bullet_Handler2, 3.0f);
 }

1 个答案:

答案 0 :(得分:0)

transform.right不是Temporary_Bullet_Handler1.transform.right

前者是您的玩家的变换,并且您对所有三个项目符号都使用了相同的值。