2016-07-16 57 views
1

我一直在想这几天,并尝试了几个不同的东西,并已GOOGLE了相当多。四,特意看了一下这个线程很多统一拼接网格在一起

http://forum.unity3d.com/threads/stitch-multiple-body-parts-into-one-character.16485/

但是我迷茫了,不知道这100%是我想要的。

我只是试图添加一个新的网格到已有的具有自己的网格的gameobject。这是从同一个骨骼结构或动画制作者身上跑出来的,被添加的对象具有粘贴位置所需的骨骼。

https://gyazo.com/19778b3c73ef9a749c8cc338f7e49d79

那物体IM尝试添加到我的球员。我尝试直接将网格关闭,然后将其链接到与动画播放器相同的骨骼结构

当使用fuse/mixamo创建并导入对象时,它将对象添加为父级播放器上单独的网格对象

https://gyazo.com/55ce7442dc186756da4ff149ac3543e5

所以,如果我是禁用的装甲网ID只剩下这

https://gyazo.com/09ffd7c7721f46e6980f895a1a873749

但我想我的导入恰拉没有装甲就可以了。然后,我用玩家和装甲在混合器中打开了角色,并删除了玩家,并留下了骨骼结构和护甲,然后将其作为单独的fbx保存并将其导入到团结中,并将新的装甲fbx粘贴到原始玩家身上试图让它变得过于动态也是它最初来自mixmo对象。但它不,甚至无法将它导入Tpose。当我自己配置​​它时,它不会保存配置,只是继续回到原来的位置。

我想我应该......只有护甲需要的骨头。然后通过某种类型的游戏逻辑来确定装甲物体上的同名骨骼是否被添加到玩家身上,并用装甲的骨骼代替玩家骨骼?但我觉得如果我想这样做,那么我需要将玩家分成几块,以便知道哪些部分要更换玩家。或者有什么办法可以让玩家保持联系,并让装甲跟随玩家的骨骼,我想这将是最简单的事情

我很确定我发布的链接与我想要的差不多。我想我只是不完全理解它,并希望有人帮助我更好地理解它

+0

Iv真的设法让它工作,并会写出详细的教程,解释我的方法使其工作。我只需要一点点,以更好地工作 – Sniffle6

+0

https://gyazo.com/19c49bd6d2ee32874bacbb0fc58f22c3 – Sniffle6

回答

1

好吧,这篇文章不会解释如何代码工作,但如何获得代码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'将其删除。

+0

我想知道的一件事是如何获得导入只有新的资产,而不是必须导入整个字符并删除不需要的一些 – Sniffle6

+0

也发现,似乎没有在搅拌机中工作。但是在MODO中,我用护甲打开了播放器文件,删除了除衔铁和护甲之外的所有文件,并将其导出为fbx。 – Sniffle6