遊戲技術相關研究

2012年8月12日 星期日

【Away3D】教學 - 秀md2檔案加切換動作

上午1:02 Posted by Channel Chung No comments

點圖或點我執行

    在這教程開始前,我們要先來介紹一下輸出md2規格的相關工具,不知道大家知不知道md2其實是Quake2遊戲的模型規格,所以只要上google大神搜尋,就可以得到相當多的訊息。。。以下介紹這兩個工具也是從google大神搜尋到的,第一個工具是MD2 Importer / Exporter的3ds Max Script外掛,下載完後將檔案解開然後把整個md2-import-export-3dsmax目錄拷貝到您安裝3ds Max的stdplugs目錄內,開啟3ds Max找到下面圖視的地方就可以找到這個工具了。。


    接下來當然是載入您想輸出的3dsMax檔作輸出的動作囉,不過這個工具有個bugs就是無法輸出動作標籤,所以這時候就要借助我們第二個工具Misfit Model 3D來解決這個問題了,檔案下載完後將其安裝到電腦上,執行檔案並載入您剛從3dsMax輸出的md2檔案,然後使用Animation Sets選項將模型的動作透過Split功能一一將切割開來,如下圖:


    在將檔案回存,這樣就有一個正確可使用動作的md2檔案了,接下來是程式部分,因為這教學的程式碼是從上一篇的秀3ds教學修改而來的,所以大部分的程式碼都一樣,所以筆者只講解不同的部分,以下是載入md2的程式碼,載入完成會去呼叫onMeshComplete這個事件函數:

// 設定載入md2檔.
AssetLibrary.loadData(new OgreModel(), null, null, new MD2Parser());
AssetLibrary.addEventListener(AssetEvent.ASSET_COMPLETE, onMeshComplete);

以下是onMeshComplete事件函數主要處理建立載入的mesh跟模型動作:

private function onMeshComplete(event:AssetEvent):void{  
  // 設定貼圖.
  _m1.specular = 0.9;

  // 判斷mesh載入成功.
  if (event.asset.assetType == AssetType.MESH){
    // 紀錄Mesh指標.
    _mesh = event.asset as Mesh;
    // 將貼圖貼到網格.
    _mesh.material = _m1;
    _mesh.y = -250;

    // 建立動作.
    _vertexAnimator = new VertexAnimator(_animationSet);
    // 設定動作.
    _vertexAnimator.play("see");
    _mesh.animator = _vertexAnimator;

    // 將動作速度加快3倍.
    _mesh.animator.playbackSpeed = 3.0;
    // 將Mesh加入view.
    _view.scene.addChild(_mesh);

  // 判斷動作載入成功.
  }else if (event.asset.assetType == AssetType.ANIMATION_SET){
    // 紀錄動作指標.
    _animationSet = event.asset as VertexAnimationSet;
  }   
}

以下是處理按鍵輸入切換模型動作:

  private function onKeyboard(e:KeyboardEvent):void{
    var mesh:Mesh = null;
    var i:int     = 0;
 
    switch (e.keyCode) {
      // 按下1鍵,動作1.
      case Keyboard.NUMBER_1:
        _vertexAnimator.play("up");
        break;
      // 按下2鍵,動作2.
      case Keyboard.NUMBER_2:
        _vertexAnimator.play("see");
        break;
      // 按下3鍵,動作3.
      case Keyboard.NUMBER_3:
        _vertexAnimator.play("hit");
        break;
      // 按下3鍵,動作4.    
      case Keyboard.NUMBER_4:
        _vertexAnimator.play("down");
        break;    
      }  
  }

就這樣,這裡有原始碼可供下載

註:特別感謝全宇宙無敵第一的好朋友Leo、Celtic提供美術部分的製作與協助。

0 意見:

張貼留言