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

PMDE插件的制作方法 骨骼操作篇1
雖說(shuō)是插件但也只是普通的C#所以有很多種記載方法,但為了讓文章更加易懂,在此為記載方法添加限制。并不是只有這一種寫(xiě)法,請(qǐng)注意。
首先,請(qǐng)下載項(xiàng)目示例文件(http://bowlroll.net/up/dl15315)。
在此文件(BoneSample.cs)中記載了最低限度的基本內(nèi)容。
接下來(lái)對(duì)文件中的內(nèi)容進(jìn)行說(shuō)明。
1.操作PMDEditer所必需的變量聲明
BoneSample.cs中有著如下的記載。這些內(nèi)容是為了調(diào)取PMDEditer所擁有的模型信息與畫(huà)面信息,而對(duì)記載這些信息的容器進(jìn)行定義。
/// <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.為定義的變量?jī)?chǔ)存實(shí)際的值。
//-----------------------------------------------------------
//為操作PMD/PMX文件開(kāi)始施法。
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;
//-----------------------------------------------------------
這一部分即是為定義的變量?jī)?chǔ)存實(shí)際的值。
接下來(lái)就能夠從這個(gè)值中就能獲取骨骼信息等信息。
3.獲取骨骼信息
示例中的上方部分就是獲取骨骼信息的示例。
//-----------------------------------------------------------
//獲取骨骼信息
//(一般骨骼Index0是センター骨,所以就獲取センター的下一個(gè)骨骼的信息)
//在窗口中顯示文本:MessageBox.Show
//文本的結(jié)合使用「+」來(lái)表示。
//換行的寫(xiě)法:System.Environment.NewLine
//將值轉(zhuǎn)換為文本:ToString()
//-----------------------------------------------------------
//通過(guò)類似以下的方式就可以獲取骨骼的信息。
//以下代碼在使用文本「ret」獲得骨骼名/骨骼位置/親骨名稱并顯示于窗口中。
string ret = "";
ret += "骨骼名:" + this.PMX.Bone[1].Name + System.Environment.NewLine;
ret += "骨骼英語(yǔ)名:" + 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中,骨骼/表情/頂點(diǎn)都有各自的序號(hào),并且序號(hào)有其意義,所以獲取序號(hào)的操作即為基礎(chǔ)。
//-----------------------------------------------------------
//獲取骨骼Index序號(hào)
//骨骼數(shù):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());
}
}
這項(xiàng)操作是在從骨骼Index0到骨骼總數(shù)為止的范圍內(nèi)尋找名稱為「頭」的骨骼,并將第一個(gè)找到的結(jié)果的Index序號(hào)表示于窗口。
這項(xiàng)操作會(huì)經(jīng)常使用,所以寫(xiě)作如下的函數(shù)形式會(huì)比較方便。
/// <summary>
///?刺猬獲得骨骼Indexを返す関數(shù)です。
/// </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.骨骼的添加方法
通過(guò)以下方法來(lái)添加骨骼。
//-----------------------------------------------------------
//骨骼的添加方法
//-----------------------------------------------------------
//生成骨骼對(duì)象
IPXBone AddBone = (IPXBone)PEStaticBuilder.Pmx.Bone();
//設(shè)置骨骼信息
AddBone.Name = "追加骨";
AddBone.Position = new V3(0.0f, 1.0f, 0.0f);
AddBone.Parent = (IPXBone)this.PMX.Bone[0];
//添加骨骼
//單純地添加骨骼時(shí)如下
this.PMX.Bone.Add(AddBone);
//想在某骨骼Index(BoneIndex)上方添加骨骼時(shí)如下
this.PMX.Bone.Insert(BoneIndex,AddBone)
//更新PMX文件。
this.connect.Pmx.Update(this.PMX);
//-----------------------------------------------------------
6.骨骼刪除方法
通過(guò)以下方法來(lái)刪除骨骼。
//-----------------------------------------------------------
//骨骼的刪除方法(刪除骨骼Index0的骨骼(DelBone)。)
//-----------------------------------------------------------
IPXBone DelBone = (IPXBone)this.PMX.Bone[0];
this.PMX.Bone.Remove(DelBone);
//更新PMX文件。
this.connect.Pmx.Update(this.PMX);
//-----------------------------------------------------------
骨骼操作篇2繼續(xù)???。