Unityでx軸方向だけのrotationやlocalRotationをコピーしたい

Unityで、targetのgameobjectから別のgameobjectへx軸方向だけの回転をコピーしたい時があると思う。

素朴な実装では、

    private void RotUpdateX(ref GameObject me, GameObject target){
        var r = target.transform.localRotation;
      r = Quaternion.Euler(r.eulerAngles.x,0,0);
      me.transform.localRotation = r;
    }

と書く人が多いだろうが、これでは上手くいかなかった。

quaternion.eulerAnglesにおいてquaternionからオイラー角に変換するときに、同じ回転を表す別のオイラー角に変換されることが原因らしい。

qiita.com

自分の場合は、以下のようにしたら上手くいった。

    private void RotUpdateX(ref GameObject me, GameObject target){
        var r = target.transform.localRotation;
        if (r.eulerAngles.y > 90 & r.eulerAngles.y < 270)
        {
            r = Quaternion.Euler(180 - r.eulerAngles.x,0,0);

        }else{
            r = Quaternion.Euler(r.eulerAngles.x,0,0);

      }
      me.transform.localRotation = r;
  }