在怪异的角度和位置进行比例缩放的预制实例化

时间:2019-05-05 14:32:40

标签: c# unity3d position

我有一个比例缩放的喷火器预制件,想在武器处实例化。我的其他预制件,例如简单的子弹和激光,都可以使用相同的脚本实例化,但是该预制件具有奇怪的位置和角度。该如何解决?

以下是处理角度和实例化的脚本:

public class FlameThrowerGun : MonoBehaviour
{
    public GameObject theFlame;

    bool isFiring = false;

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        SetPlayerRotation();
        if (Input.GetButtonDown("Fire"))
        {
            Shoot();
        }

    }


    void SetPlayerRotation()
    {
        if (Input.GetKey(KeyCode.W))
        {
            transform.rotation = Quaternion.Euler(0, 0, 45);
        }
        else if (Input.GetKey(KeyCode.S))
        {
            transform.rotation = Quaternion.Euler(0, 0, -45);
        }
        else
        {
            transform.rotation = Quaternion.Euler(0, 0, 0);
        }
    }


    void Shoot()
    {
        GameObject bullet_ = Instantiate(theFlame, transform.position, transform.rotation * Quaternion.Euler(0f, 0f, -90f));
        Destroy(bullet_, 1.0f);

    }
}

* Quaternion.Euler(0f, 0f, -90f)放在此处以正确的角度实例化火焰。

我要补充的是,火焰预制件已缩放到y=2以获得所需的大小,而不是在预制件的边缘实例化,而是在中心实例化,这就是为什么我觉得它很奇怪位置。

这里是直射并倾斜射击时,都不在玩家武器位置:

https://gfycat.com/EntireGraciousBlueandgoldmackaw

1 个答案:

答案 0 :(得分:1)

需要更改项目符号对象的枢轴点

现在,子弹的枢轴点位于中心,因此当代码产生并放置子弹时,该枢轴(也就是中心)在您要求的位置正确地结束。问题是,您在那里不想要它。

所以现在您的预制件看起来像这样:

Ring in the center

看到中央的戒指吗?将其拖到左侧:

Fixed!

将其正确放置在与枪管重叠的位置。

并且忽略我通过屏幕抓取复制火焰的flame脚尝试

如果定位是从角色的精灵的轴心开始的,您可能不得不添加偏移量,或者也使用位于枪管处的空游戏对象,但是这里的核心原理是,由于轴心居中,当您致电Instantiate

时,它们正在中心对​​齐