2016-07-16 1 views
1

Iv думал об этом несколько дней и попробовал несколько разных вещей и немного поработал в Google. Iv специально посмотрел на эту тему многоUnity Stitching meshhes

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

Но им путать, и не уверен, что это 100%, что я хотел.

Я просто пытаюсь добавить новую сетку в уже существующий игровой объект со своей собственной сеткой. Это бежит с той же структуры кости или аниматора, добавляемый объект имеет необходимые кости положения, в которое он вставлен.

https://gyazo.com/19778b3c73ef9a749c8cc338f7e49d79

То объекта им пытаются добавить на плеер. Я попытался снять сетку прямо с нее, а затем привязать ее к той же структуре кости, что и анимированный плеер.

Когда объект создается и импортируется с помощью плавкого предохранителя/миксома, он добавляет объект в виде отдельных объектов сетки на родительском проигрывателе

https://gyazo.com/55ce7442dc186756da4ff149ac3543e5

Так что, если я должен был отключить сетчатый идентификатор брони останутся с этой

https://gyazo.com/09ffd7c7721f46e6980f895a1a873749

Но я пытался импортировать мою чару cter без брони на нем. Затем я открыл персонажа с игроком и броней в блендере, удалил игрока и оставил структуру кости и броню, а затем сохранил ее как отдельный 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

Смежные вопросы