[NonSerialized] public int[] propertyColorId;							// The property color id for each particles (pairing a particle's color to a manipulator
	
	// Copy this PlaygroundCache struct
	public PlaygroundCache Clone () {
		PlaygroundCache playgroundCache = new PlaygroundCache();
		playgroundCache.size = this.size.Clone() as float[];
		playgroundCache.life = this.life.Clone() as float[];
		playgroundCache.birth = this.birth.Clone() as float[];
		playgroundCache.birthDelay = this.birthDelay.Clone() as float[];
		playgroundCache.death = this.death.Clone() as float[];
		playgroundCache.emission = this.birth.Clone() as bool[];
		playgroundCache.rebirth = this.rebirth.Clone() as bool[];
		playgroundCache.lifetimeOffset = this.lifetimeOffset.Clone() as float[];
		playgroundCache.velocity = this.velocity.Clone() as Vector3[];
		playgroundCache.targetPosition = this.targetPosition.Clone() as Vector3[];
		playgroundCache.previousTargetPosition = this.previousTargetPosition.Clone() as Vector3[];
		playgroundCache.previousParticlePosition = this.previousParticlePosition.Clone() as Vector3[];
		playgroundCache.scatterPosition = this.scatterPosition.Clone() as Vector3[];
		playgroundCache.initialRotation = this.initialRotation.Clone() as float[];
		playgroundCache.rotationSpeed = this.rotationSpeed.Clone() as float[];
		playgroundCache.parent = this.parent.Clone() as Transform[];
		playgroundCache.color = this.color.Clone() as Color32[];
		playgroundCache.changedByProperty = this.changedByProperty.Clone() as bool[];
		playgroundCache.changedByPropertyColor = this.changedByPropertyColor.Clone() as bool[];
		playgroundCache.changedByPropertyColorLerp = this.changedByPropertyColorLerp.Clone() as bool[];
		playgroundCache.changedByPropertyColorKeepAlpha = this.changedByPropertyColorKeepAlpha.Clone () as bool[];
		playgroundCache.changedByPropertySize = this.changedByPropertySize.Clone() as bool[];
		playgroundCache.changedByPropertyTarget = this.changedByPropertyTarget.Clone() as bool[];
		playgroundCache.changedByPropertyDeath = this.changedByPropertyDeath.Clone() as bool[];
		playgroundCache.propertyTarget = this.propertyTarget.Clone() as int[];
		playgroundCache.propertyId = this.propertyId.Clone() as int[];
		playgroundCache.propertyColorId = this.propertyColorId.Clone() as int[];
		return playgroundCache;
	}
	// Check all needed references
	void CheckReferences () {
		if (PlaygroundC.reference==null)
			PlaygroundC.reference = FindObjectOfType<PlaygroundC>();
		if (PlaygroundC.reference==null)
			PlaygroundC.ResourceInstantiate("Playground Manager");
		if (this.playgroundCache==null)
			this.playgroundCache = new PlaygroundCache();
		if (this.particleCache==null)
			this.particleCache = new ParticleCache();

		if (this.particleSystemGameObject==null) {
			this.particleSystemGameObject = gameObject;
			this.particleSystemTransform = transform;
			this.particleSystemRenderer = renderer;
			this.shurikenParticleSystem = particleSystemGameObject.GetComponent<ParticleSystem>();
		}
	}