T0R0ブロマガ相關(guān)翻譯計(jì)劃(0.5)_PMDE插件的制作方法 骨骼操作篇4
※本文不保證百分之百的翻譯準(zhǔn)確,僅供參考,具體內(nèi)容依然以日文原版為準(zhǔn)。
原作者T0R0的博客原地址:https://sp.ch.nicovideo.jp/t0r0/blomaga/ar155654
本文內(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?19:24

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)目示例文件中就可以使用。
?來做腕IK吧。
將要制作右腕IK(PMX版)。
//首先獲取所需的腕骨的對(duì)象
//獲取必要骨骼
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)];
//接下來是作為IK Target的右手首P
//為了生成作為IKLink的右腕P/右ひじP先各自復(fù)制原骨骼。
IPXBone RightArmP = (IPXBone)RightArm.Clone();
IPXBone RightElbowP = (IPXBone)RightElbow.Clone();
IPXBone RightWristP = (IPXBone)RightWrist.Clone();
//右腕+的設(shè)置
//設(shè)置骨骼名/骨骼的親骨/骨骼的朝向。
RightArmP.Name = "右腕+";
RightArmP.Parent = RightShoulder;
this.SetToBone(RightArmP, RightElbowP);
//右ひじ+的設(shè)置
//設(shè)置骨骼名/骨骼的親骨/骨骼的朝向。
RightElbowP.Name = "右ひじ+";
RightElbowP.Parent = RightArmP;
this.SetToBone(RightElbowP, RightWristP);
//右手首+的設(shè)置
?//設(shè)置骨骼名/骨骼的親骨/骨骼的朝向。
?RightWristP.Name = "右手首+";
RightWristP.Parent = RightElbowP;
this.SetToOffset(RightWristP, new V3(0.0f, 1.0f, 0.0f));
//右腕IK骨的設(shè)置
//將成為右腕IK骨的骨骼定義為右手首的復(fù)制骨。
IPXBone RightArmIK = (IPXBone)RightWrist.Clone();
//設(shè)置名稱。
RightArmIK.Name = "右腕IK";
RightArmIK.Parent = (IPXBone)this.PMX.Bone[0];
//使其能夠移動(dòng)/旋轉(zhuǎn)
//雖然在MMD中IK骨即使不開啟移動(dòng)和旋轉(zhuǎn)也能正常運(yùn)動(dòng)
//但在MMM中使用時(shí)必須要好好設(shè)置。
RightArmIK.IsRotation = true;
RightArmIK.IsTranslation = true;
//設(shè)置IK Target。
this.AddIK(RightArmIK, RightWristP);
//設(shè)置IKLink。
this.AddIKLink(RightArmIK, RightElbowP);
this.AddIKLink(RightArmIK, RightArmP);
this.SetToOffset(RightArmIK, new V3(0.0f, 1.0f, 0.0f));
//為了將右腕+與右ひじ+的旋轉(zhuǎn)賦予給を右腕/右ひじ而進(jìn)行旋轉(zhuǎn)付予的設(shè)定
this.SetAppendRotation(RightArm, RightArmP, 1.0f);
this.SetAppendRotation(RightElbow, RightElbowP, 1.0f);
//把一系列骨骼追加到右肩的上方(骨骼順序)。
this.UpperInsertBone(RightArmIK, RightShoulder);
this.UpperInsertBone(RightArmP, RightShoulder);
this.UpperInsertBone(RightElbowP, RightShoulder);
this.UpperInsertBone(RightWristP, RightShoulder);
通過以上操作即可生成右腕IK。
?足IKを作ろう。
//首先獲取所需的足骨的對(duì)象
//獲取必要骨骼
IPXBone LowerBody = (IPXBone)this.PMX.Bone[this.GetBoneIndex("下半身", 1)]; IPXBone RightLeg = (IPXBone)this.PMX.Bone[this.GetBoneIndex("右足", 1)];
IPXBone RightKnee = (IPXBone)this.PMX.Bone[this.GetBoneIndex("右ひざ", 1)];
IPXBone RightAnkle = (IPXBone)this.PMX.Bone[this.GetBoneIndex("右足首", 1)];
IPXBone RightToe = (IPXBone)this.PMX.Bone[this.GetBoneIndex("右つま先", 1)];
//右足IK骨的設(shè)置
//將成為右足IK骨的骨骼定義為右足首的復(fù)制骨。
IPXBone RightLegIK = (IPXBone)RightAnkle.Clone();
//設(shè)置名稱。
RightLegIK.Name = "右足IK";
RightLegIK.Parent = (IPXBone)this.PMX.Bone[0];
//使其能夠移動(dòng)/旋轉(zhuǎn)
//雖然在MMD中IK骨即使不開啟移動(dòng)和旋轉(zhuǎn)也能正常運(yùn)動(dòng)
//但在MMM中使用時(shí)必須要好好設(shè)置。
RightLegIK.IsRotation = true;
RightLegIK.IsTranslation = true;
//設(shè)置IK Target。
this.AddIK(RightLegIK, RightAnkle);
//設(shè)置IKLink。
this.AddIKLink(RightLegIK, RightKnee);
this.AddIKLink(RightLegIK, RightLeg);
this.SetToOffset(RightLegIK, new V3(0.0f, 0.0f, 1.0f));
//把一系列骨骼追加到右足的上方(骨骼順序)。
this.UpperInsertBone(RightLegIK, RightLeg);
通過以上操作即可生成足IK。
下次將進(jìn)行多段的記載。