public void CreateControlPoints(SkinnedMeshRenderer skin) { if (skin.sharedMesh != null) { controlPoints = new ControlPoints.Point[skin.sharedMesh.vertices.Length]; if (points == null) { points = gameObject.AddComponent <ControlPoints>(); } for (int i = 0; i < skin.sharedMesh.vertices.Length; i++) { Vector3 originalPos = skin.sharedMesh.vertices[i]; controlPoints[i] = new ControlPoints.Point(originalPos); controlPoints[i].index = i; points.SetPoint(controlPoints[i]); GameObject b = new GameObject(skin.name + " Control Point"); // Unparent the skin temporarily before adding the control point Transform skinParent = skin.transform.parent; skin.transform.parent = null; // Reset the rotation before creating the mesh so the UV's will align properly Quaternion localRotation = skin.transform.localRotation; skin.transform.localRotation = Quaternion.identity; b.transform.position = new Vector3(skin.transform.position.x + (skin.sharedMesh.vertices[i].x * skin.transform.localScale.x), skin.transform.position.y + (skin.sharedMesh.vertices[i].y * skin.transform.localScale.y), skin.transform.position.z + (skin.sharedMesh.vertices[i].z * skin.transform.localScale.z)); b.transform.parent = skin.transform; ControlPoint[] cps = b.transform.parent.transform.GetComponentsInChildren <ControlPoint>(); if (cps != null && cps.Length > 0) { b.gameObject.name = b.gameObject.name + cps.Length; } Undo.RegisterCreatedObjectUndo(b, "Add control point"); ControlPoint controlPoint = b.AddComponent <ControlPoint>(); controlPoint.index = i; controlPoint.skin = skin; controlPoint.originalPosition = b.transform.localPosition; // Reset the rotations of the object skin.transform.localRotation = localRotation; skin.transform.parent = skinParent; } } }
public void CreateControlPoints(SkinnedMeshRenderer skin) { if (skin.sharedMesh != null) { controlPoints = new ControlPoints.Point[skin.sharedMesh.vertices.Length]; if (points == null) { points = gameObject.AddComponent <ControlPoints>(); } for (int i = 0; i < skin.sharedMesh.vertices.Length; i++) { Vector3 originalPos = skin.sharedMesh.vertices[i]; controlPoints[i] = new ControlPoints.Point(originalPos); controlPoints[i].index = i; points.SetPoint(controlPoints[i]); } } }