#06 (附錄)稍微看一下程式

雖然寫程式可能會給人很困難的感覺,但只要稍微習慣就沒問題了
這裡將稍微解說一下樣本程式碼,有興趣的使用者就利用這個機會開始寫程式吧


   解說樣本程式碼

(1)
在Unity畫面中,選擇Live2D模型,並雙重點擊SimpleModel


(2)
接下來就會啟動MonoDevelop。在這裡就能夠觀看或修正程式


雖然程式碼將近有100行,但大致上可分為3種處理

處理的順序是,Start() → Update() → OnRenderObject()
跑圖指的就是描繪,Update()OnRenderObject()會在每個影格被呼叫出來

首先看看Start處理吧


Start處理
Start處理會呼叫樣板化處理與load處理
樣板化處理是描繪Live2D模型時需要的魔法
Load處理負責進行moc檔案、材質圖等檔案的讀取處理
  1. void Start()
  2. {
  3.     // Live2D模型的實例
  4.     Live2D.init();
  5.     // 呼叫讀取處理
  6.     load();
  7. }
  8.  
  9. void load()
  10. {
  11.     // 讀取moc檔案
  12.     live2DModel = Live2DModelUnity.loadModel(mocFile.bytes);
  13.  
  14.     for (int i = 0; i < textureFiles.Length; i++)
  15.     {
  16.         // 將材質圖檔案加上關連
  17.         live2DModel.setTexture(i, textureFiles[i]);
  18.     }
  19.     // 指定Live2D模型的繪畫位置
  20.     float modelWidth = live2DModel.getCanvasWidth();
  21.     live2DCanvasPos = Matrix4x4.Ortho(0, modelWidth, modelWidth, 0, -50.0f, 50.0f);
  22.  
  23.     // 讀取物理演算檔案
  24.     if (physicsFile != null) physics = L2DPhysics.load(physicsFile.bytes);
  25. } 

Update處理
Update處理負責感應滑鼠點擊的處理
  1. void Update()
  2. {
  3.     var pos = Input.mousePosition;
  4.     // 按滑鼠左鍵時
  5.     if (Input.GetMouseButtonDown(0))
  6.     {
  7.         // 無處理程序
  8.     }
  9.     // 按住滑鼠左鍵時
  10.     else if (Input.GetMouseButton(0))
  11.     {
  12.         dragMgr.Set(pos.x / Screen.width*2-1, pos.y / Screen.height*2-1);
  13.     }
  14.     //  放開滑鼠左鍵時
  15.     else if (Input.GetMouseButtonUp(0))
  16.     {
  17.         dragMgr.Set(00);
  18.     }
  19. } 



OnRenderObject處理
OnRenderObject處理是配合感應到的滑鼠點擊位置,來讓臉的方向與身體的方向變化的處理

  1. void OnRenderObject()
  2. {
  3.     if (live2DModel == null)
  4.     {
  5.         load();
  6.     }
  7.  
  8.     live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);
  9.  
  10.     if ( ! Application.isPlaying)
  11.     {
  12.         live2DModel.update();
  13.         live2DModel.draw();
  14.         return;
  15.     }
  16.  
  17.     dragMgr.update();
  18.     // 臉的方向
  19.     live2DModel.setParamFloat("PARAM_ANGLE_X" , dragMgr.getX(30);
  20.     live2DModel.setParamFloat("PARAM_ANGLE_Y", dragMgr.getY() * 30);
  21.     // 身體的方向
  22.     live2DModel.setParamFloat("PARAM_BODY_ANGLE_X", dragMgr.getX() * 10);
  23.     // 眼睛的動作
  24.     live2DModel.setParamFloat("PARAM_EYE_BALL_X", -dragMgr.getX());
  25.     live2DModel.setParamFloat("PARAM_EYE_BALL_Y", -dragMgr.getY());
  26.     // 呼吸
  27.     double timeSec = UtSystem.getUserTimeMSec() / 1000.0;
  28.     double t = timeSec * 2 * Math.PI;
  29.     live2DModel.setParamFloat("PARAM_BREATH"(float)(0.5f + 0.5f * Math.Sin(t / 3.0)));
  30.     // 眨眼
  31.     eyeBlink.setParam(live2DModel);
  32.  
  33.     if (physics != null) physics.updateParam(live2DModel);
  34.  
  35.     live2DModel.update();
  36.     live2DModel.draw();
  37. }


也就是說,透過對這些ID設定算式,就能夠決定拖曳滑鼠時,模型本身的動作



雖然這裡的解說應該很籠統,但只要能讓各位稍微理解這裡寫的解說就行了
一開始最重要的就是透過調整各種數字的數值與程式,來體會其中的樂趣