子弹不动

时间:2019-02-22 18:14:00

标签: c# unity3d

我正在与Unity一起进行我的第一个测试游戏,并且努力使子弹移动。

我有一个名为“子弹”的预制件,带有RigidBody组件,具有以下特性:

  

质量:1
  拖曳:0
  角阻力:0,1
  使用重力:0
  运动学:0
  插值:无
  Coll。检测:离散

在子弹预制板上,我有以下脚本:

public float thrust = 10;
private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();

    rb.AddForce(transform.forward * 100, ForceMode.Impulse);
}

在我的playerController脚本上(我知道这不是最好的地方):

if (Input.GetAxisRaw("Fire1") > 0)
{
    var proj = Instantiate(projectile, transform.position, Quaternion.identity);
}

当我单击鼠标时,项目符号会被创建,但不会移动。我已将速度添加到刚体中,这是可行的,但我无法使其沿正确方向移动。谷歌搜索之后,似乎我需要使用我做过的rigidBody.AddForce(),但仍然无法移动子弹。

我看过other解决方案,但这对我也不起作用。

任何建议将不胜感激。

屏幕截图:

enter image description here

1 个答案:

答案 0 :(得分:0)

在Unity中使用2D时,主摄像头基本上变成了正交摄像头(没有透视效果),沿z轴侧向观看游戏场景。顺便说一下,未旋转对象的“前进”方向也平行于z轴。

这意味着当您沿transform.forward施加力时,您是沿z轴发送对象-在相同方向上观看的正交摄影机将看不到该对象。此处的快速解决方案是使用转换为x / y轴运动的方向,例如transform.uptransform.right

正如derHugo在评论中也提到的那样,您可能想研究使用Rigidbody2D。有一些优化措施可以使它在2D游戏中表现更好(尽管您可能不会注意到它们,除非您扩大对象数量)。