10から実装されたインスタンスの3次元空間における回転をy軸で行った場合、その角度が正しく反映されないという現象です。以下のフレームアクションは、タイムラインに置いたMovieClipインスタンスmy_mcをy軸で80度回転します(図001)。[出力]パネルには、つぎのように回転角が表示されます。ふたつ目の数値は、80度に相当するラジアン角です。myMatrix3D.decompose()[1].y);図001■y軸で80度回転したMovieClipインスタンスつぎに、同じフレームアクションで、回転する角度を100度に変えてみます。インスタンスの見た目は100度回っているものの(図002)、[出力]される角度は80度のときとまったく同じです。myMatrix3D.decompose()[1].y);図002■y軸で100度回転したMovieClipインスタンス原因y軸回りの角度だけでなく、xやz軸の角度も確かめてみると、現象がもう少し詳しくわかります。以下のフレームアクション(スクリプト001)は、Spriteインスタンスを動的に生成し、y軸回りにまず80度回転したうえで、さらに20度(結果100度)回します。すると、[出力]パネルにはつぎのような値が表示されます。targetSprite.rotationZ);trace(targetSprite.transform.matrix3D.decompose()[1]);}[出力]結果が示すのは、インスタンスをy軸で100度回したとき、y軸回りの角度が80度になるだけでなく、xおよびz軸で反転(180度回転)しているということです。そのため、インスタンスの見た目は、y軸で100度回したのと同じ状態になります。y軸による回転がxやz軸の角度に影響することは予測しにくいでしょう。xやz軸で回した場合には、このような現象は生じません。上記スクリプト001でx軸による回転を試すと、[出力]は以下のようになります。y軸による回転だけ結果が異なるのは、数学的にも理解しにくいといえます[*1]。数学的な説明も含めて、詳しくは「インスタンスのy軸における回転角の値の範囲」をお読みください。対処法DisplayObject.rotationYプロパティを使って回転すれば、プロパティ値が勝手に書替わることは一応防げます。インスタンスのもつMatrix3Dオブジェクトを調べると、やはりxおよびz軸で反転してしまうようです。targetSprite.rotationZ);trace(targetSprite.transform.matrix3D.decompose()[1]);}なお、Matrix3D.recompose()メソッドでy軸回りの角度を100度に指定しても、やはりy軸の回転角は80度になり、xおよびz軸で反転してしまいました(スクリプト002)。したがって、このふるまいそのものを変える方法はなさそうです。できるのは、y軸回りの角度を±180度の範囲に計算し直すことでしょう[*2]。前出注[*1]の02「y軸回りの角度を±180度の範囲に計算し直す」に、スクリプトのサンプルを掲げました。注[*1]に「インスタンスのy軸における回転角の値の範囲」を引用し、その解説に合わせて一部修正。