2017-11-21 14 views
0

私は現在、Unityとtransform.rotationを扱っています。問題は、親子として2つの回転オブジェクトがあることです。これにより、子供は奇妙にスケールされ、ボックスから小節線に移動します。 Gooing私の問題を解決するはずのtransform.lossyScaleが見つかりましたが、実装方法はわかりません。Unity Lossy Scalingの実装

TL:DR親子スケーリングの問題を防ぐためにtransform.lossyscaleを実装する方法。

現在のコード

float currentR = transform.eulerAngles.x; 

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

'transform.lossyScale'は、親階層のすべてのスケーリングを考慮して、変換のスケーリングの*近似値*を与える読み取り専用の値です。問題を解決する唯一の方法は、親オブジェクトに均一なスケールを使用することです。あなたは***が***でなければならない尺度を持っていなければ、新しい子供が非一様なスケールを持つように、両方のオブジェクトの親となる別の "空の"ゲームオブジェクトを作成します。 – Draco18s

答えて

0

理想的には、あなたは子供が親の規模をinheirtしたくない場合は、その子は、親が言ったことはありません: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 
} 
} 

代替:

このスクリプトを使用して、元の親の位置と回転を継承する新しい親を作成できますが、その親の縮尺は無視されます。

関連する問題