C# 如何使项目根据其翻转方向';s旋转

C# 如何使项目根据其翻转方向';s旋转,c#,unity3d,C#,Unity3d,所以我有一把枪,它绕着我的播放器旋转,但当它面向左边时是倒置的,所以我写了一个脚本,当枪旋转超过100度小于-100度时,它会翻转枪,但它根本不会翻转 if( transform.rotation.z >= 100 && transform.rotation.z <= -100) { Debug.Log("flip"); transform.localScale = new Vector3(

所以我有一把枪,它绕着我的播放器旋转,但当它面向左边时是倒置的,所以我写了一个脚本,当枪旋转超过100度小于-100度时,它会翻转枪,但它根本不会翻转

        if( transform.rotation.z >= 100 && transform.rotation.z <= -100)
    {
        Debug.Log("flip");

        transform.localScale = new Vector3(1f, -1f, 1f);
    }
    else
    {
        Debug.Log("flop");

        transform.localScale = new Vector3(1f, 1f, 1f);
    }
if(transform.rotation.z>=100&&transform.rotation.z首先a有四个分量x、y、z和w!

它们都在
-1
1
的范围内移动

=>如果您不确切知道自己在做什么,请不要直接使用/分配四元数的分量

你想要的可能是最好的

但是在这里要小心:

读取.eulerAngles属性时,Unity会将旋转的四元数内部表示形式转换为Euler角度。由于使用Euler角度表示任何给定旋转的方法不止一种,因此读取的值可能与指定的值大不相同。如果您试图逐渐增加值以生成动画

因此,我宁愿比较两个方向,比如局部
变换。右
到全局
向量3。右
(当然,假设它只在Z上旋转)



其次,任何值怎么可能
=100
,同时
,因为您编写的条件

如果(transform.rotation.z>=100&&transform.rotation.z=100&&transform.rotation.z你能准确地加上它是如何不工作的,而不是仅仅说它不工作吗?当前发生了什么?你在哪里翻转对象?我只看到局部比例在变化。打印输出在你期望的时候没有发生吗?游戏是2D吗?什么视角tive?它不是flip这很模糊。判断你正在测试Z轴,这是一个2D游戏。游戏是自上而下的,侧面滚动,2.5D吗?你尝试过让它工作吗?你发布的当前代码都不会翻转任何东西。这是2D自上而下的游戏,它通过反转对象的比例来翻转它。这样可以避免改变比例旋转一个对象。这很可能会干扰您尝试进行的所有其他旋转。您的对象是精灵渲染器吗?在这种情况下,组件上有一个内置翻转字段,可以将精灵翻转到指定的轴上。使用它。好的,这是有意义的。当它位于这两个数字之间时,我将如何翻转它?有没有我不是说过同样的吗?^^^注意,这不是所有的问题,但我希望它在-100和100之间翻转,而不是100、99、98等…而是像100、101、102等…到-100…所以…我在更高级的编码方面不是非常流利,那么什么是SignedAngle?而且,听起来更愚蠢,我复制粘贴它来替换if语句,但是SignedAngle用红色下划线。@SyntaxError我修复了缺少的参数,并建议总体上研究Unity API;)
if(something >= -100 && something <= 100)
if(something >= 100 || something <= -100)
var zAngle = Vector3.SignedAngle(transform.right, Vector3.right, Vector3.forward);
if(zAngle >= 100 || zAngle <= -100)
var zAngle = Vector3.Angle(transform.right, Vector3.right);
if(zAngle >= 100)
   if( transform.rotation.z >= 100 && transform.rotation.z <= -100)
    {
        Debug.Log("flip");

        transform.localScale = new Vector3(1f, -1f, 1f);
    }
    else
    {
        Debug.Log("flop");

        transform.localScale = new Vector3(1f, 1f, 1f);
    }