首页 > 解决方案 > 如何参考 2D 对象上的 Z 轴以在场景中的玩家身后生成弹丸?

问题描述

我编写了一个运行良好的 Shoot 函数,但我希望弹丸对象在场景中的玩家对象后面生成。我尝试将弹丸的预制件在 z 轴上设置为 -1,但这似乎不起作用。我怀疑这是因为它被对象的实例化覆盖了。我还简单地尝试使用 Vector3 使用以下代码生成弹丸,但这也不起作用。

这是我的代码。

Vector3 spawn = new Vector3(0, 0.5f, -1)
rb.position + spawn

弹道脚本:

    public class Projectile : MonoBehaviour
{
    Rigidbody2D rb;
    
    Vector2 launch = new Vector2(0, 1);

    void Awake()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        if (transform.position.magnitude > 1000.0f)
        {
            Destroy(gameObject);
        }
    }

    void OnCollisionEnter2D(Collision2D other)
    {
        Destroy(gameObject);
    }

    public void Shoot(float force)
    {
        rb.AddForce(launch * force);
    }
}

播放器脚本中的拍摄功能:

void Shoot()
{
    GameObject projectileObject = Instantiate(projectilePrefab, rb.position + Vector2.up * 0.5f, Quaternion.identity);
    Projectile projectile = projectileObject.GetComponent<Projectile>();
    projectile.Shoot(300);

}

标签: c#unity3d

解决方案


如果弹丸和玩家都是 2d 并且您只希望弹丸在玩家后面渲染,则它应该在不同的排序层中,或者它应该低于sortingOrder玩家的渲染器。

请参阅此处了解更多信息。


推荐阅读