*「dynamic batching」について。 同じマテリアルであれば、300頂点まで動的にメッシュを作成して、まとめて表示するUnityの描画エンジン標準の機能らしく、 基本的には、モバイルの2D描画を早くするには、これに乗っかるようにデータを作るのでポイントのようです。 [[2DToolKit]]は複数のスプライトであっても、同じマテリアルになるように ・アトラステクスチャでテクスチャを統一。 ・premultied Alhaを使ってアルファブレンドの加算合成とノーマル合成を統一。 などをして、「dynamic batching」を生かすようにしています。 ただし、この「dynamic batching」には落とし穴があって Transfomのうちscaleの値が違うものがあると、「dynamic batching」が利かなくなってしまうようです。 その対応として、2DToolKitではtk2dSpriteに独自のscaleパラメーターを持たせて、内部でスケール処理をしています。 >Unity Communityより >Mesh will be copied ONLY if non-uniform scale is used. >If you set uniformal scale (both X, Y and Z scale are equal) Unity will NOT make a copy of a mesh. >However dynamic batching can not batch scaled and non-scaled meshes together because it has to change GPU re-normalization state (others your lighting would go wonky). なので、Animationコンポーネントを追加して、キーフレームアニメーションをする場合は Transformのスケールはいじらずに、tk2dSprite側のスケールを更新する必要があります。 しかし、この値を直接いじっても、内部処理が走らないためスケール値が描画に反映されません。 ヘルパークラスを作るなどして、ヘルパークラスの値をキーフレームアニメさせて、ヘルパー内部のUpdate()などでスケール値を書きかえるなどの対応が必要になります。 こんな感じ? #highlight(){{ using UnityEngine; using System.Collections; public class tk2DAnimationHelper : MonoBehaviour { tk2dSprite sprite; public Vector3 scale = Vector3.one; public Color color = Color.white; void Start () { sprite = GetComponent<tk2dSprite>(); scale = sprite.scale; color = sprite.color; } void Update () { if( scale != sprite.scale ) { sprite.scale = scale; } if( color != sprite.color ) { sprite.color = color; } } } }} キーフレームアニメで値を直接いじっても、内部処理を走らせられないという問題は、色の変更なども同様になります。 Unityのシステムの問題の気もするので、なにか解決方法があるかもしれません。