理想的には、あなたは子供が親の規模を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
}
}
代替:
このスクリプトを使用して、元の親の位置と回転を継承する新しい親を作成できますが、その親の縮尺は無視されます。
'transform.lossyScale'は、親階層のすべてのスケーリングを考慮して、変換のスケーリングの*近似値*を与える読み取り専用の値です。問題を解決する唯一の方法は、親オブジェクトに均一なスケールを使用することです。あなたは***が***でなければならない尺度を持っていなければ、新しい子供が非一様なスケールを持つように、両方のオブジェクトの親となる別の "空の"ゲームオブジェクトを作成します。 – Draco18s