示例#1
0
            public override void Capture()
            {
                if (m_target == null)
                {
                    return;
                }

                // create buffer
#if UNITY_5_5_OR_NEWER
                int count_max = m_target.main.maxParticles;
#else
                int count_max = m_target.maxParticles;
#endif
                if (m_buf_particles == null)
                {
                    m_buf_particles = new ParticleSystem.Particle[count_max];
                    m_buf_positions = new Vector3[count_max];
                    m_buf_rotations = new Vector4[count_max];
                }
                else if (m_buf_particles.Length != count_max)
                {
                    Array.Resize(ref m_buf_particles, count_max);
                    Array.Resize(ref m_buf_positions, count_max);
                    Array.Resize(ref m_buf_rotations, count_max);
                }

                // copy particle positions & rotations to buffer
                int count = m_target.GetParticles(m_buf_particles);
                for (int i = 0; i < count; ++i)
                {
                    m_buf_positions[i] = m_buf_particles[i].position;
                }
                for (int i = 0; i < count; ++i)
                {
                    m_buf_rotations[i]   = m_buf_particles[i].axisOfRotation;
                    m_buf_rotations[i].w = m_buf_particles[i].rotation;
                }

                // write!
                var data = new AbcAPI.aePointsData();
                data.positions = GetArrayPtr(m_buf_positions);
                data.count     = count;
                AbcAPI.aePointsWriteSample(m_abc, ref data);
                AbcAPI.aePropertyWriteArraySample(m_prop_rotatrions, GetArrayPtr(m_buf_rotations), count);
            }
        public override void Capture()
        {
            var target    = GetComponent <ParticleEngine>();
            var positions = target.positionBuffer;

            if (positions == null)
            {
                return;
            }

            var data = new AbcAPI.aePointsData();

            data.count     = positions.Length;
            data.positions = Marshal.UnsafeAddrOfPinnedArrayElement(positions, 0);
            if (m_captureVelocities)
            {
                var velocities = target.velocityBuffer;
                if (velocities != null)
                {
                    data.velocities = Marshal.UnsafeAddrOfPinnedArrayElement(velocities, 0);
                }
            }
            AbcAPI.aePointsWriteSample(m_abc, ref data);
        }