T0R0ブロマガ相关翻译计划(0.5)_PMDE插件的制作方法 骨骼操作篇4
※本文不保证百分之百的翻译准确,仅供参考,具体内容依然以日文原版为准。
原作者T0R0的博客原地址:https://sp.ch.nicovideo.jp/t0r0/blomaga/ar155654
本文内容与暗锅插件并无关系,但也可能能对他人有所帮助,所以也进行翻译。关于对本文翻译内容玩文字游戏、钻空子,从而违反原文使用规约的行为,本人概不负责。
※非原文部分会使用灰色字色。对一些个人认为重要的部分会进行加粗/变色强调。
PMXe相关名词以Emil制作的“多功能信息处理与汉化插件”中的文本为准。
文中图片均为本人依照原博客自作而非搬运,请注意。
对个别词的理解有一定的主观成分,且本文有编程相关专业名词可能会有误译,欢迎评论区理性讨论。
※本篇翻译文章并未获得原作者授权/知悉,仅做交流用途。如有不妥,请评论区留言告知,我会立刻进行删除。
※请勿使用本文章内任何文本/图片做个人参考以外的其他用途,包括但不限于用于汉化文本,二次上传至公共网络等。
○仅限于「PMDE插件的制作方法」系列文章,请自由地取用文章中的代码部分文本(蓝色文本)。对代码中的注释都进行了翻译,虽然并不专业,但希望能为中文使用者提供些许的便利。

原文投稿日期为2013/03/12 19:24

PMDE插件的制作方法 骨骼操作篇4
虽说是插件但也只是普通的C#所以有很多种记载方法,但为了让文章更加易懂,在此为记载方法添加限制。并不是只有这一种写法,请注意。
与上次相同,本文会以此项目示例文件(http://bowlroll.net/up/dl15339)为基础进行说明,所以请务必下载。
在此文件中事先记载了骨骼操作所必需的功能。说明也会按照文件内容的顺序进行。以及,可以使用此项目文件中的内容制作插件。
接下来将会记载骨骼操作与对应的代码。与上次相同,应该直接复制粘贴到项目示例文件中就可以使用。
・来做腕IK吧。
将要制作右腕IK(PMX版)。
//首先获取所需的腕骨的对象
//获取必要骨骼
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先各自复制原骨骼。
IPXBone RightArmP = (IPXBone)RightArm.Clone();
IPXBone RightElbowP = (IPXBone)RightElbow.Clone();
IPXBone RightWristP = (IPXBone)RightWrist.Clone();
//右腕+的设置
//设置骨骼名/骨骼的亲骨/骨骼的朝向。
RightArmP.Name = "右腕+";
RightArmP.Parent = RightShoulder;
this.SetToBone(RightArmP, RightElbowP);
//右ひじ+的设置
//设置骨骼名/骨骼的亲骨/骨骼的朝向。
RightElbowP.Name = "右ひじ+";
RightElbowP.Parent = RightArmP;
this.SetToBone(RightElbowP, RightWristP);
//右手首+的设置
//设置骨骼名/骨骼的亲骨/骨骼的朝向。
RightWristP.Name = "右手首+";
RightWristP.Parent = RightElbowP;
this.SetToOffset(RightWristP, new V3(0.0f, 1.0f, 0.0f));
//右腕IK骨的设置
//将成为右腕IK骨的骨骼定义为右手首的复制骨。
IPXBone RightArmIK = (IPXBone)RightWrist.Clone();
//设置名称。
RightArmIK.Name = "右腕IK";
RightArmIK.Parent = (IPXBone)this.PMX.Bone[0];
//使其能够移动/旋转
//虽然在MMD中IK骨即使不开启移动和旋转也能正常运动
//但在MMM中使用时必须要好好设置。
RightArmIK.IsRotation = true;
RightArmIK.IsTranslation = true;
//设置IK Target。
this.AddIK(RightArmIK, RightWristP);
//设置IKLink。
this.AddIKLink(RightArmIK, RightElbowP);
this.AddIKLink(RightArmIK, RightArmP);
this.SetToOffset(RightArmIK, new V3(0.0f, 1.0f, 0.0f));
//为了将右腕+与右ひじ+的旋转赋予给を右腕/右ひじ而进行旋转付予的设定
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を作ろう。
//首先获取所需的足骨的对象
//获取必要骨骼
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骨的设置
//将成为右足IK骨的骨骼定义为右足首的复制骨。
IPXBone RightLegIK = (IPXBone)RightAnkle.Clone();
//设置名称。
RightLegIK.Name = "右足IK";
RightLegIK.Parent = (IPXBone)this.PMX.Bone[0];
//使其能够移动/旋转
//虽然在MMD中IK骨即使不开启移动和旋转也能正常运动
//但在MMM中使用时必须要好好设置。
RightLegIK.IsRotation = true;
RightLegIK.IsTranslation = true;
//设置IK Target。
this.AddIK(RightLegIK, RightAnkle);
//设置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。
下次将进行多段的记载。