private void Start() { projectileInitSetting = new ProjectileInitSetting(spawnPoint.position, 30, 180, 180); projectileSetting = new ProjectileSetting { moveSpeed = 3, lifeTime = 3, elementType = ElementType.None, }; }
public override void GenerateSkill(Character character, Skill skill) { base.GenerateSkill(character, skill); projectileInitSetting = new ProjectileInitSetting(sourceCaster.transform.position + Vector3.up * 0.7f, 6, 60, 100); projectileSetting = new ProjectileSetting { moveSpeed = 3, lifeTime = 3, elementType = ElementType.Fire, }; ProjectileSpawner.Instance.InstantiateProjectile(projectile, projectileState, projectileInitSetting, projectileSetting); }
private void LaunchAllProjectile() { foreach (Projectile proj in projectiles) { ProjectileSetting setting = new ProjectileSetting { sourceCaster = sourceCaster, moveSpeed = 10f, lifeTime = 5, elementType = ElementType.None, initialAngle = 180, }; proj.Setup(new ProjectileState.StraightWithDirection(), setting); } }
public void Setup(IProjectileState state, ProjectileSetting projectileSetting) { // 通用的setup if (projectileSetting.sourceCaster != null) { this.sourceCaster = projectileSetting.sourceCaster; this.elementType = sourceCaster.data.attackElement; } this.moveSpeed = projectileSetting.moveSpeed; this.lifeTime = projectileSetting.lifeTime; this.initialAngle = projectileSetting.initialAngle; //deg this.target = projectileSetting.target; _state = state; DetectHitState(); // 該State專屬的Setup _state.Setup(this); _hitState.HitStateSetUp(this); }
private IEnumerator DelayProjectileSpawn(GameObject projectilePrefab, IProjectileState state, ProjectileInitSetting projectileInitSetting, ProjectileSetting projectileSetting) { int angleChunk = projectileInitSetting.restrictAngle / projectileInitSetting.amount; //在限制角度中平分角度 int angle = projectileInitSetting.angleOffset; for (int i = 0; i < projectileInitSetting.amount; i++) { Transform p = ObjectPools.Instance.GetObjectInPools(projectilePrefab.name, projectileInitSetting.initialPosition).transform; projectileSetting.initialAngle = projectileInitSetting.initialAngle; p.GetComponent <Projectile>().Setup(state, projectileSetting); if (p.GetComponent <ParticleSystem>() != null) { p.GetComponent <ParticleSystem>().Play(); } angle += angleChunk; yield return(new WaitForSeconds(projectileSetting.shootDelay)); } yield break; }
public void InstantiateProjectile(GameObject projectilePrefab, IProjectileState state, ProjectileInitSetting projectileInitSetting, ProjectileSetting projectileSetting) { if (projectileTypes == null) { return; } StartCoroutine(DelayProjectileSpawn(projectilePrefab, state, projectileInitSetting, projectileSetting)); }