我正在与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解决方案,但这对我也不起作用。
任何建议将不胜感激。
屏幕截图:
答案 0 :(得分:0)
在Unity中使用2D时,主摄像头基本上变成了正交摄像头(没有透视效果),沿z轴侧向观看游戏场景。顺便说一下,未旋转对象的“前进”方向也平行于z轴。
这意味着当您沿transform.forward
施加力时,您是沿z轴发送对象-在相同方向上观看的正交摄影机将看不到该对象。此处的快速解决方案是使用转换为x / y轴运动的方向,例如transform.up
或transform.right
。
正如derHugo在评论中也提到的那样,您可能想研究使用Rigidbody2D。有一些优化措施可以使它在2D游戏中表现更好(尽管您可能不会注意到它们,除非您扩大对象数量)。