旋转一个射弹精灵面对一个有角度的相机和它正在飞行的目标。 2D自上而下

时间:2017-05-14 09:06:59

标签: unity3d sprite multiplayer

Results that im getting, and result that I want. Descriptive image.

我知道这个问题之前已经被问到了这个问题,相信我,我一直在寻找这个论坛和团结答案的解决方案。

我正在做一个2d自上而下的游戏,怪物可以向我的角色射击弹丸。我已经解决了这个问题,通过这样做,他们从动画中的特定点实例化一个弹丸预制件,在一个空的游戏对象的位置,它看起来很好。我已经让射弹找到了玩家,并通过瞄准他最初的位置并且不是他经常出现的地方来制造它。所以此时弹丸的运动是完美的,我为自己感到骄傲!是的,对于这个半新手。这是我使用的代码:

    public void OnCastComplete()
{
    var projectile = Instantiate(fireball, projectileInitialLocation.transform.position, transform.rotation);

    projectile.transform.LookAt(currentTarget.transform.position);

    projectile.velocity = projectile.transform.forward * projectileSpeed;

    Vector2 dir = currentTarget.transform.position - projectile.transform.position;
    float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;

    projectile.transform.rotation = Quaternion.AngleAxis(angle, Vector2.up);
}

这也可以完美地工作如果我的主相机不在一个角度。我需要的外观和感觉是相机处于一个角度,使我的游戏中的3D元素变得生动,同时仍然有2d精灵在四处奔跑。这意味着包括射弹在内的所有精灵都需要在它们上面有一个脚本来面向摄像机。

这是脚本:

    public Transform target;

void Start () {
    target = GameObject.Find("MainCamera").GetComponent<Transform>();
}

void Update () {

    if (target != null)

        this.transform.rotation = Camera.main.transform.rotation;
}

现在我确信这两个脚本是这里的罪魁祸首,因为我可以看到一个人确保事物面向相机,另一个确保正确旋转精灵。但他们无法一起工作。从射弹中移除后一个脚本意味着它有时不可见或以一定角度旋转,从而观察者几乎不会注意到它。附着它意味着它面向相机,但在我上面张贴的图片中给出了结果。

我不能让他们彼此玩得很好,问题是如此具体我恐怕我需要在这里发一个问题=(

希望有人可以提供帮助!

谢谢你!

1 个答案:

答案 0 :(得分:0)

当然,我在发布问题10分钟后设法解决了这个问题。

我修复它的方法是更改​​删除脚本以面对射弹上的相机。在实例化射弹时对其进行补偿:

    public void OnCastComplete()
{
    var projectile = Instantiate(fireball, projectileInitialLocation.transform.position, transform.rotation);

    projectile.transform.LookAt(currentTarget.transform.position);

    projectile.velocity = projectile.transform.forward * projectileSpeed;

    Vector2 dir = currentTarget.transform.position - projectile.transform.position;
    float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;

    //projectile.transform.rotation = Quaternion.AngleAxis(angle, Vector2.up);
    projectile.transform.rotation = Quaternion.Euler(-25, 0, angle);
}

我已经评论过的是前一行,其下的一行解决了这个问题。通过在x上添加-25来补偿相机,并通过添加&#34;角度来补偿精灵的旋转。到z euler角度。

希望这有助于某人。