好吧,这篇文章不会解释如何代码工作,但如何获得代码TOOOOO工作。 Masterprompt足够好地解释代码here。如果您想了解代码如何工作,请遵循该链接。
不管怎么说,要做的事情就是将两个对象合并在一起,使一个对象运行基础对象的动画。
示例使用可能是
是如何得到的,而无需一个图形艺术家,我是用保险丝和Mixamo可以创造我的资产这也是工作中的肉和骨头。我高度推荐这些程序。如果没有这些程序,你仍然可以很容易地得到这个工作,但我会解释如何使用它,就好像你正在使用它一样。
好吧,下载Adobe保险丝并创建您的基本播放器。 (最好是裸体) 现在将该玩家保存为你喜欢的任何物品(我使用Main_Player_Naked) 将该玩家上传到mixamo进行自动索具,从mixamo下载模型后将其导入统一。 (在这一点上,假设你知道如何将模型设置为一个统一的人形)
现在你的球员被创建并导入到团结领域,并继续制作他的动画或者做他想做的任何事情。无论你对他做什么,无论你将什么添加到你的播放器中,新的装甲/头发/胡子都能正常工作。好的,现在我们要创建装甲的时候了。继续,重新打开保险丝中的裸体玩家,并用您希望他拥有的新资产重新创建他(不要更改任何体型尺寸,只需添加新对象)。 (别担心,我们不会将整个模型切换出来,这仅仅是我们不需要自己操纵新资产)现在您已经看到了新资产,请继续并按照第一步创造裸体演奏。因此,保存新创建的角色并导入到mixamo中进行自动绑定。现在下载并将新玩家导入统一。删除关闭播放器中的所有对象,除了新的资产(这是一个独立的网格,该对象下的裸播放器)
现在,我们将使用代码Masterprompts发布
我已经重写它,所以这里是我的新代码
using UnityEngine;
using System.Collections;
public class CreatePlayer : MonoBehaviour
{
public GameObject objPlayer;
public GameObject objLimb;
public GameObject objAdded;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.H))
AddLimb(objLimb, objPlayer);
if (Input.GetKeyDown(KeyCode.J))
Destroy(objAdded);
}
//
void AddLimb(GameObject BonedObj, GameObject RootObj)
{
var BonedObjects = BonedObj.gameObject.GetComponentsInChildren<SkinnedMeshRenderer>();
foreach (SkinnedMeshRenderer SkinnedRenderer in BonedObjects)
{
ProcessBonedObject(SkinnedRenderer, RootObj);
}
}
private void ProcessBonedObject(SkinnedMeshRenderer ThisRenderer, GameObject RootObj)
{
/* Create the SubObject */
var NewObj = new GameObject(ThisRenderer.gameObject.name);
NewObj.transform.parent = RootObj.transform;
/* Add the renderer */
NewObj.AddComponent<SkinnedMeshRenderer>();
var NewRenderer = NewObj.GetComponent<SkinnedMeshRenderer>();
/* Assemble Bone Structure */
var MyBones = new Transform[ThisRenderer.bones.Length];
for (var i = 0; i < ThisRenderer.bones.Length; i++)
MyBones[i] = FindChildByName(ThisRenderer.bones[i].name, RootObj.transform);
/* Assemble Renderer */
NewRenderer.bones = MyBones;
NewRenderer.sharedMesh = ThisRenderer.sharedMesh;
NewRenderer.materials = ThisRenderer.materials;
objAdded = NewObj;
}
private Transform FindChildByName(string ThisName,Transform ThisGObj)
{
Transform ReturnObj;
if(ThisGObj.name==ThisName)
return ThisGObj.transform;
foreach (Transform child in ThisGObj)
{
ReturnObj = FindChildByName(ThisName, child);
if(ReturnObj)
return ReturnObj;
}
return null;
}
}
这是很快就扔在一起。我建议让它更好。
但是,只需添加裸体玩家太objPlayer和资产添加到objLimb。
运行您的游戏并按'H'创建资产,'J'将其删除。
Iv真的设法让它工作,并会写出详细的教程,解释我的方法使其工作。我只需要一点点,以更好地工作 – Sniffle6
https://gyazo.com/19c49bd6d2ee32874bacbb0fc58f22c3 – Sniffle6