#06 (オマケ) ちょっとだけプログラムを見てみよう
プログラミングは難しいと感じるかもしれませんが、少し慣れれば大丈夫です!
サンプルコードを少し解説しますので、興味があったらこの機会にプログラミングを始めてみて下さい。
サンプルコードの解説
(1)Unity画面にて、Live2Dモデルを選択し、SimpleModelをダブルクリックします
(2)MonoDevelopが立ち上がります。ここでプログラムを見たり、修正することができます
100行近くのプログラムコードですが、大きく分けて3つの処理に分かれています。
処理の実行順は、Start() → Update() → OnRenderObject() です。
レンダリングとは描画の事で、Update()とOnRenderObject()は毎フレームごとに呼び出されます。
まずはStart処理から見ていきましょう!
【 Start処理 】
Start処理では、初期化処理とload処理を呼び出しています。
初期化処理は、Live2Dモデルを描画するのに必要なおまじないです。
Load処理では、mocファイルやテクスチャなどファイルのロード処理を行っています。
void Start()
{
// Live2Dモデルのインスタンス
Live2D.init();
// ロード処理を呼び出し
load();
}
void load()
{
// mocファイルのロード
live2DModel = Live2DModelUnity.loadModel(mocFile.bytes);
for (int i = 0; i < textureFiles.Length; i++)
{
// テクスチャファイルの関連付け
live2DModel.setTexture(i, textureFiles[i]);
}
// Live2Dモデルの描画位置を指定
float modelWidth = live2DModel.getCanvasWidth();
live2DCanvasPos = Matrix4x4.Ortho(0, modelWidth, modelWidth, 0, -50.0f, 50.0f);
// 物理演算ファイルのロード
if (physicsFile != null) physics = L2DPhysics.load(physicsFile.bytes);
}
【 Update処理 】
Update処理では、マウスクリックを感知する処理になっています。
void Update()
{
var pos = Input.mousePosition;
// マウスの左ボタンを押した時
if (Input.GetMouseButtonDown(0))
{
// 処理なし
}
// マウスの左ボタンを押し続けている時
else if (Input.GetMouseButton(0))
{
dragMgr.Set(pos.x / Screen.width*2-1, pos.y / Screen.height*2-1);
}
// マウスの左ボタンを離した時
else if (Input.GetMouseButtonUp(0))
{
dragMgr.Set(0, 0);
}
}
【 OnRenderObject処理 】
OnRenderObject処理では、感知したマウスクリックの位置に合わせて、顔の向きや体の向きを変化させる処理になっています。
void OnRenderObject()
{
if (live2DModel == null)
{
load();
}
live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);
if ( ! Application.isPlaying)
{
live2DModel.update();
live2DModel.draw();
return;
}
dragMgr.update();
// 顔の向き
live2DModel.setParamFloat("PARAM_ANGLE_X" , dragMgr.getX() * 30);
live2DModel.setParamFloat("PARAM_ANGLE_Y", dragMgr.getY() * 30);
// 体の向き
live2DModel.setParamFloat("PARAM_BODY_ANGLE_X", dragMgr.getX() * 10);
// 目の動き
live2DModel.setParamFloat("PARAM_EYE_BALL_X", -dragMgr.getX());
live2DModel.setParamFloat("PARAM_EYE_BALL_Y", -dragMgr.getY());
// 呼吸
double timeSec = UtSystem.getUserTimeMSec() / 1000.0;
double t = timeSec * 2 * Math.PI;
live2DModel.setParamFloat("PARAM_BREATH", (float)(0.5f + 0.5f * Math.Sin(t / 3.0)));
// まばたき
eyeBlink.setParam(live2DModel);
if (physics != null) physics.updateParam(live2DModel);
live2DModel.update();
live2DModel.draw();
}
つまり、このIDに計算式をセットする事によって、マウスでぐりぐりさせる動作を決めています。
あっさりとした解説だったかと思いますが、今回は書いてある事がなんとなくわかればいいと思います。
はじめは数字の値やプログラムを色々いじってみて楽しむ事が大事です!