Version: 2019.4
언어: 한국어

# Mesh.boneWeights

매뉴얼로 전환
public BoneWeight[] boneWeights ;

## 설명

The bone weights for each vertex in the Mesh, up to a maximum of 4.

The size of this array is either Mesh.vertexCount or zero. The array is sorted by vertex index.

This property uses BoneWeight structs, which represent exactly 4 bone weights per vertex. Within each BoneWeight struct in the array, the bone weights are in descending order and add up to 1. If a vertex is affected by fewer than 4 bones, each of the remaining bone weights must be 0.

To work with more or fewer bone weights per vertex, use the newer Mesh.GetAllBoneWeights and Mesh.SetBoneWeights APIs, which use BoneWeight1 structs.

```using UnityEngine;
using System.Collections;public class ExampleClass : MonoBehaviour
{
void Start()
{
SkinnedMeshRenderer rend = GetComponent<SkinnedMeshRenderer>();
Animation anim = GetComponent<Animation>();        // Build basic mesh
Mesh mesh = new Mesh();
mesh.vertices = new Vector3[] {new Vector3(-1, 0, 0), new Vector3(1, 0, 0), new Vector3(-1, 5, 0), new Vector3(1, 5, 0)};
mesh.uv = new Vector2[] {new Vector2(0, 0), new Vector2(1, 0), new Vector2(0, 1), new Vector2(1, 1)};
mesh.triangles = new int[] {0, 1, 2, 1, 3, 2};
mesh.RecalculateNormals();        // Assign mesh to mesh filter &amp; renderer
rend.material = new Material(Shader.Find("Diffuse"));        // Assign bone weights to mesh
// We use 2 bones. One for the lower vertices, one for the upper vertices.
BoneWeight[] weights = new BoneWeight;        weights.boneIndex0 = 0;
weights.weight0 = 1;        weights.boneIndex0 = 0;
weights.weight0 = 1;        weights.boneIndex0 = 1;
weights.weight0 = 1;        weights.boneIndex0 = 1;
weights.weight0 = 1;        // A BoneWeights array (weights) was just created and the boneIndex and weight assigned.
// The weights array will now be assigned to the boneWeights array in the Mesh.
mesh.boneWeights = weights;        // Create Bone Transforms and Bind poses
// One bone at the bottom and one at the top
Transform[] bones = new Transform;
Matrix4x4[] bindPoses = new Matrix4x4;        bones = new GameObject("Lower").transform;
bones.parent = transform;
// Set the position relative to the parent
bones.localRotation = Quaternion.identity;
bones.localPosition = Vector3.zero;        // The bind pose is bone's inverse transformation matrix
// In this case the matrix we also make this matrix relative to the root
// So that we can move the root game object around freely
bindPoses = bones.worldToLocalMatrix * transform.localToWorldMatrix;        bones = new GameObject("Upper").transform;
bones.parent = transform;
// Set the position relative to the parent
bones.localRotation = Quaternion.identity;
bones.localPosition = new Vector3(0, 5, 0);
// The bind pose is bone's inverse transformation matrix
// In this case the matrix we also make this matrix relative to the root
// So that we can move the root game object around freely
bindPoses = bones.worldToLocalMatrix * transform.localToWorldMatrix;        // assign the bindPoses array to the bindposes array which is part of the mesh.
mesh.bindposes = bindPoses;        // Assign bones and bind poses
rend.bones = bones;
rend.sharedMesh = mesh;        // Assign a simple waving animation to the bottom bone
AnimationCurve curve = new AnimationCurve();
curve.keys = new Keyframe[] {new Keyframe(0, 0, 0, 0), new Keyframe(1, 3, 0, 0), new Keyframe(2, 0.0F, 0, 0)};        // Create the clip with the curve
AnimationClip clip = new AnimationClip();
clip.SetCurve("Lower", typeof(Transform), "m_LocalPosition.z", curve);        // Add and play the clip