コード例 #1
0
        /// <summary>
        /// Skinning mesh to new skinned mesh renderer with choosed weight markers settings
        /// </summary>
        public void SkinMesh(bool addTailAnimator, Vector3 newObjectOffset)
        {
            // Remembering data and preparing objects with components
            List <Color32> baseVertColors = new List <Color32>();

            GetBaseMesh().GetColors(baseVertColors);

            // Doing skinning
            vertexDatas = FTail_Skinning.CalculateVertexWeightingData(
                GetBaseMesh(), ghostBones, SpreadOffset, LimitBoneWeightCount, SpreadValue, SpreadPower);

            SkinnedMeshRenderer newSkinnedMesh = FTail_Skinning.SkinMesh(baseMesh, transform, ghostBones, vertexDatas);

            if (newSkinnedMesh == null)
            {
                Debug.LogError("[Tail Animator Skinning] Creating skinned mesh failed!"); return;
            }


            // Skin renderer quality
            switch (LimitBoneWeightCount)
            {
            case 1: newSkinnedMesh.quality = SkinQuality.Bone1; break;

            case 2: newSkinnedMesh.quality = SkinQuality.Bone2; break;

            case 4: newSkinnedMesh.quality = SkinQuality.Bone4; break;

            default: newSkinnedMesh.quality = SkinQuality.Auto; break;
            }

            // Filling new mesh with materials
            MeshRenderer meshRend = GetComponent <MeshRenderer>();

            if (meshRend)
            {
                newSkinnedMesh.materials       = meshRend.sharedMaterials;
                newSkinnedMesh.sharedMaterials = meshRend.sharedMaterials;
            }

            // Adding tail animator
            if (addTailAnimator)
            {
                TailAnimator2 t = newSkinnedMesh.bones[0].gameObject.AddComponent <TailAnimator2>();
                t.StartBone = newSkinnedMesh.bones[0];
                t.EndBone   = newSkinnedMesh.bones[newSkinnedMesh.bones.Length - 1];
            }

            // Setting new object position to be next to current model
            newSkinnedMesh.transform.position = transform.position + new Vector3(1f, 1f, 1f);

            // Create asset for new model so it not disappear when we create prefab from this gameObject
            string newMeshPath = System.IO.Path.GetDirectoryName(AssetDatabase.GetAssetPath(baseMesh));

            AssetDatabase.CreateAsset(newSkinnedMesh.sharedMesh, newMeshPath + "/" + newSkinnedMesh.name + ".mesh");
            AssetDatabase.SaveAssets();

            Debug.Log("New skinned mesh '" + newSkinnedMesh.name + ".mesh" + "' saved under path: '" + newMeshPath + "'");
        }
コード例 #2
0
        /// <summary>
        /// When something changes in inspector, let's recalculate parameters
        /// </summary>
        private void OnValidate()
        {
            if (!initValues)
            {
                MeshRenderer m = GetComponent <MeshRenderer>();
                if (m)
                {
                    DistanceValue = m.bounds.extents.magnitude / 7f;
                }
                initValues = true;
            }

            if (AutoMarkersCount < 2)
            {
                AutoMarkersCount = 2;
            }

            if (!GetBaseMesh())
            {
                return;
            }

            if (CustomBoneMarkers == null)
            {
                CustomBoneMarkers = new Transform[0];                            // Prevent error log when adding component
            }
            // Use only custom markers if they're assigned
            if (CustomBoneMarkers.Length > 0)
            {
                ghostBones = CustomBoneMarkers;
            }
            else // Use auto markers
            {
                CalculateAutoMarkers();
                ghostBones = autoMarkers;
            }

            if (RealtimeUpdate)
            {
                vertexDatas = FTail_Skinning.CalculateVertexWeightingData(
                    GetBaseMesh(), ghostBones, SpreadOffset, LimitBoneWeightCount, SpreadValue, SpreadPower);

                UpdatePreviewMesh();
            }
        }