【问题标题】:Shooting a laser in 2d unity top down game在 2d unity 自上而下的游戏中发射激光
【发布时间】:2020-07-02 09:20:17
【问题描述】:

我试图让我的玩家从他的位置直接向我想要的方向射击,我做到了,但现在我有一个电影机,我希望它留在更大的背景区域,所以我添加到背景碰撞器它适用于相机边界但是 - 现在我正在拍摄的激光(它是动态的)与背景发生碰撞并且没有被拍摄。 我试图制作激光子弹运动学,但它只是实例化而不是远距离射击。

那么我怎样才能让我的激光子弹动态而不与背景碰撞呢?

我尝试了物理碰撞矩阵,但没有成功。

这里也是我的拍摄代码:

public Transform shootingPoint;
public GameObject laserPrefab;
[SerializeField] float projectileSpeed = 10f;

// Update is called once per frame
void Update()
{
    if (CrossPlatformInputManager.GetButtonDown("Fire1"))
    {
        Shoot();
    }
}

private void Shoot()
{
    GameObject laser = Instantiate(laserPrefab, shootingPoint.position, shootingPoint.rotation);
    Rigidbody2D rb = laser.GetComponent<Rigidbody2D>();
    rb.AddForce(shootingPoint.up * projectileSpeed, ForceMode2D.Impulse);
}

【问题讨论】:

    标签: unity3d 2d collider


    【解决方案1】:

    给背景一个不一样的Layer

    1. 选择背景并在检查器中点击LayerAdd Layer

    2. 在空白处添加一个新层(不管是哪一个)

    3. 返回背景对象,现在选择新添加的图层

    对您的 PlayerLaser 也重复此操作,以便能够准确定义谁应该能够与谁发生碰撞。

    然后通过Physics2D Settings -> Collision Matrix禁用你的激光(和其他东西)和背景之间的碰撞

    enter image description here

    并确保例如只有Player(或任何需要的)可以与背景碰撞

    【讨论】:

    • 谢谢!我之前确实这样做过,但由于某种原因它没有用,但现在很好,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多