Unity 2D射击 - 手臂旋转

时间:2015-11-02 21:47:08

标签: unity3d transform unityscript unity3d-2dtools

我正在制作2D平台游戏,其中玩家的手臂指向鼠标光标。这种机制用于瞄准玩家的武器。但是,旋转手臂时我遇到了一些故障。

我知道我得到这些错误的原因:手臂(在层次结构中)是玩家的孩子,我正在对玩家做的是每次翻转(反转)其transform.localScale.x值它沿指定方向移动,以便玩家精灵在给定方向上查看。由于手臂是玩家的孩子,它自己的transform也会被翻转,使其看起来与玩家的方向相同,这就是我想要的。但是,这会导致手臂旋转出现一些错误。由于手臂的transform.localScale.x值被翻转,旋转全部搞砸了,我无法弄清楚如何解决它。

以下是一些用于移动播放器和手臂的示例脚本。它们被简化,以便您可以更好地阅读它。

// Update is called once per frame
void Update () {

    var input = Input.GetAxis("Horizontal");

    if(input > 0) {
        if(!facingRight) {
            ChangeOrientation(gameObject, new Vector3(-1,1,1));
            facingRight = !facingRight;
        }
    }

    if(input < 0) {
        if(facingRight) {
            ChangeOrientation(gameObject, new Vector3(-1,1,1));
            facingRight = !facingRight;
        }
    }

    rbody.velocity = new Vector2(speed * input, rbody.velocity.y);

}

public static void ChangeOrientation (GameObject g, Vector3 changeBy) {
    var newTransform = g.transform.localScale;
    newTransform.x *= changeBy.x;
    newTransform.y *= changeBy.y;
    newTransform.z *= changeBy.x;
    g.transform.localScale = newTransform;
}

我的手臂旋转脚本:

void Update () {
    //rotation
    Vector3 mousePos = Input.mousePosition;
    mousePos.z = 0;

    Vector3 objectPos = Camera.main.WorldToScreenPoint (transform.position);
    mousePos.x = mousePos.x - objectPos.x;
    mousePos.y = mousePos.y - objectPos.y;

    float angle = Mathf.Atan2(mousePos.y, mousePos.x) * Mathf.Rad2Deg;
    transform.rotation = Quaternion.Euler(new Vector3(0, 0,
                                                      (PlayerRunMovementController.facingRight ? angle : angle )));
}

感谢您提供的任何帮助。

0 个答案:

没有答案