【问题标题】:Flipping sprite by y axis when rotated past a certain point旋转经过某个点时按 y 轴翻转精灵
【发布时间】:2022-01-13 22:03:00
【问题描述】:

我是 Unity 新手,也是一名业余 C# 用户。我有一个潜艇精灵,当旋转超过 90 度和小于 -90 度时,我想沿 y 轴翻转,这样它就不会倒置。它通过鼠标移动旋转,如有必要,我将给出代码。我不知道为什么,但这似乎不起作用。任何帮助将不胜感激!

代码:(rot90 是布尔值)

if (transform.rotation.z > 90 & transform.rotation.z >-90)
{
    rot90 = false;
}

if (transform.rotation.z < 90 & transform.rotation.z < -90) 
{
    rot90 = true;
}

if (rot90 == true)
{
    Vector3 scale = transform.localScale;
    scale.y = -22;
    transform.localScale = scale;
}

if (rot90 == false)
{
    Vector3 scale = transform.localScale;
    scale.y = 22;
    transform.localScale = scale;
}

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    transform.rotationQuaternion

    Quaternion 不仅有 3 个,而且有 4 个分量 xyz w,它们都在范围内移动在-11 之间。

    你的条件永远不会变成true


    您可以使用eulerAngles 并执行例如

    var zAngle = transform.eulerAngles.z;
    // clean out the angle to a value between -180 and +180
    while(zAngle > 180) zAngle -= 360;
    while(zAngle < -180) zAngle += 360;
    
    Vector3 scale = transform.localScale;
    scale.y = Mathf.Abs(zAngle) > 90 ? -22 : 22;
    transform.localScale = scale;
    

    如果您使用的是SpriteRenderer 组件,您应该选择SpriteRenderer.flipY

    var zAngle = transform.eulerAngles.z;
    // clean out the angle to a value between -180 and +180
    while(zAngle > 180) zAngle -= 360;
    while(zAngle < -180) zAngle += 360;
    
    // You should of course rather cache this reference e.g. in Awake only once
    // and then reuse it here
    GetComponent<SpriteRenderer>().flipY = Mathf.Abs(zAngle) > 90;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      相关资源
      最近更新 更多