概要
Live2D SDKに入っているSampleApp1にキャラの上でドラッグ(フリック)するとパーティクルがでるようにしてみた.
Live2D_SDK_Unity_2.0.08_1_jp/sample/SampleApp1を改造して作成する.
※以下説明ではドラッグとフリックをフリックに統一
開発環境
- Live2D_SDK_Unity_2.0.08_1_jp
- Unity 5.0.1f1
完成するDEMO
作り方
PlatformManager.csとLAppView.csを編集し,
モデルの描画モード,フリックなどの処理を変更,パーティクルの設定をする.
モデルの描画モードを変える
パーティクルを表示するときにLive2Dモデルが最前面に出てしまう問題を回避するために,
RenderModeを変更する(UnityのAPIで非推奨のものを利用している.
sample/PlatformManager.cs
public ALive2DModel loadLive2DModel(string path){
// -- 省略 --
live2DModel.setRenderMode(Live2D.L2D_RENDER_DRAW_MESH); //追加
return live2DModel;
}
パーティクルをプロジェクトに追加
Hierarchy > Create > Particle Systemを選択してパーティクルシステムを作成.
Inspectorは以下のように設定した.
LAppViewのメンバに以下を追加
sample/LAppView.cs
ParticleSystem ps;
LAppViewのコンストラクタに以下を追加
sample/LAppView.cs
ps = GameObject.Find("Particle System").GetComponent<ParticleSystem> ();
フリックイベントの修正とパーティクルの操作
sample/LAppView.cs
// タッチ中
public void TouchesMoved(Vector3 inputPos)
{
// -- 省略 --
Camera c = GameObject.Find("Main Camera").GetComponent<Camera>();
dragMgr.Set(x, y);
const int FLICK_DISTANCE = 100;// この値以上フリックしたらイベント発生
// フリックイベントの判定
if (touchMgr.IsSingleTouch() && touchMgr.IsFlickAvailable())
{
ps.Play();
ps.transform.position = c.ScreenToWorldPoint(new Vector3(inputPos.x,inputPos.y, 0));
float flickDist = touchMgr.GetFlickDistance();
if (flickDist > FLICK_DISTANCE) {
float touchPos_plane2x2_X = touchPos_onPlane.x * 2 - 1;
float touchPos_plane2x2_Y = -touchPos_onPlane.y * 2 + 1;
model.FlickEvent(touchPos_plane2x2_X, touchPos_plane2x2_Y);
//touchMgr.DisableFlick(); //コメントアウト
}
}
// -- 省略 --
}
// タッチ終了
public void TouchesEnded(Vector3 inputPos)
{
// -- 省略 --
touchMgr.DisableFlick();
ps.Stop();
ps.Clear();
}