欢迎光临散文网 会员登陆 & 注册

T0R0ブロマガ相关翻译计划(0.2)_PMDE插件的制作方法 骨骼操作篇1

2021-11-07 18:33 作者:文音_  | 我要投稿

※本文不保证百分之百的翻译准确仅供参考,具体内容依然以日文原版为准

原作者T0R0的博客原地址:https://sp.ch.nicovideo.jp/t0r0/blomaga/ar151737

 本文内容与暗锅插件并无关系,但也可能能对他人有所帮助,所以也进行翻译。关于对本文翻译内容玩文字游戏、钻空子,从而违反原文使用规约的行为,本人概不负责

※非原文部分会使用灰色字色。对一些个人认为重要的部分会进行加粗/变色强调。

 PMXe相关名词以Emil制作的“多功能信息处理与汉化插件”中的文本为准。

 文中图片均为本人依照原博客自作而非搬运,请注意。

 对个别词的理解有一定的主观成分,且本文有编程相关专业名词可能会有误译,欢迎评论区理性讨论。

※本篇翻译文章并未获得原作者授权/知悉,仅做交流用途。如有不妥,请评论区留言告知,我会立刻进行删除。

请勿使用本文章内任何文本/图片个人参考以外的其他用途,包括但不限于用于汉化文本,二次上传至公共网络等。
○仅限于「PMDE插件的制作方法」系列文章,请自由地取用文章中的代码部分文本(蓝色文本)。对代码中的注释都进行了翻译,虽然并不专业,但希望能为中文使用者提供些许的便利。

原文投稿日期为2013/03/09 23:31

PMDE插件的制作方法 骨骼操作篇1

虽说是插件但也只是普通的C#所以有很多种记载方法,但为了让文章更加易懂,在此为记载方法添加限制。并不是只有这一种写法,请注意。
首先,请下载项目示例文件(http://bowlroll.net/up/dl15315)。
在此文件(BoneSample.cs)中记载了最低限度的基本内容。

接下来对文件中的内容进行说明。

1.操作PMDEditer所必需的变量声明
BoneSample.cs中有着如下的记载。这些内容是为了调取PMDEditer所拥有的模型信息与画面信息,而对记载这些信息的容器进行定义。

/// <summary>
/// 操作PMDEditer所必需的变量群
/// </summary>
//-----------------------------------------------------------
public IPEPluginHost host;
public IPEBuilder builder;
public IPEShortBuilder bd;
public IPEConnector connect;
public IPEXPmd pex;
public IPXPmx PMX;
public IPEPmd PMD;
public IPEFormConnector Form;
public IPXPmxViewConnector PMXView;
public IPEPMDViewConnector PMDView;
//-----------------------------------------------------------


2.为定义的变量储存实际的值。
//-----------------------------------------------------------
//为操作PMD/PMX文件开始施法。
this.host = args.Host;
this.builder = this.host.Builder;
this.bd = this.host.Builder.SC;
this.connect = this.host.Connector;
this.pex = this.connect.Pmd.GetCurrentStateEx();
this.PMD = this.connect.Pmd.GetCurrentState();
this.PMX = this.connect.Pmx.GetCurrentState();
this.Form = this.connect.Form;
this.PMDView = this.connect.View.PMDView;
//-----------------------------------------------------------

这一部分即是为定义的变量储存实际的值。
接下来就能够从这个值中就能获取骨骼信息等信息。

3.获取骨骼信息
示例中的上方部分就是获取骨骼信息的示例。
//-----------------------------------------------------------
//获取骨骼信息
//(一般骨骼Index0是センター骨,所以就获取センター的下一个骨骼的信息)
//在窗口中显示文本:MessageBox.Show
//文本的结合使用「+」来表示。
//换行的写法:System.Environment.NewLine
//将值转换为文本:ToString()
//-----------------------------------------------------------
//通过类似以下的方式就可以获取骨骼的信息。
//以下代码在使用文本「ret」获得骨骼名/骨骼位置/亲骨名称并显示于窗口中。

string ret = "";

ret += "骨骼名:" + this.PMX.Bone[1].Name + System.Environment.NewLine;

ret += "骨骼英语名:" + this.PMX.Bone[1].NameE + System.Environment.NewLine;

ret += "骨骼位置:" + "("
+ this.PMX.Bone[1].Position.X.ToString() + ","
+ this.PMX.Bone[1].Position.Y.ToString() + ","
+ this.PMX.Bone[1].Position.Z.ToString() + ")" + System.Environment.NewLine;

ret += "亲骨:" + this.PMX.Bone[1].Parent.Name + System.Environment.NewLine;
//在窗口中显示文本「ret」
MessageBox.Show(ret);
//-----------------------------------------------------------


4.获取骨骼Index
在PMDEditer中,骨骼/表情/顶点都有各自的序号,并且序号有其意义,所以获取序号的操作即为基础。
//-----------------------------------------------------------
//获取骨骼Index序号
//骨骼数:this.PMX.Bone.Count
//-----------------------------------------------------------
//寻找名为頭的骨骼并获取其骨骼Index。
for (int i = 0; i < this.PMX.Bone.Count; i++)
{
if (this.PMX.Bone[i].Name == "頭")
{
MessageBox.Show("骨骼Index:" + i.ToString());
}
}


这项操作是在从骨骼Index0到骨骼总数为止的范围内寻找名称为「頭」的骨骼,并将第一个找到的结果的Index序号表示于窗口。
这项操作会经常使用,所以写作如下的函数形式会比较方便。

/// <summary>
/// 刺猬获得骨骼Indexを返す関数です。
/// </summary>
/// <param name="BoneName">骨骼名</param>
/// <returns>骨骼Index</returns>
public int GetBoneIndex(string BoneName)
{
for (int i = 0; i < this.PMX.Bone.Count; i++)
{
if (this.PMX.Bone[i].Name == BoneName)
{
return i;
}
}
return -1;
}


5.骨骼的添加方法
通过以下方法来添加骨骼。
//-----------------------------------------------------------
//骨骼的添加方法
//-----------------------------------------------------------
//生成骨骼对象
IPXBone AddBone = (IPXBone)PEStaticBuilder.Pmx.Bone();
//设置骨骼信息
AddBone.Name = "追加骨";
AddBone.Position = new V3(0.0f, 1.0f, 0.0f);
AddBone.Parent = (IPXBone)this.PMX.Bone[0];
//添加骨骼
//单纯地添加骨骼时如下
this.PMX.Bone.Add(AddBone);
//想在某骨骼Index(BoneIndex)上方添加骨骼时如下
this.PMX.Bone.Insert(BoneIndex,AddBone)
//更新PMX文件。
this.connect.Pmx.Update(this.PMX);
//-----------------------------------------------------------

6.骨骼删除方法
通过以下方法来删除骨骼。
//-----------------------------------------------------------
//骨骼的删除方法(删除骨骼Index0的骨骼(DelBone)。)
//-----------------------------------------------------------
IPXBone DelBone = (IPXBone)this.PMX.Bone[0];
this.PMX.Bone.Remove(DelBone);
//更新PMX文件。
this.connect.Pmx.Update(this.PMX);
//-----------------------------------------------------------


骨骼操作篇2继续・・・。


T0R0ブロマガ相关翻译计划(0.2)_PMDE插件的制作方法 骨骼操作篇1的评论 (共 条)

分享到微博请遵守国家法律