Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }