看板 GameDesign 關於我們 聯絡資訊
※ 引述《huadi73 (棣)》之銘言: : 我想從 SkinningSample 去改 : 原本他裡面就只是播放動畫而已 : 我現在想要按A然後會有一個動作 : 按B會有另一個動作 : 該怎麼去改呢? : 如果是FBX檔的話 我有 MotionBuild 可以做出兩個以上的 Take : 如果是用.X檔 我也有去設定好了 : 可是不知道為什麼我用.X檔時 他都會出現錯誤 : (好像一個是跟權重有關 而另一個是Bone超過59個) : 我有載過另外一個坦克車的範例 : 他不是動畫檔 而是一個一個物件在程式碼操控 : 這樣感覺好像爆破 希望最後不是這樣來做 : 感覺這部分完成了 遊戲也完成一半了 1.如果要有動作可以像下面寫的方式 你應該知道這個Sample的運行方式吧? 他已經簡化很多很多地方了 你只要直覺得去操控這些物件就可以 Model myModel; AnimationPlayer player; KeyboardState oldState; 之後用來確定按一下只播放一次 先宣告這三個成員 然後在initialize裡面: oldState = Keyboard.GetState(); 然後在LoadContent載入模型和一些資料: myModel = Content.Load<Model>("test"); SkinningData skinningData = myModel.Tag as SkinningData; player = new AnimationPlayer(skinningData); 之後再Update裡面如是寫: SkinningData skinningData = myModel.Tag as SkinningData; player.Update(gameTime.ElapsedGameTime,true, Matrix.Identity); KeyboardState newState = Keyboard.GetState(); if (oldState.IsKeyUp(Keys.A) && newState.IsKeyDown(Keys.A)) { AnimationClip clip = skinningData.AnimationClips["Action B"]; player.StartClip(clip); } oldState = newState; 注意上面的Action B 是你在建模軟體裡面使用的一段關鍵影格稱號 player會把這段clip播放出來 之後是Draw裡面的寫法: Matrix[] bones = player.GetSkinTransforms(); foreach (ModelMesh mesh in myModel.Meshes) { foreach (Effect effect in mesh.Effects) { effect.Parameters["Bones"].SetValue(bones); effect.Parameters["View"].SetValue(view); effect.Parameters["Projection"].SetValue(projection); } mesh.Draw(); } 我想這個繪出模型的方式你應該很熟了@@ 比較特別的是Bones得到是用player的GetSkinTransForms(); 另外如果你有學過HLSL你應該知道下面的Effect為什麼要這樣寫@@ 再來是骨架的問題 SkinnedModelProcesser開頭有個設定 const int MaxBones = 59; 我不知道為什麼要這樣寫 我不確定改了之後會不會有問題 還有就是 3D物件含有骨架將會變得很複雜 所以你可能要設定好你的建模軟體Export的配置 確定相容於XNA當中 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.228.238.218
huadi73:謝謝~我再去試試看 那個59是XNA只支持到59 08/17 23:10
※ 編輯: wa007123456 來自: 125.228.238.218 (08/17 23:15)
wa007123456:不會@@ 我之前也被這個相容性弄到發瘋 08/17 23:15
changyin:MaxBone 國外有超過59的~不過很多要改寫 直接改數字會有 08/18 16:03
changyin:誤~也要import 其他dll檔 08/18 16:05