T0R0ブロマガ相關(guān)翻譯計(jì)劃(0.6)_PMDE插件的制作方法 骨骼操作篇5
※本文不保證百分之百的翻譯準(zhǔn)確,僅供參考,具體內(nèi)容依然以日文原版為準(zhǔn)。
原作者T0R0的博客原地址:https://sp.ch.nicovideo.jp/t0r0/blomaga/ar155800
本文內(nèi)容與暗鍋插件并無關(guān)系,但也可能能對(duì)他人有所幫助,所以也進(jìn)行翻譯。關(guān)于對(duì)本文翻譯內(nèi)容玩文字游戲、鉆空子,從而違反原文使用規(guī)約的行為,本人概不負(fù)責(zé)。
※非原文部分會(huì)使用灰色字色。對(duì)一些個(gè)人認(rèn)為重要的部分會(huì)進(jìn)行加粗/變色強(qiáng)調(diào)。
PMXe相關(guān)名詞以Emil制作的“多功能信息處理與漢化插件”中的文本為準(zhǔn)。
文中圖片均為本人依照原博客自作而非搬運(yùn),請(qǐng)注意。
對(duì)個(gè)別詞的理解有一定的主觀成分,且本文有編程相關(guān)專業(yè)名詞可能會(huì)有誤譯,歡迎評(píng)論區(qū)理性討論。
※本篇翻譯文章并未獲得原作者授權(quán)/知悉,僅做交流用途。如有不妥,請(qǐng)?jiān)u論區(qū)留言告知,我會(huì)立刻進(jìn)行刪除。
※請(qǐng)勿使用本文章內(nèi)任何文本/圖片做個(gè)人參考以外的其他用途,包括但不限于用于漢化文本,二次上傳至公共網(wǎng)絡(luò)等。
○僅限于「PMDE插件的制作方法」系列文章,請(qǐng)自由地取用文章中的代碼部分文本(藍(lán)色文本)。對(duì)代碼中的注釋都進(jìn)行了翻譯,雖然并不專業(yè),但希望能為中文使用者提供些許的便利。

原文投稿日期為2013/03/12 21:11

PMDE插件的制作方法 骨骼操作篇4
雖說是插件但也只是普通的C#所以有很多種記載方法,但為了讓文章更加易懂,在此為記載方法添加限制。并不是只有這一種寫法,請(qǐng)注意。
與上次相同,本文會(huì)以此項(xiàng)目示例文件(http://bowlroll.net/up/dl15339)為基礎(chǔ)進(jìn)行說明,所以請(qǐng)務(wù)必下載。
在此文件中事先記載了骨骼操作所必需的功能。說明也會(huì)按照文件內(nèi)容的順序進(jìn)行。以及,可以使用此項(xiàng)目文件中的內(nèi)容制作插件。
接下來將會(huì)記載骨骼操作與對(duì)應(yīng)的代碼。與上次相同,應(yīng)該直接復(fù)制粘貼到項(xiàng)目示例文件中就可以使用。
1.來做多段化吧
作為示例將使右ひじ多段化。
//試著把右ひじ多段化。
IPXBone BaseBone = (IPXBone)this.PMX.Bone[this.GetBoneIndex("右ひじ", 1)];
//制作一個(gè)暫時(shí)儲(chǔ)存多段骨的箱子
List<IPXBone> LayerBoneList = new List<IPXBone>();
//多段數(shù)
int layer = 3;
for (int i = 0; i < layer; i++)
{
//從原骨骼中復(fù)制出多段骨
IPXBone LayerBone = (IPXBone)BaseBone.Clone();
//為了不重名進(jìn)行改名
LayerBone.Name = BaseBone.Name + "_" + i.ToString();
//將骨骼追加與原骨骼的上方(骨骼順序)
this.UpperInsertBone(LayerBone, BaseBone);
//保存于暫時(shí)儲(chǔ)存箱
LayerBoneList.Add(LayerBone);
}
//親骨的設(shè)置
LayerBoneList[0].Parent = BaseBone.Parent;
for (int j = 1; j < layer; j++)
{
LayerBoneList[j].Parent = LayerBoneList[j - 1];
}
BaseBone.Parent = LayerBoneList[layer - 1];
這樣就姑且是將右ひじ進(jìn)行了3段多段化。
但是,以各個(gè)單獨(dú)骨骼為單位來記載這些內(nèi)容比較麻煩
所以接下來試著把多段化的部分記為函數(shù)。
public void CreateLayerBone(IPXBone BaseBone,int layer = 3){
//暫時(shí)儲(chǔ)存多段骨的箱子
List<IPXBone> LayerBoneList = new List<IPXBone>();
for (int i = 0; i < layer; i++)
{
//從原骨骼中復(fù)制出多段骨
IPXBone LayerBone = (IPXBone)BaseBone.Clone();
//為了不重名進(jìn)行改名
LayerBone.Name = BaseBone.Name + "_" + i.ToString();
//將骨骼追加與原骨骼的上方(骨骼順序)
this.UpperInsertBone(LayerBone, BaseBone);
//保存于暫時(shí)儲(chǔ)存箱
LayerBoneList.Add(LayerBone);
}
//親骨的設(shè)置
LayerBoneList[0].Parent = BaseBone.Parent;
for (int j = 1; j < layer; j++)
{
LayerBoneList[j].Parent = LayerBoneList[j - 1];
}
BaseBone.Parent = LayerBoneList[layer - 1];
}
按這樣的感覺進(jìn)行函數(shù)化后添加到項(xiàng)目里的話
就可以只記載為以下內(nèi)容。
例)各自多段化右肩(10段)/右腕(10段)/右ひじ(10段)/右手首(3段)。
IPXBone RightShoulder = (IPXBone)this.PMX.Bone[this.GetBoneIndex("右肩", 1)];
IPXBone RightArm = (IPXBone)this.PMX.Bone[this.GetBoneIndex("右腕", 1)];
IPXBone RightElbow = (IPXBone)this.PMX.Bone[this.GetBoneIndex("右ひじ", 1)];
IPXBone RightWrist = (IPXBone)this.PMX.Bone[this.GetBoneIndex("右手首", 1)];
this.CreateLayerBone(RightShoulder,10);
this.CreateLayerBone(RightArm,10);
this.CreateLayerBone(RightElbow,10);
this.CreateLayerBone(RightWrist,3);
像這樣整理為處理單元后后續(xù)就會(huì)便利很多。
下次將會(huì)記載骨骼表示枠相關(guān)的內(nèi)容。