Unity3d 统一2D反射/反弹
所以我正在制作一个2D平板游戏,在Unity中360°射击。 我希望我的子弹击中某物时能反射出来(想想台球) 如果子弹从天花板或地板上弹下来,下面的代码就起作用。问题是,当我从侧面击中物体时,子弹的新方向正好偏离180°Unity3d 统一2D反射/反弹,unity3d,2d,Unity3d,2d,所以我正在制作一个2D平板游戏,在Unity中360°射击。 我希望我的子弹击中某物时能反射出来(想想台球) 如果子弹从天花板或地板上弹下来,下面的代码就起作用。问题是,当我从侧面击中物体时,子弹的新方向正好偏离180° private void OnTriggerEnter2D(Collider2D col) { if (col.gameObject.tag != "Player" && col.gameObject.tag != "Bullet") {
private void OnTriggerEnter2D(Collider2D col)
{
if (col.gameObject.tag != "Player" && col.gameObject.tag != "Bullet")
{
ContactPoint2D[] contacts = new ContactPoint2D[10];
col.GetContacts(contacts);
Vector3 currentBulletMoveVector = transform.right;
Vector2 newBulletMoveVector = Vector2.Reflect(currentBulletMoveVector, contacts[0].normal);
transform.right = new Vector3(newBulletMoveVector.x, newBulletMoveVector.y, 0);
}
}
关于我哪里出了问题或如何解决这个问题,有什么建议吗?可能重复的,虽然你会使用2D逻辑,但不幸的是,这个问题的答案没有帮助,因为我没有使用刚体和速度。你在哪里跟踪子弹的方向?这总是变换。对吗?另外,当你说“新方向”关闭时,你的具体意思是移动方向关闭了,还是只是变换的方向错误,子弹的移动方向正确?是的,我的子弹的移动方向总是变换。对。为了设置新方向,我将transform.right设置为一个新值。我刚刚发现contacts[0]。normal总是返回v(0/-1),这解释了奇怪的行为。但现在我不知道为什么我得到了错误的法线…看到了吗