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); }