我有一个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示例所示。谢谢!
尝试减小约束,您可以用鼠标位置确定侧面。将屏幕切成两半,您可以决定然后调整角度。