在Unity中翻转时旋转枪

问题描述 投票:0回答:1

我有一个c#脚本,可以旋转枪以指向光标。当光标在播放器上方或下方时,我需要用枪将其翻转到播放器的另一侧。我使用以下脚本解决了这个问题:(在更新功能内)

    Vector2 weaponDistance = Camera.main.ScreenToWorldPoint(Input.mousePosition) - weapon.transform.position; 
    float weaponRotation = Mathf.Atan2 (weaponDistance.y, weaponDistance.x) * Mathf.Rad2Deg;

    if (weaponRotation < 90f && weaponRotation > -90f)
    {
        Debug.Log("Facing Right"); 
        weapon.transform.localPosition = leftWeaponPosition; 
        weapon.transform.localRotation = Quaternion.Euler (0f, 0f, weaponRotation);
    }  
    else
    {
        Debug.Log("Facing Left");
        weapon.transform.localPosition = rightWeaponPosition; 
        weapon.transform.localRotation = Quaternion.Euler (180f, 0f, -weaponRotation);
    }

但是,有一个小故障,您不能直接在播放器下方射击。 Here is the result。我设法通过以下代码部分修复了故障行为:(内部更新功能)

    Vector2 weaponDistance = Camera.main.ScreenToWorldPoint(Input.mousePosition) - weapon.transform.position; 
    float weaponRotation = Mathf.Atan2 (weaponDistance.y, weaponDistance.x) * Mathf.Rad2Deg;

    if (weaponRotation < 90f && weaponRotation > -90f)
    {
        if (weaponRotation < 65f && weaponRotation > -65f)
        {
            Debug.Log("Facing Right"); 
            weapon.transform.localPosition = leftWeaponPosition; 
        }
        weapon.transform.localRotation = Quaternion.Euler (0f, 0f, weaponRotation);
    }  
    else
    {
        if ((weaponRotation > 115f && weaponRotation < 155f) || (weaponRotation > -155f && weaponRotation < -115f))
        {
            Debug.Log("Facing Left");
            weapon.transform.localPosition = rightWeaponPosition; 
        }
        weapon.transform.localRotation = Quaternion.Euler (180f, 0f, -weaponRotation);
    }

这次减少了一些小故障,武器精灵在屏幕底部翻转而没有到达玩家的另一侧。但是,如果光标靠近播放器/位于播放器顶部,则仍会出现毛刺现象,并且还会导致奇怪的旋转行为。This was the result

我正在寻找一种解决方案,可以消除故障现象,可以直接在玩家下方射击,并且武器不会在玩家底部旋转,如第二个gif示例所示。谢谢!

c# unity3d rotation quaternions game-development
1个回答
0
投票

尝试减小约束,您可以用鼠标位置确定侧面。将屏幕切成两半,您可以决定然后调整角度。

© www.soinside.com 2019 - 2024. All rights reserved.