protected void Shoot(Vector3 clickPos) { Vector3 difference = clickPos - transform.position; float distance = difference.magnitude; Vector2 direction = difference / distance; direction.Normalize(); ProjectileMove instance = Instantiate(projectile, transform.position, Quaternion.identity); instance.SetTileBreaker(GetComponent <WorldModifier>()); //instance.SetColliderMap(colliderMap); instance.GetComponent <Rigidbody2D>().velocity = direction * bulletSpeed; }
/// <summary> /// 普通攻击的入口函数 /// </summary> public static void NormalAttackWork(FightUnit attacker, FightUnit target, NormalAttack skill) { if (target == null || target.health == 0 || attacker == null || attacker.health == 0) { return; } switch ((SkillCurve)skill.attack.curve) { case SkillCurve.None: case SkillCurve.Melee: NormalAttackDamage(attacker, target, skill, skill.curHitEffect); break; case SkillCurve.Directional: GameObject obj = ProjectileMove.CreateProjectile(skill.name + "_" + attacker.mTrans.name, attacker.mTrans.parent, skill.flyEffectFromPos, skill.curFlyEffect.speed, target.Body, delegate(SpecialEffect fx) { if (attacker != null && target != null) { NormalAttackDamage(attacker, target, skill, fx); } }); obj.GetComponent <ProjectileMove>().hitEffect = skill.curHitEffect; skill.StartCoroutine(skill.DisplayFlyEffect(obj.transform)); break; case SkillCurve.Parabola: Vector3 targetPos; bool isHeroSkill = attacker.parentGroup.group == FightGroup.GroupType.Mine; if (skill.flyEffect.distance > 0) { targetPos = attacker.mTrans.localPosition + (isHeroSkill? -1 : 1) * Vector3.right * skill.flyEffect.distance; } else { targetPos = target.mTrans.localPosition + target.Body.localPosition; } GameObject obj_1 = ProjectileMove.CreateProjectile(skill.name, attacker.mTrans.parent, skill.flyEffectFromPos, skill.curFlyEffect.speed, skill.curFlyEffect.height, targetPos, delegate(SpecialEffect fx) { if (attacker != null && target != null) { NormalAttackDamage(attacker, target, skill, fx); } }); obj_1.GetComponent <ProjectileMove>().hitEffect = skill.curHitEffect; if (!isHeroSkill) { obj_1.AddComponent <DragRecord>(); } break; } }
/// <summary> /// 抛物线投射物 /// </summary> public static GameObject CreateProjectile(string goName, Transform parent, Vector3 goPos, float xSpeed, float yLength, Vector3 targetPos, ProjectileHandler callBack) { GameObject obj = new GameObject(goName); obj.transform.parent = parent; obj.transform.localScale = Vector3.one; obj.transform.localPosition = goPos; ProjectileMove move = obj.AddComponent <ProjectileMove>(); move._targetPos = targetPos; move.xSpeed = xSpeed; move.yLength = yLength; move.OnProjectileReach = callBack; move.CaculateA(); return(obj); }
void SpawnVFX() { GameObject vfx; if (firePoint != null) { vfx = Instantiate(effectToSpawn, firePoint.transform.position, Quaternion.identity); ProjectileMove vfxMoveController = vfx.GetComponent <ProjectileMove>(); vfxMoveController.whoShooting = gameObject; vfx.transform.localRotation = gameObject.transform.rotation; } else { Debug.Log("no fire point"); } }
void OnGUI() { GUILayout.BeginArea(guiAreaRect); GUILayout.BeginVertical(); foreach (ProjectileMove projectile in projectileList) { if (projectile != null) { if (GUILayout.Button(projectile.projectileLogo, GUILayout.Width(50), GUILayout.Height(50))) { currentProjectile = projectile; Debug.Log(currentProjectile); } } } GUILayout.EndVertical(); GUILayout.EndArea(); }
private void OnCollisionEnter(Collision collision) { CollisionDestroy targetLifeCycle = collision.gameObject.GetComponent <CollisionDestroy>(); if (targetLifeCycle != null) { if (this.isCharacter && targetLifeCycle.isEnemy) { Destroy(gameObject); } if (targetLifeCycle.isProjectile) { projectileController = collision.gameObject.GetComponent <ProjectileMove>(); bool isFirendlyFire = projectileController != null && projectileController.whoShooting.name == gameObject.name; if (!isFirendlyFire) { Destroy(gameObject); } } } }
private void Attack() { Vector3 MyPos = transform.position; //_target.GetComponent<Bot> ().Life -= _damage; _targetToProjectile = Instantiate(_projectile, MyPos, Quaternion.Euler(0, 0, 0)); ProjectileMove projM = _targetToProjectile.GetComponent <ProjectileMove>(); projM.SetScale(transform.localScale.x + 0.5f); projM.Target = _target; projM.SetDamage(_damage); if (_target.GetComponent <Bot> ().Life <= 0) { _player.Coin += _target.GetComponent <Bot>().GetDiff() * Random.Range(10, 13) + 30; _target.GetComponent <Bot> ().Die(); _target = null; _targetOk = false; } }
/// <summary> /// 绝技的入口函数,涉及到有弹道,回调 /// </summary> public static void UniqueSkillWork(FightUnit attacker, FightUnit target, UniqueSkill skill) { switch ((SkillCurve)skill.specialSkill.curve) { case SkillCurve.None: case SkillCurve.Melee: UniqueSkillSelect(attacker, target, skill); break; case SkillCurve.Directional: GameObject obj = ProjectileMove.CreateProjectile(skill.name + "_" + attacker.mTrans.name, attacker.mTrans.parent, skill.flyEffectFromPos, skill.flyEffect.speed, target.Body, delegate(SpecialEffect fx) { UniqueSkillSelect(attacker, target, skill); }); skill.StartCoroutine(skill.DisplayFlyEffect(obj.transform)); break; case SkillCurve.Parabola: Vector3 targetPos; bool isHeroSkill = attacker.parentGroup.group == FightGroup.GroupType.Mine; if (skill.flyEffect.distance > 0) { targetPos = attacker.mTrans.localPosition + (isHeroSkill ? -1 : 1) * Vector3.right * skill.flyEffect.distance; } else { targetPos = target.mTrans.localPosition + target.Body.localPosition; } GameObject obj_1 = ProjectileMove.CreateProjectile(skill.name, attacker.mTrans.parent, skill.flyEffectFromPos, skill.flyEffect.speed, skill.flyEffect.height, targetPos, delegate(SpecialEffect fx) { UniqueSkillSelect(attacker, target, skill); }); if (!isHeroSkill) { obj_1.AddComponent <DragRecord>(); } skill.StartCoroutine(skill.DisplayFlyEffect(obj_1.transform)); break; case SkillCurve.Magica: if (skill.dmgEffect == null) { return; } if (skill.dmgEffect.target == 4 || skill.dmgEffect.target == 5) { skill.StartCoroutine(UniqueSkillMagic_Whole(attacker, target, skill)); } else { UniqueSkillSelect(attacker, target, skill); } break; case SkillCurve.LineAoe: bool isRight = (attacker.parentGroup.group == FightGroup.GroupType.Mine && !attacker.isConfused) || (attacker.parentGroup.group == FightGroup.GroupType.Enemy && attacker.isConfused); GameObject obj_2 = LineAoeMove.CreateLineAoe(skill.name + "_" + attacker.mTrans.name, attacker.mTrans.parent, skill.flyEffectFromPos, skill.flyEffect.speed, isRight, delegate(FightUnit unit) { UniqueSkillDamage(attacker, unit, skill); }); skill.StartCoroutine(skill.DisplayFlyEffect(obj_2.transform)); break; } }
protected override void OnAwake() { m_collider = GetComponent <SphereCollider>(); m_rigidbody = gameObject.AddComponent <Rigidbody>(); Move = new ProjectileMove(this); }