02. ドラッグによるアニメーション

概要

サンプルでは画面をタッチしたり、ドラッグしたりすると、モデルがその方向を向くという機能があります。
ここではその実装について説明します。

L2DTargetPointクラスでドラッグの座標を管理しています。
タッチの取得やデバイス座標の変換についてはプラットフォームごとに別々に解説していますのでそちらをご覧下さい。

アニメーション例

サンプルでは以下のようにしてドラッグの値を取得して、パラメータに設定しています。
顔の向き、目玉の向き、体の向き(横のみ)に対してパラメータを加えています。


//L2DTargetPoint drag;

float dragX=drag->getX();//-1から1の範囲
float dragY=drag->getY();//-1から1の範囲

//顔の向きの調整
live2DModel->addToParamFloat( "PARAM_ANGLE_X", dragX * 30 , 1 );//-30から30の値を加える
live2DModel->addToParamFloat( "PARAM_ANGLE_Y", dragY * 30 , 1 );

//体の向きの調整
live2DModel->addToParamFloat( "PARAM_BODY_X"    , dragX * 10 , 1 );//-10から10の値を加える

//目の向きの調整
live2DModel->addToParamFloat( "PARAM_EYE_BALL_X", dragX  , 1 );//-1から1の値を加える
live2DModel->addToParamFloat( "PARAM_EYE_BALL_Y", dragY  , 1 );



設定に必要なコード

タッチの開始時、移動時、終了時のイベントで値の設定が必要です。またフレームごとに更新が必要です。
void set( float x , float y )
設定した座標の位置を向きます。
ここで設定する値の範囲が取り出せる値の範囲になります。

void update()
加速度を考慮した自然なパラメータになるように計算しています。
毎フレームの更新が必要になります。

値の取得方法

float getX()
横方向の値を取得します。
update()を呼ばないと更新されません。

float getY()
縦方向の値を取得します。
update()を呼ばないと更新されません。

Comments