我正在尝试制作一款在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);
}
预期结果:项目符号对象与其他对象碰撞,打印Debug.Log输出并被销毁。
实际结果:项目符号对象在也有对撞机且没有Debug.Log输出的其他对象的前面,后面或后面触发。项目符号不会被破坏,因此在输入分配的输入后无限实例化克隆。
答案 0 :(得分:2)
通过在编辑->项目设置->物理下的层碰撞矩阵中检查默认/默认来解决此问题。不确定是否应该默认检查它,并且以某种方式取消检查,但是检查它可以解决问题。