【问题标题】:Player & Enemy 2D auto-rotation玩家和敌人 2D 自动旋转
【发布时间】:2016-12-09 03:00:00
【问题描述】:

我在屏幕底部有一个玩家,在屏幕顶部有一个敌人。我希望它们都不断地相互旋转。这是我的代码:

void Update () 
    {
        Vector3 diff = target.position - transform.position; 
        diff.Normalize();

        float zRotation = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
        Vector3 lookDirection = new Vector3(0, 0, zRotation - 90);
        transform.rotation = Quaternion.Euler(lookDirection);   
    }

在这种状态下,玩家的行为与预期一样,但敌人总是从玩家身边旋转,这意味着他在玩家所在的位置向上而不是向下看。

如果我像这样切换diff 向量:

Vector3 diff = transform.position - target.position;

然后是玩家将目光从敌人身上移开。 两个精灵在编辑器中的旋转和缩放值都为 0。

这里有什么问题?

【问题讨论】:

    标签: unity3d rotation 2d


    【解决方案1】:

    您的解决方案对我来说很好:http://imgur.com/a/spi3O

    难道敌人的“上”就是玩家的“下”。意思是你的一个精灵被颠倒了?

    您可以尝试以下方法,但结果相同:

    var dir = target.position - transform.position;
    var angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
    transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
    

    如果您要使用相同的旋转计算方法,您需要确保您的精灵具有相同的世界相对原生旋转,或者修复它。

    【讨论】:

    • 这在 2D 中不起作用。我只想在 Z 轴上旋转。
    • 所以在 x 和 y 上将目标的值更改为 0
    • 您是否尝试过在 2D 中使用该功能?你能用我上面的代码让它工作吗?
    • 我没有,我会在两个小时内看看。您的首选设置是什么?两个对象上的相同脚本,让它们互相看?
    • 没错,使用默认的 2D 视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多