Exemple #1
0
    /// <summary>
    /// 打开快速蒙皮窗口
    /// </summary>
    void OpenSkinWindow()
    {
        SkeletonSkin _SkeletonSkin = EditorWindow.GetWindowWithRect <SkeletonSkin>(new Rect(0, 0, 120, 30), false, "快速蒙皮");

        _SkeletonSkin.titleContent             = new GUIContent(EditorGUIUtility.IconContent("AvatarInspector/BodySilhouette"));
        _SkeletonSkin.titleContent.text        = "快速蒙皮";
        _SkeletonSkin.autoRepaintOnSceneChange = true;
        _SkeletonSkin.Show();
        _SkeletonSkin._MeshAnimation = _MeshAnimation;
    }
Exemple #2
0
    //If we have a shirt that's already on one player, we can't just use the Equip method because it places it in the wrong spot?
    //Use this instead I guess
    public void ReassignSkin(SkeletonSkin equip, Skeleton skel)
    {
        List <Transform> b = new List <Transform>();

        foreach (var e in equip.skeleton)
        {
            BoneDefintion bd = skel.rigDefinition.Find((d) => e == d.name);
            b.Add(skel.rigDefinition[bd.index].gameObject.transform);
        }

        SkinnedMeshRenderer s = equip.GetComponent <SkinnedMeshRenderer>();

        s.bones            = b.ToArray();
        s.rootBone         = skel.rootBone;
        s.transform.parent = skel.rootBone.parent.parent;
    }
Exemple #3
0
    //Call this to move a skinned mesh renderer from one skeleton to another
    //Skeletons must match!
    public void EquipSkin(SkeletonSkin skin)
    {
        List <Transform> b = new List <Transform>();

        foreach (var bone in skin.skeleton)
        {
            //we need a list (b) that has all the bones that these two share?
            //for every bone precached in the skin
            //we need to find that corresponding bone in our rigDef and add it to a list

            //find bone with name bone (string value)
            BoneDefintion bd = rigDefinition.Find((d) => bone == d.name);

            b.Add(rigDefinition[bd.index].gameObject.transform);
        }

        skin.smr.bones            = b.ToArray();
        skin.smr.rootBone         = rootBone;
        skin.smr.transform.parent = rootBone.parent;
    }
    internal void CopyToSkeleton(Skeleton skeleton, GameObject parent, Item item)
    {
        Func <ItemSkinDirectory.Skin, bool> func = null;

        SkeletonSkin[] skeletonSkins = this.SkeletonSkins;
        for (int i = 0; i < (int)skeletonSkins.Length; i++)
        {
            SkeletonSkin skeletonSkin = skeletonSkins[i];
            GameObject   gameObject   = new GameObject();
            gameObject.transform.parent = parent.transform;
            skeletonSkin.DuplicateAndRetarget(gameObject, skeleton).updateWhenOffscreen = true;
            if (item != null && item.skin > (long)0)
            {
                ItemSkinDirectory.Skin[]            skinArray = item.info.skins;
                Func <ItemSkinDirectory.Skin, bool> func1     = func;
                if (func1 == null)
                {
                    Func <ItemSkinDirectory.Skin, bool> func2 = (ItemSkinDirectory.Skin x) => (long)x.id == item.skin;
                    Func <ItemSkinDirectory.Skin, bool> func3 = func2;
                    func  = func2;
                    func1 = func3;
                }
                ItemSkinDirectory.Skin skin = ((IEnumerable <ItemSkinDirectory.Skin>)skinArray).FirstOrDefault <ItemSkinDirectory.Skin>(func1);
                if (skin.id == 0 && item.skin > (long)0)
                {
                    Rust.Workshop.WorkshopSkin.Apply(gameObject, item.skin, null);
                    return;
                }
                if ((long)skin.id != item.skin)
                {
                    return;
                }
                ItemSkin itemSkin = skin.invItem as ItemSkin;
                if (itemSkin == null)
                {
                    return;
                }
                itemSkin.ApplySkin(gameObject);
            }
        }
    }