/// <summary> /// 全方位に対して弾を複数打つメソッド /// </summary> /// <param name="bulletNum">発射する弾数</param> /// <param name="attackerType">発射するキャラの所属</param> /// <param name="position">発射位置</param> /// <param name="shape">弾幕の形</param> /// <param name="bulletType">弾の種類</param> /// <param name="data">弾の基本データ</param> /// <param name="time">連射時の発射角度に影響する時間情報</param> /// <param name="angularSpeed">連射時に変化する角速度</param> /// <param name="axis">連射時に変化する基準軸</param> /// <param name="forward">発射方向(AllRangeShotType.Planeのみ有効)</param> public void Shot(int bulletNum, AttackerType attackerType, GameObject shooter, Vector3[] directions, BulletData data, GameObject target, float time = 0.0f, float angularSpeed = 0.0f, Vector3 axis = default) { var bullets = ObjectPools.Instance.GetBullet(bulletNum, data.BulletType); if (data.BulletType == BulletType.Curve) { SetRotateOrigin(bullets, shooter, data); } else if (data.BulletType == BulletType.Funnel) { SetRotateOrigin(bullets, shooter, data, target); } if (directions == default) { directions = ShotManager.Instance.RandomVectors(bulletNum); } if (time != 0.0f && angularSpeed != 0 && axis != default) { var rotate = Quaternion.AngleAxis(time * angularSpeed, axis); for (int i = 0; i < bulletNum; i++) { directions[i] = rotate * directions[i]; } } var position = shooter.transform.position; for (int i = 0; i < bulletNum; i++) { Shot(bullets[i], attackerType, position + directions[i] * INITIALDISTANCE, directions[i], data, target); } }
/// <summary> /// ShotDataをもとに生成したActionをIteratorにセット or 単発なら実行するメソッド /// </summary> /// <param name="data">発射するShotData</param> public void SetUnityAction(AttackerType attackerType, BarrageData data, GameObject aim = default, GameObject target = default) { if (data == null) { return; } for (int i = 0; i < data.ShotDatas.Count; i++) { if (data.ShotDatas[i] == default || data.BulletDatas[i] == default) { continue; } if (data.ShotDatas[i].ShotType == ShotType.Normal && data.BulletDatas[i].BulletType == BulletType.Funnel) { continue; } var cnt = data.ShotDatas[i].Count; if (cnt > 1) { SetEvent(GetUnityAction(attackerType, data.ShotDatas[i], data.BulletDatas[i], aim, target), data.ShotDatas[i]); } else { GetUnityAction(attackerType, data.ShotDatas[i], data.BulletDatas[i], aim, target)(0.0f); } } }
public override void Initialize(AttackerType attackerType, Vector3 position, Vector3 velocity, BulletData data, GameObject target, Vector3 offset) { Iterator.SetUnityAction(attackerType, data.SplitData, target, target); Acceleration = 2 * (data.DeploymentDistance - data.Speed * data.DeploymentTime) / data.DeploymentTime / data.DeploymentTime * velocity; base.Initialize(attackerType, position, velocity, data, target, offset); }
public Enemy CreateEnemy( GameObject prefab, HealthType healthType, AttackerType attackerType, MoverType moverType, PerceptionType perceptionType, ICharacter target) { var newGameObject = UnityEngine.Object.Instantiate(prefab); newGameObject.name = "Enemy"; newGameObject.layer = LayerMask.NameToLayer("Enemy"); var enemy = newGameObject.AddComponent <Enemy>(); enemy.InitializeBrain(); enemy.InitializePathfindingAgent(); enemy.InitializeHealth(GetHealthData(healthType)); enemy.InitializeAttacker(GetAttackerData(attackerType)); enemy.InitializeMover(GetMoverData(moverType)); enemy.InitializeLoot(); enemy.InitializePerception(GetPerceptionData(perceptionType)); enemy.InitializeTarget(target); return(enemy); }
public void SetValues() { if (stats != null) { attackerType = stats.attackerType; speed = stats.speed; health = stats.health; basicAttackDamage = stats.basicAttackDamage; basicAttackSpeed = stats.basicAttackSpeed; basicAttackRange = stats.basicAttackRange; basicAttackCooldown = stats.basicAttackCooldown; ability = stats.ability; } else { attackerType = AttackerType.Melee; speed = 3; health = 10; basicAttackDamage = 1; basicAttackSpeed = 2; basicAttackRange = 50; basicAttackCooldown = 0.5f; } }
GameObject LoadAttacker() { string fileName = fileNames[Random.Range(0, 3)]; string filePath = Application.dataPath + "/" + fileName; StreamReader sr = new StreamReader(filePath); GameObject attackerHolder = new GameObject("Attacker Holder"); int yPos = 0; while (!sr.EndOfStream) { string line = sr.ReadLine(); for (int xPos = 0; xPos < line.Length; xPos++) { if (line [xPos] == 'O') { GameObject unit = GameObject.CreatePrimitive(PrimitiveType.Cube); unit.layer = 8; unit.transform.parent = attackerHolder.transform; unit.transform.position = new Vector3(xPos + offsetX, yPos + offsetY, 0); } } yPos--; } sr.Close(); if (fileName == fileNames[0]) { attackerHolder.AddComponent <MidPlaneAttacker> (); type = AttackerType.MID; } if (fileName == fileNames[1]) { attackerHolder.AddComponent <FrontPlaneAttacker> (); type = AttackerType.FRONT; } if (fileName == fileNames[2]) { attackerHolder.AddComponent <BackPlaneAttacker> (); type = AttackerType.BACK; } return(attackerHolder); }
public void WeakAttack(int idx) { curAttackerType = AttackerType.weak; curDamage = weakAttackerTransList[idx].damage; weakAttackerTransList[idx].attacker.SetActive(true); Vector3 tempOriginPos = weakAttackerTransList[idx].originPos; tempOriginPos.x *= attackDir; weakAttackerTransList[idx].attacker.transform.localPosition = tempOriginPos; }
public void StrongAttack(int idx) { curAttackerType = AttackerType.strong; curDamage = strongAttackerTransList[idx].damage; strongAttackerTransList[idx].attacker.SetActive(true); Vector3 tempOriginPos = strongAttackerTransList[idx].originPos; tempOriginPos.x *= attackDir; strongAttackerTransList[idx].attacker.transform.localPosition = tempOriginPos; }
/// <summary> /// 弾を初期化する基本メソッド /// </summary> /// <param name="attackerType">弾を発射したキャラの所属</param> /// <param name="position">発射時の発射キャラの位置</param> /// <param name="velocity">弾の移動ベクトル</param> /// <param name="data">弾の基本情報</param> /// <param name="target">弾のターゲット</param> /// <param name="offset">弾の初期位置からの相対距離</param> virtual public void Initialize(AttackerType attackerType, Vector3 position, Vector3 velocity, BulletData data, GameObject target, Vector3 offset) { gameObject.SetActive(true); AttackerType = attackerType; transform.position = position + offset; Velocity = velocity * data.Speed; InitializeTime = Time.time; Data = data; Target = target; }
public UIBattleTipInfo(uint hitMcbGuid, BattleTipType battleTipType, AttackerType attackerType, int diffHp, int elementHp, float scale, int elementType, string spriteImagePath, Vector3 startPos, Vector2 offset, Vector2 randomRange, float disappearTime) { HitMCB_GUID = hitMcbGuid; BattleTipType = battleTipType; AttackerType = attackerType; DiffHP = diffHp; ElementHP = elementHp; Scale = scale; ElementType = elementType; SpriteImagePath = spriteImagePath; StartPos = startPos; Offset = offset; RandomRange = randomRange; DisappearTime = disappearTime; }
private AttackData GetAttackerData(AttackerType attackerType) { switch (attackerType) { case AttackerType.None: case AttackerType.Slow: return(new AttackData(Constants.SLOW_TIME_BETWEEN_ATTACKS, Constants.SLOW_PROJECTILE_SPEED, Constants.ENEMY_PROJECTILE_NAME)); case AttackerType.Medium: return(new AttackData(Constants.MEDIUM_TIME_BETWEEN_ATTACKS, Constants.MEDIUM_PROJECTILE_SPEED, Constants.ENEMY_PROJECTILE_NAME)); case AttackerType.Fast: return(new AttackData(Constants.FAST_TIME_BETWEEN_ATTACKS, Constants.FAST_PROJECTILE_SPEED, Constants.ENEMY_PROJECTILE_NAME)); default: throw new NotImplementedException("AttackerType not implemented: " + attackerType); } }
/// <summary> /// 発射した場所に向かって飛ぶ弾を発射するメソッド /// </summary> /// <param name="bulletNum">発射する弾数</param> /// <param name="attackerType">発射するキャラの所属</param> /// <param name="position">発射位置</param> /// <param name="shape">弾幕の形</param> /// <param name="bulletType">弾の種類</param> /// <param name="data">弾の基本データ</param> /// <param name="time">連射時の発射角度に影響する時間情報</param> /// <param name="angularSpeed">連射時に変化する角速度</param> /// <param name="axis">連射時に変化する基準軸</param> /// <param name="throughShootPoint">発射位置を通り過ぎて対称点で消失するフラグ</param> /// <param name="distanceFromShootPoint">通過位置を発射位置からズラす距離</param> public void Shot(int bulletNum, AttackerType attackerType, GameObject shooter, Vector3[] directions, BulletData data, GameObject target, float time, float angularSpeed, Vector3 axis, bool throughShootPoint, float distanceFromShootPoint) { var bullets = ObjectPools.Instance.GetBullet(bulletNum, data.BulletType); if (data.BulletType == BulletType.Curve) { SetRotateOrigin(bullets, shooter, data); } else if (data.BulletType == BulletType.Funnel) { SetRotateOrigin(bullets, shooter, data, target); } if (directions == default) { directions = ShotManager.Instance.RandomVectors(bulletNum); } if (time != 0.0f && angularSpeed != 0 && axis != default) { var rotate = Quaternion.AngleAxis(time * angularSpeed, axis); for (int i = 0; i < bulletNum; i++) { directions[i] = rotate * directions[i]; } } Vector3[] offsets = new Vector3[bulletNum]; var backDistance = -data.Speed * data.ValidTime; if (throughShootPoint) { backDistance /= 2; } for (int i = 0; i < bulletNum; i++) { offsets[i] = directions[i] * backDistance; } var position = shooter.transform.position; for (int i = 0; i < bulletNum; i++) { Shot(bullets[i], attackerType, position, directions[i], data, default, offsets[i] + directions[i].GetOrthogonalUnitVector() * distanceFromShootPoint);
/// <summary> /// 弾を複数発射する一番基本的なメソッド /// </summary> /// <param name="bulletNum">発射する弾数</param> /// <param name="attackerType">発射するキャラの所属</param> /// <param name="position">発射位置</param> /// <param name="velocity">弾の進行方向</param> /// <param name="bulletType">弾の種類</param> /// <param name="data">弾の基本データ</param> /// <param name="randomDiffusion">弾のブレをランダムにするFlag</param> /// <param name="bulletShake">弾のブレ(0.0-1.0)</param> public void Shot(int bulletNum, AttackerType attackerType, GameObject shooter, BulletType bulletType, BulletData data, GameObject aim, GameObject target, bool randomDiffusion, float bulletShake) { var bullets = ObjectPools.Instance.GetBullet(bulletNum, bulletType); Vector3 velocity = default; if (aim != default) { velocity = (aim.transform.position - shooter.transform.position).normalized; } else { velocity = shooter.transform.forward; } if (data.BulletType == BulletType.Curve) { SetRotateOrigin(bullets, shooter, data); } else if (data.BulletType == BulletType.Funnel) { SetRotateOrigin(bullets, shooter, data, target); } var position = shooter.transform.position; if (randomDiffusion || bulletShake == default) { foreach (BaseBullet bullet in bullets) { Shot(bullet, attackerType, position, velocity.RandamShake(MAX_SHAKE * bulletShake), data, target); } } else { var newVelocitys = FixedShake(velocity, MAX_SHAKE * bulletShake, bulletNum); for (int i = 0; i < bulletNum; i++) { Shot(bullets[i], attackerType, position, newVelocitys[i], data, target); } } }
private void HandleCommonTip(uint mcGUID, BattleTipType battleTipType) { if (!EnableUIBattleTip) { return; } if ((int)battleTipType >= (int)BattleTipType.FollowDummySeparate) { return; } AttackerType attackerType = AttackerType.None; MechaComponent mc_owner = ClientBattleManager.Instance.FindMechaComponent(mcGUID); if (ClientBattleManager.Instance.PlayerMecha != null && mc_owner != null) { attackerType = GetAttackerType(mc_owner.Mecha.MechaInfo, ClientBattleManager.Instance.PlayerMecha.MechaInfo, battleTipType); } if (attackerType == AttackerType.NoTip) { return; } UIBattleTipInfo info = new UIBattleTipInfo( 0, battleTipType, attackerType, 0, 0, 0.13f, 0, "", mc_owner.transform.position + Vector3.up * 1f, Vector2.zero, Vector2.one, 0.5f); CreateTip(info); }
/// <summary> /// ShotDataをもとにActionを生成するメソッド /// </summary> /// <param name="shotData">発射するShotData</param> /// <returns></returns> private UnityAction <float> GetUnityAction(AttackerType attackerType, ShotData shotData, BulletData bulletData, GameObject aim, GameObject target) { // var position = shooter.transform.position; //発射位置を固定したい場合はキャッシュしておく ※固定するとFunnelから出る弾の発射位置も移動しなくなるので注意 var velocity = (aim == default) ? default : (aim.transform.position - transform.position).normalized; Vector3[] directions = ShotManager.Instance.GetShotShape(shotData.AllRangeShotShape, shotData.GetBulletNum, RandomNum); switch (shotData.ShotType) { case ShotType.Normal: return((t) => ShotManager.Instance.NormalShot.Shot(shotData.GetBulletNum, attackerType, gameObject, bulletData.BulletType, bulletData, aim, target, shotData.RandomDiffusion, shotData.BulletShake)); case ShotType.AllRange: if (velocity != default && shotData.AllRangeShotShape == AllRangeShotShape.Plane) { for (int i = 0; i < shotData.BulletNum; i++) { directions[i].TransformDirection(velocity); } } return((t) => ShotManager.Instance.AllRangeShot.Shot(shotData.GetBulletNum, attackerType, gameObject, directions, bulletData, target, t, shotData.AngularSpeed, shotData.Axis)); case ShotType.Gather: var gatherAtTarget = target != default && shotData.GatherAtTarget; if (velocity != default && shotData.AllRangeShotShape == AllRangeShotShape.Plane) { for (int i = 0; i < shotData.BulletNum; i++) { directions[i] = directions[i].TransformDirection(velocity); } } return((t) => ShotManager.Instance.GatherShot.Shot(shotData.GetBulletNum, attackerType, gatherAtTarget ? target : gameObject, directions, bulletData, target, t, shotData.AngularSpeed, shotData.Axis, shotData.PassGatherPoint, shotData.DistanceFromGatherPoint)); default: return(default); } }
public override void Initialize(AttackerType attackerType, Vector3 position, Vector3 velocity, BulletData data, GameObject target, Vector3 offset) { base.Initialize(attackerType, position, velocity, data, target, offset); FirstContact = false; IsEnable = false; }
/// <summary> /// 弾を発射する一番基本的なメソッド /// </summary> /// <param name="bullet">発射する弾</param> /// <param name="attackerType">発射するキャラの所属</param> /// <param name="position">発射位置</param> /// <param name="velocity">弾の進行方向</param> /// <param name="data">弾の基本データ</param> /// <param name="offset">発射位置からズレるVector</param> protected void Shot(BaseBullet bullet, AttackerType attackerType, Vector3 position, Vector3 velocity, BulletData data, GameObject target = default, Vector3 offset = default) { bullet.Initialize(attackerType, position, velocity, data, target, offset); }
public Panel(int row, int column, AttackerType attackerType) { Coordinates = new BoardPosition(row, column); AttackerType = attackerType; }
void Start() { AttackerType = transform.parent.GetComponent <FlyCharacterStatus>().AttackerType; GetComponent <SphereCollider>().radius = Radius; }
public void init(AttackerType attackerType, AttackType aType, BaseSkillData hsd = null, TranscendData td = null, int[] transcendLevel = null, bool isFromHeroSkill = false) { //Log.log("init attackdata!!!"); if (td != null) { for (int i = attrOriginal.Length - 1; i >= 0; --i) { if (isFromHeroSkill) { attr[i] = td.getValueByATTR(transcendLevel, attrOriginal[i].Get(), E_ATTR_STR[i]); } else { attr[i] = td.getValueByATTR(transcendLevel, attrOriginal[i].Get(), ATTR_STR[i]); } } } cm = GameManager.me.characterManager; _skillData = hsd; switch (type) { case NONE_0: chracterMove = moveStay; monsterShoot = shootMonster0; playerShoot = shootPlayer0; playSkill = playSkillRightNow; preDamageCalc = damageCalc0; if (_skillData.skillDataType == BaseSkillData.SkillDataType.Hero && _skillData.targeting == 1) { targetRange = _skillData.targetAttr[1]; } break; case SHORT_1: //1 //len = 1; chracterMove = moveShortAttackType; if (aType == AttackType.Attack) { monsterShoot = shootMonster1; playerShoot = shootPlayer1; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; break; case SHORT_RANGE_2: //2 //len = 3; //데미지범위 최소데미지비율 최대타겟유닛수 chracterMove = moveShortAttackType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonster2; playerShoot = shootPlayer2; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; break; case LINE_3: //3 if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet3; playerShoot = shootPlayerBullet3; preDamageCalc = damageCalc0; } playSkill = playSkillLinear; break; case LINE_RANGE_4: //4 if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet4; playerShoot = shootPlayerBullet4; preDamageCalc = damageCalc0; } playSkill = playSkillLinear; break; case LINE_PASS_5: //5 if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; targetRange = attr[4]; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet5; playerShoot = shootPlayerBullet5; preDamageCalc = damageCalc0; } playSkill = playSkillLinear; break; case CURVE_RANGE_6: //6 //len = 4; //타임리밋 데미지범위 최소데미지비율 최대타겟유닛수 if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; targetRange = attr[1]; maxHit = attr[3]; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet6; playerShoot = shootPlayerBullet6; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; break; case DROP_RANGE_7: //7 //len = 4; //타임리밋 데미지범위 최소데미지비율 최대타겟유닛수 if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; targetRange = attr[1]; maxHit = attr[3]; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet7; playerShoot = shootPlayerBullet7; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; break; case CIRCLE_RANGE_8: if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; targetRange = attr[0]; maxHit = attr[2]; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet8; playerShoot = shootPlayerBullet8; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; //len = 3; //데미지범위 최소데미지비율 최대타겟유닛수 break; case FIXED_EFFECT_9: //len = 4; //최대타겟유닛수 이펙트타입 이펙트Z/R 이펙트X if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; // 11~12 사각기둥. 21~22. 원기둥. if (attr[1] > 12) { targetRange = attr[2]; } else { targetRange = attr[3]; } maxHit = attr[0]; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet9; playerShoot = shootPlayerBullet9; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; break; case CONTINUE_FIXED_EFFECT_10: //최대타겟유닛수 지속시간 이펙트타입 이펙트Z/R 이펙트X //len = 5; if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; // 11~12 사각기둥. 21~22. 원기둥. if (attr[2] > 12) { targetRange = attr[3]; } else { targetRange = attr[4]; } maxHit = attr[0]; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet10; playerShoot = shootPlayerBullet10; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; break; case CURVE_AFTER_CONTINUE_FIXED_EFFECT_11: //타임리밋 최대타겟유닛수 지속시간 이펙트타입 이펙트Z/R 이펙트X //len = 6; if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; // 11~12 사각기둥. 21~22. 원기둥. if (attr[3] > 12) { targetRange = attr[4]; } else { targetRange = attr[5]; } maxHit = attr[1]; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet11; playerShoot = shootPlayerBullet11; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; break; case ATTACH_BULLET_12: //len = 5; // 최대타겟유닛수 지속시간 이펙트타입 이펙트Z/R 이펙트X if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet12; playerShoot = shootPlayerBullet12; preDamageCalc = damageCalc0; } playSkill = playSkillLoop; break; case TIME_BOMB_13: //13 #if UNITY_EDITOR Debug.Log("==== 안쓰는 것!!!! ====!!!!"); #endif //len = 4; //폭발대기시간 데미지범위 최소데미지비율 최대타겟유닛수 if (attackerType == AttackerType.Hero) { chracterMove = moveLineType; skillMove = moveSkillHeroMonsterLineType; } else if (attackerType == AttackerType.Unit) { chracterMove = moveLineType; } if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet12; playerShoot = shootPlayerBullet12; } playSkill = playSkillNormal; break; case LAND_MINE_14: //14 //len = 4; //데미지범위 최소데미지비율 최대타겟유닛수 자연폭발시간 if (attackerType == AttackerType.Hero) { chracterMove = moveLandMineType; //moveLandMineAttackType; skillMove = moveLandMineType; //moveLandMineAttackType; } else if (attackerType == AttackerType.Unit) { chracterMove = moveLandMineType; //moveLandMineAttackType; } if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet14; playerShoot = shootPlayerBullet14; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; break; case CHAIN_LIGHTING_15: //15 // Debug.Log("==== 수정해야함 ====!!!!"); //len = 3; //최대전체거리 최대연결거리A 최대연결거리B 최대연결유닛수 연결딜레이 if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet15; playerShoot = shootPlayerBullet15; preDamageCalc = damageCalc0; } playSkill = playSkillLoop; break; case SCREEN_ATTACK_16: // 이동은 수정해야함. 그런데 굳이 할 필요는 없을듯??? if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; targetRange = attr[0]; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet16; playerShoot = shootPlayerBullet16; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; break; case METHEO_17: //17 if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; targetRange = attr[5]; maxHit = attr[3]; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet17; playerShoot = shootPlayerBullet17; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; break; case CHASER_18: //18 if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet18; playerShoot = shootPlayerBullet18; preDamageCalc = damageCalc0; } playSkill = playSkillLinear; break; } }