123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- using UnityEngine;
- namespace UnityARInterface
- {
- public class ARPointCloudVisualizer : ARBase
- {
- [SerializeField]
- private ParticleSystem m_PointCloudParticlePrefab;
- [SerializeField]
- private int m_MaxPointsToShow = 300;
- [SerializeField]
- private float m_ParticleSize = 1.0f;
- private ParticleSystem m_ParticleSystem;
- private ParticleSystem.Particle [] m_Particles;
- private ParticleSystem.Particle[] m_NoParticles;
- private ARInterface.PointCloud m_PointCloud;
- private void OnDisable()
- {
- m_ParticleSystem.SetParticles(m_NoParticles, 1);
- }
- // Use this for initialization
- void Start()
- {
- m_ParticleSystem = Instantiate(m_PointCloudParticlePrefab, GetRoot());
- m_NoParticles = new ParticleSystem.Particle[1];
- m_NoParticles[0].startSize = 0f;
- }
- // Update is called once per frame
- void Update()
- {
- if (ARInterface.GetInterface().TryGetPointCloud(ref m_PointCloud))
- {
- var scale = GetScale();
- var numParticles = Mathf.Min(m_PointCloud.points.Count, m_MaxPointsToShow);
- if (m_Particles == null || m_Particles.Length != numParticles)
- m_Particles = new ParticleSystem.Particle[numParticles];
- for (int i = 0; i < numParticles; ++i)
- {
- m_Particles[i].position = m_PointCloud.points[i] * scale;
- m_Particles[i].startColor = new Color(1.0f, 1.0f, 1.0f);
- m_Particles[i].startSize = m_ParticleSize * scale;
- }
- m_ParticleSystem.SetParticles(m_Particles, numParticles);
- }
- else
- {
- m_ParticleSystem.SetParticles(m_NoParticles, 1);
- }
- }
- }
- }
|