【发布时间】:2019-11-03 18:15:45
【问题描述】:
我正在尝试制作一个在 3D 空间中使用 2D 精灵的平台游戏。出于某种原因,尽管玩家发射的子弹从玩家的子 GO 正确发射,但它不会与 2D 或 3D 中的任何东西(敌人、其他物体等)发生碰撞。我在父玩家 GO 上有一个 3D 角色控制器,但这不会影响我正在发射的子弹对象,是吗?
适当地碰撞一切。 尝试以各种组合打开和关闭 IsTrigger。 物体在同一层,Z轴位置相同。
//BULLET FIRING SCRIPT
void Update()
{
if (Input.GetButtonDown("Fire2") && !Input.GetButton("Fire3") &&
Time.time > nextFireTime)
{
Rigidbody2D cloneRb = Instantiate(bullet,
bulletSpawn.position, Quaternion.identity) as Rigidbody2D;
cloneRb.AddForce(bulletPrefab.transform.right *
projectileForce);
nextFireTime = Time.time + fireRate;
}
}
//____________________________________________________________
//BULLET OBJECT SCRIPT
private void Start()
{
direction = Input.GetAxisRaw("Horizontal");
if (direction == -1)
{
facingLeft = true;
}
else if (direction == 1)
{
facingLeft = false;
}
else if (direction == 0)
{
facingLeft = false;
}
if (facingLeft == false)
{
rb.velocity = transform.right * speed;
Debug.Log("Fired Bullet");
}
else
{
bulletPrefab.transform.Rotate(0, 180, 0);
firePoint.transform.Rotate(0, 180, 0);
Debug.Log("Rotated Bullet");
Debug.Log("Fired Bullet Left");
rb.velocity = transform.right * speed;
}
}
// Update is called once per frame
void Update()
{
}
public void OnTriggerEnter2D(Collider2D collider)
{
Debug.Log("Bullet Hit:");
Debug.Log(collider.name);
Enemy enemy = collider.GetComponent<Enemy>();
if (enemy != null)
{
enemy.TakeDamage(damage);
}
Destroy(gameObject);
}
预期结果:Bullet 对象与其他对象发生碰撞,打印 Debug.Log 输出并被销毁。
实际结果:Bullet 对象穿过、前面或后面也有碰撞器的其他对象发射,并且没有 Debug.Log 输出。 Bullet 不会被破坏,因此在输入分配的输入时会无限地实例化克隆。
【问题讨论】:
-
首先; 2d 物理不适用于 3d 物理。其次,确保您在碰撞的对象之一上有一个刚体
-
好吧,所以子弹似乎有一个 2d 刚体,你有触发器或对撞机在敌人身上吗?可悲的是,这似乎是一个普遍的问题
-
@FredrikSchön 但是子弹物体和它所碰撞的东西都是 2D 的......我确实在子弹上有一个刚体,并且在碰撞的物体上尝试了使用和不使用它们。跨度>
-
@BugFinder 我尝试过在子弹和敌人上使用和不使用触发器,以及两者。
-
它是 Rigidbody2D 吗?