うにてぃブログ

UnityやUnreal Engineの記事を書いていきます

【Unity】Transform の Global Scale (lossyScale) を 指定の値に変更する

Transform の Global Scale (lossyScale) は Read Only のため値の変更が出来ない
そのため lossyScale を指定した値にする拡張を作成した

   /// <summary>
    ///   <para>The global scale of the object (Read Only).</para>
    /// </summary>
    public Vector3 lossyScale
    {
        [NativeMethod("GetWorldScaleLossy")] get
        {
            Vector3 ret;
            this.get_lossyScale_Injected(out ret);
            return ret;
        }
    }

コード

public static class TransformExtension
{
    /// <summary>
    /// lossy scale を 1 にする
    /// </summary>
    public static void ResetLossyScale(this Transform self)
    {
        self.SetLossyScale(Vector3.one);
    }
 
    /// <summary>
    /// lossy scale を 指定の値にする
    /// </summary>
    public static void SetLossyScale(this Transform self, Vector3 scale)
    {
        self.localScale = new Vector3(
            scale.x / self.lossyScale.x * scale.x, 
            scale.y / self.lossyScale.y * scale.y, 
            scale.z / self.lossyScale.z  * scale.z
        );
    }
}