【问题标题】:Unity Lossy Scaling implementationUnity 有损缩放实现
【发布时间】:2017-11-21 15:57:03
【问题描述】:

我目前正在使用 Unity 和 transform.rotation。问题是我有 2 个旋转对象作为父子对象。这使孩子奇怪地缩放并从盒子变成平行四边形。 Gooing 我发现 transform.lossyScale 应该可以解决我的问题,但我不知道如何实现它。

TL:DR 如何实现 transform.lossyscale 以防止父子缩放问题。

当前代码

float currentR = transform.eulerAngles.x;

    if(currentR < 30){
        transform.Rotate (rotation * Time.deltaTime * 3);
}

【问题讨论】:

  • transform.lossyScale 是一个只读值,在考虑了其父层次结构的所有缩放之后,它会为您提供变换缩放的近似值。解决问题的唯一方法是在父对象上使用统一比例。如果您必须具有非统一比例,请创建一个单独的“空”游戏对象作为两个对象的父对象,新的子对象具有非统一比例.

标签: c# unity3d rotation scaling


【解决方案1】:

理想情况下,如果您不希望孩子继承父母的规模,请不要使其成为上述父母的孩子:P 然而。如果必须,您可以制作一个反转父级比例的子级(因此它将具有与父级相反的比例)

比让你的新孩子成为那个孩子的孩子:)

您可以使用这个通用脚本,将它放在子级上,即使它有一个缩放的父级,在运行时旋转也不会有任何问题 :) (它将使用代码完成我上面描述的事情)

public class IgnoreParentScale : MonoBehaviour {

Transform scaleInversionParent;

void Awake () {
    scaleInversionParent = new GameObject ("ScaleInversionParent").transform;
    scaleInversionParent.SetParent (transform.parent);
    scaleInversionParent.localPosition = Vector3.zero;
    scaleInversionParent.eulerAngles = Vector3.zero;//Zero out anything but the scale
    UpdateScaleInversion ();
    transform.SetParent (scaleInversionParent, true);
}
void LateUpdate () {
    UpdateScaleInversion (); //Only if you are changing the scale at run time.
}
void UpdateScaleInversion () {
    Vector3 invertedScale = scaleInversionParent.parent.localScale;
    invertedScale = new Vector3 (1f / invertedScale.x, 1f / invertedScale.y, 1f / invertedScale.z);
    scaleInversionParent.localScale = invertedScale;//This scale will invert the parents scale
}
}

或者:

您可以使用此脚本创建一个新的父级,继承原始父级的位置和旋转,但忽略它的比例。

    public class IgnoreParentScale : MonoBehaviour {

    Transform originalParent;
    Transform newParent;

    void Awake () {
        newParent = new GameObject ("").transform;
        originalParent = transform.parent;

        UpdateNewParent ();
        transform.SetParent (newParent);
    }
    public void LateUpdate () {
        UpdateNewParent ();
    }
    void UpdateNewParent () {
        newParent.transform.position = originalParent.transform.position;
        newParent.transform.rotation = originalParent.transform.rotation;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2019-09-14
    • 2013-12-11
    • 2012-04-13
    • 1970-01-01
    相关资源
    最近更新 更多