【问题标题】:Bullet not moving子弹不动
【发布时间】:2019-07-16 21:20:55
【问题描述】:

我正在使用 Unity 尝试我的第一个测试游戏,并且努力让我的子弹移动。

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

质量:1
阻力:0
角阻力:0,1
使用重力:0
是运动学的:0
插值:无
科尔。检测:离散

在子弹预制件上,我有这个脚本:

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 解决方案,但这对我也不起作用。

任何建议将不胜感激。

截图:

【问题讨论】:

  • 你的组件上有刚体吗?
  • @Jlalonde,是的。有,根据我的问题开始设置属性。
  • 你为什么使用AddForce而不是简单的rb.velocity = transform.forward * 100;
  • 啊,等一下,你是在 2D 中工作的,对吧?在这种情况下,transform.forward 将沿着向前/向后朝向屏幕的轴指向 - 即,它不会明显影响对象的位置。改用transform.right 之类的东西。
  • 实际上也......你会使用RigidBody2D而不是......你也会注意到你不能添加Vector3力而只能添加vector2力

标签: c# unity3d


【解决方案1】:

当您在 Unity 中处理 2D 时,主摄像机基本上变成了一个正交摄像机(无透视效果),沿 z 轴侧向观察游戏场景。顺便说一句,非旋转物体的“向前”方向也平行于 z 轴。

这意味着,当您沿 transform.forward 施加力时,您会将对象沿 z 轴发送 - 这对于朝同一方向看的正交相机来说是不可见的。此处的快速解决方法是使用转换为 x/y 轴运动的方向,例如 transform.uptransform.right

正如 derHugo 在 cmets 中也提到的那样,您可能想考虑使用 Rigidbody2D。有一些优化可以让它在 2D 游戏中表现得更好(尽管在你扩大对象数量之前你可能不会注意到它们)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 2021-12-31
    相关资源
    最近更新 更多