2016-07-16 7 views
1

Ivはこれを数日間考えていて、いくつかの異なることを試して、かなりグーグルグーグルしました。 IV特にユニティステッチメッシュ一緒に

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

たくさんこのスレッドを見しかし、混乱イム、これは100%が何を望んでいたかどうかわかりません。

Im新しいメッシュを、既存のゲームオブジェクトに独自のメッシュで追加しようとしています。これは、同じ骨構造またはアニメーターから実行されます。追加されるオブジェクトには、貼り付けられる位置に必要な骨があります。私のプレーヤーに追加しようとするオブジェクト・イム・ザッツ

https://gyazo.com/19778b3c73ef9a749c8cc338f7e49d79

。私はメッシュを直接取り出して、プレイヤーと同じボーン構造にリンクしようとしました

オブジェクトが作成され、fuse/mixamoでインポートされると、そのオブジェクトは親プレーヤーに別のメッシュオブジェクトとして追加されます

https://gyazo.com/55ce7442dc186756da4ff149ac3543e5

私は鎧のメッシュIDを無効にすることだったのであれば、この

https://gyazo.com/09ffd7c7721f46e6980f895a1a873749

が残っしかし、私は自分のキャラをインポートしようとしたことそれに鎧を着けていない。その後、私はプレイヤーとアーマーをブレンダーで開き、プレイヤーを削除して骨の構造と鎧を残し、それを別のfbxとして保存し、それをユニティにインポートし、元のプレーヤーに新しいアーマーfbxを貼り付けますもともとmixmoオブジェクトのものだったのですか?しかし、それはdoes not、それはTposeでインポートすることができません。そして、自分で設定すると設定が保存されず、元の場所に戻ります。

私は...鎧に必要な骨しか持っていないと思います。次に、いくつかのタイプのゲームロジックを実行して、鎧がプレイヤーに追加され、鎧の骨でプレイヤーの骨を置き換えるのと同じ名前の鎧オブジェクトを見つけますか?しかし、私はこのようにしたいと思っているように感じる、私はプレーヤーに置き換える必要がある部分を知っているように分割する必要があります。または、プレイヤーを一緒に保つことができ、単に鎧をプレイヤーの骨に沿って動かせるようにする方法があるでしょうか。

私が投稿したリンクはかなり欲しいです。私はちょうど完全に理解していないと思う誰かが私はそれをよりよく理解する助けを求めた

+0

Ivは実際に動作するように管理され、動作させる方法を説明する詳細なチュートリアルを作成します。私はちょうどそれをよりうまくいくために少し必要があります – Sniffle6

+0

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

答えて

1

これは、 Masterpromptは十分にコードを説明しますhere。コードの仕組みを理解したい場合は、そのリンクに従ってください。

とにかく、2つのオブジェクトを一緒にマージして、ベースオブジェクトのアニメーションを実行する1つのオブジェクトを作成する方法について説明します。

例は、四肢からの人の手足を作成

  • 可能性が使用しています。

あまりにも私は、これはあまりにも私のために資産を作成するためのグラフィックアーティストは、ヒューズとmixamoを使用していなくても、仕事を取得する方法の肉と骨をベースプレーヤーを鎧を追加します。私はこれらのプログラムを強く勧めます。これらのプログラムがなくても、簡単にこれを手に入れることはできますが、私はあなたが使っているかのようにそれをやる方法を説明します。

さて、Adobeのヒューズをダウンロードし、ベースプレーヤーを作成してください。 (Main_Player_Nakedを使用しています) mixamoからモデルをダウンロードした後、このプレーヤーをmixamoにアップロードして、自動リギングを行います。 (この時点で、あなたはモデルをユニティでヒューマノイドとして設定する方法を知っていると仮定して)

プレーヤーが作成され、ユニティにインポートされたので、彼にアニメーションやアニメーションを行います。あなたが彼に何をしても、あなたがプレイヤーに何を加えていても、新しい装甲/髪/髭でうまく動作します。

ここで、追加するアーマーを作成します。あなたの裸のプレーヤーをヒューズで開き直して、新しいアセットを持って再作成してください(身体のサイズを変更しないで新しいオブジェクトを追加するだけです)。 (モデル全体を切り替えることを心配しないでください。これは自分で新しいアセットを作成する必要はありません)。新しいアセットを見て、今度は最初のステップに従ってください。裸で演奏しています。したがって、新しく作成されたキャラクタを保存し、自動リギングのためにmixamoにインポートします。今すぐダウンロードして新しいプレーヤーを1つにまとめる。今、私たちは、私が書き換えられてきた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; 
    } 
} 

これは非常に迅速に一緒にスローされました。私はそれをより良くすることを提案します。

しかし、objLimbに追加するobjPlayerとアセットを追加するだけです。

ゲームを実行し、「H」を押すとアセットが作成され、「J」を押すと削除されます。

+0

私が知りたいことの一つは、文字全体をインポートして不要なものを削除する代わりに、新しいアセットだけをインポートする方法ですもの – Sniffle6

+0

また、それを考え出した、ミキサーで動作していないようです。しかし、MODOでは、私は鎧を着てプレイヤーファイルを開いて、アーマチュアと鎧を除くすべてを削除し、それをfbxとしてエクスポートしました。 – Sniffle6