protected void DrawGizmos() { Gizmos.matrix = transform.localToWorldMatrix; var mesh = skinnedRenderer.sharedMesh; var vertices = mesh.vertices; for (int i = 0, n = vertices.Length; i < n; i++) { var v = vertices[i]; Gizmos.DrawSphere(v, 0.001f); } #if UNITY_EDITOR if (attractionBuffer == null) { return; } UnityEditor.Handles.matrix = transform.localToWorldMatrix; var tmp = new SkinnedAttraction[attractionBuffer.count]; attractionBuffer.GetData(tmp); for (int i = 0, n = tmp.Length; i < n; i++) { var attr = tmp[i]; UnityEditor.Handles.Label(attr.position, attr.bone.ToString()); } #endif Gizmos.color = Color.yellow; Gizmos.matrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, Vector3.one); var bindposes = skinnedRenderer.sharedMesh.bindposes; var bones = skinnedRenderer.bones.Select(bone => bone.localToWorldMatrix).ToArray(); var nodes = new SkinnedNode[nodeBuffer.count]; nodeBuffer.GetData(nodes); for (int i = 0, n = nodes.Length; i < n; i++) { var node = nodes[i]; if (node.active <= 0) { continue; } var bind = bindposes[node.index0]; var bone = bones[node.index0]; Vector3 p = (bone * bind).MultiplyPoint(node.position); p = transform.TransformPoint(p); Gizmos.DrawSphere(p, 0.001f); } }
protected SkinnedAttraction[] GeneratePoints(VolumeSampler.Volume volume) { var count = volume.Points.Count; var attractions = new SkinnedAttraction[volume.Points.Count]; for (int i = 0; i < count; i++) { var p = volume.Points[i]; var attr = attractions[i]; attr.position = p; attr.active = 1; attractions[i] = attr; } return(attractions); }