public void InstantiateParticle(Emitter e, GameObject original, ObjectInitiator initiator) { Randomizer rand = Randomizer.Instance; GameObject p = (GameObject)GameObject.Instantiate(original); // イニシエータの実行 if (initiator != null) { p = initiator(p); } Vector3 pos = p.transform.position; pos.x = e.transform.position.x + e.PositionOffset.x; pos.y = e.transform.position.y + e.PositionOffset.y; pos.z = e.transform.position.z + e.PositionOffset.z; p.transform.position = pos; Force f = p.GetComponent <Force>(); float d = (e.Direction + 360) * e.DirectionDiffusion; f.Direction = (e.Direction - d / 2) + d * rand.NextFloat(); float s = e.InitialSpeed * e.InitialSpeedDiffusion; f.Value = (e.InitialSpeed - s) + s * rand.NextFloat(); f.Activate(); }
private IEnumerator performForce() { _chargingForce = true; float duration = 0f; int forceLevel = 1; _spriteRenderer.color = _force1.SpriteRenderer.color; ParticleSystem.MainModule particles = _chargeForceParts.main; particles.startColor = _force1.SpriteRenderer.color; particles.startLifetime = new ParticleSystem.MinMaxCurve(0.25f); particles.startSpeed = new ParticleSystem.MinMaxCurve(1f); _chargeForceParts.Play(); playSound(0); while (Input.GetButton("Fire1")) { if (_waitingForSphere) { break; } duration += Time.deltaTime; if (forceLevel == 1 && duration > 0.5f) { forceLevel = 2; _spriteRenderer.color = _force2.SpriteRenderer.color; particles.startColor = _force2.SpriteRenderer.color; particles.startLifetime = new ParticleSystem.MinMaxCurve(0.35f); particles.startSpeed = new ParticleSystem.MinMaxCurve(1.5f); playSound(1); } if (forceLevel == 2 && duration > 1f) { forceLevel = 3; _spriteRenderer.color = _force3.SpriteRenderer.color; particles.startColor = _force3.SpriteRenderer.color; particles.startLifetime = new ParticleSystem.MinMaxCurve(0.45f); particles.startSpeed = new ParticleSystem.MinMaxCurve(2f); playSound(2); } yield return(null); } _chargeForceParts.Stop(); _chargingForce = false; if (_waitingForSphere) { _spriteRenderer.color = Color.white; yield break; } _performingForce = true; switch (forceLevel) { case 1: _currentForce = _force1; break; case 2: _currentForce = _force2; break; case 3: _currentForce = _force3; break; } playSound(3); _hands.gameObject.SetActive(true); yield return(_currentForce.Activate(0.2f)); _hands.gameObject.SetActive(false); _spriteRenderer.color = Color.white; _currentForce = null; _performingForce = false; }