public SoldierTypeInfo(SoldierState State, SoldierInfo Info, int queue, int time) { m_State = State; m_Soldier = Info; mFireQueue = queue; mFireTime = time; }
public void PerformTransition(SoldierTransition tran) { if (tran == SoldierTransition.NullTransition) { Debug.Log("要执行的转换条件为空"); } SoldierStateType nextState = mCurrentState.GetTargetStateType(tran); if (nextState == SoldierStateType.NullState) { Debug.Log("在 " + tran + " 条件下,没有对应的目标状态"); return; } foreach (SoldierState item in mStates) { if (item.StateType == nextState) { mCurrentState.DoBeforeLeaving(); mCurrentState = item; mCurrentState.DoBeforeEntering(); } } }
// Use this for initialization void Start() { m_currentState = SoldierState.Idle; m_rb = gameObject.GetComponent <Rigidbody2D>(); m_bulletEmitter = gameObject.GetComponent <BulletEmitter>(); GameObject l_playerOne = Managers.GetInstance().GetPlayerManager().GetPlayerOne(); GameObject l_playerTwo = Managers.GetInstance().GetPlayerManager().GetPlayerTwo(); if (m_ignorePlayerCollision) { Physics2D.IgnoreCollision(l_playerOne.GetComponent <Collider2D>(), GetComponent <Collider2D>()); Physics2D.IgnoreCollision(l_playerTwo.GetComponent <Collider2D>(), GetComponent <Collider2D>()); } //m_animator = gameObject.GetComponent<Animator>(); if (Mathf.Abs(transform.position.x - l_playerOne.transform.position.x) < Mathf.Abs(transform.position.x - l_playerTwo.transform.position.x)) { m_target = l_playerOne; } else { m_target = l_playerTwo; } }
public void StartAttack() { soldierState = SoldierState.ATTACKING; agent.enabled = false; swordTween = sword.transform.DOLocalRotate (new Vector3 (0, -83, -20), 0.2f).SetLoops (-1, LoopType.Yoyo); StartCoroutine (AttackJump ()); }
private void StartMarching() { navMeshAgent.isStopped = false; navMeshAgent.destination = destination.transform.position; navMeshAgent.SetAreaCost(randomArea, 1f); state = SoldierState.Marching; }
//添加状态到系统 public void AddState(SoldierState s) { if (s == null || s.ID == SoldierStateID.NullStateID) { Debug.LogError("添加状态不能为空"); return; } //首次添加状态时,设置系统的初始数据, //执行状态的DoBeforeEntering方法 if (states.Count == 0) { states.Add(s); currentState = s; currentState.DoBeforeEntering(); return; } if (states.Any(state => state.ID == s.ID)) { Debug.LogError("已经存在 " + s); return; } states.Add(s); }
public void AcquireTarget(Soldier soldier, SoldierState previousState) { if (soldier.behaviour == m_soldierBehaviour && previousState != soldier.state) { switch (soldier.state) { case SoldierState.Protect: currentTarget = queen.transform; break; case SoldierState.Attack: currentTarget = soldier.attackTarget.behaviour.transform; break; case SoldierState.Harvest: if (soldier.harvestPileTarget == null) { currentTarget = soldier.harvestUnitTarget.behaviour.transform; } else { currentTarget = soldier.harvestPileTarget.behaviour.transform; } break; case SoldierState.StealEgg: currentTarget = soldier.stealEggTarget.behaviour.transform; break; } acquireTimer = 0; } }
public void StartAttack() { soldierState = SoldierState.ATTACKING; agent.enabled = false; swordTween = sword.transform.DOLocalRotate(new Vector3(0, -83, -20), 0.2f).SetLoops(-1, LoopType.Yoyo); StartCoroutine(AttackJump()); }
//执行状态转换 public void PerformTransition(SoldierTransition trans) { if (trans == SoldierTransition.NullTransition) { Debug.LogError("转换条件不能为空"); return; } SoldierStateID nextId = currentState.GetOutputState(trans); if (nextId == SoldierStateID.NullStateID) { Debug.LogError("转换的状态不能为空"); return; } foreach (SoldierState state in states) { if (state.ID != nextId) { continue; } currentState.DoBeforeLeaving(); //转换前执行现有状态的DoBeforeLeaving方法 currentState = state; currentState.DoBeforeEntering(); //转换完成,执行转换后状态的DoBeforeEntering方法 return; } }
public void Attack(Building target) { if (MoveToLocation(target.Position)) { soldierState = SoldierState.Attacking; this.target = target; } }
public IEnumerator StartCelebration() { soldierState = SoldierState.CELEBRATING; agent.enabled = false; yield return new WaitForSeconds(Random.Range(0.1f,0.5f)); transform.LookAt (new Vector3(Camera.main.transform.position.x, transform.position.y, Camera.main.transform.position.z) ); GetComponent<Rigidbody> ().AddForce(Vector3.up * celeberateForce); }
/// <summary> /// /// </summary> /// <param name="attack"></param> /// <param name="notifyTarget"></param> public void SetAttack(bool attack, bool notifyTarget) { state = SoldierState.Seeking; if (notifyTarget) { myTarget.SetAttack(attack, false); } }
void FixedUpdateReloading() { currentReloadTime -= Time.fixedDeltaTime; if (currentReloadTime <= 0f) { State = SoldierState.Firing; } }
private void StartAttacking() { Vector3 direction = currentTarget.transform.position - transform.position; direction.y = 0; direction.Normalize(); transform.rotation = Quaternion.LookRotation(direction); state = SoldierState.Attacking; animator.SetBool("Attacking", true); }
private void StartApproaching() { navMeshAgent.isStopped = false; //navMeshAgent.destination = farTarget.GetComponent<Collider>().ClosestPointOnBounds(transform.position); navMeshAgent.destination = farTarget.transform.position; navMeshAgent.SetAreaCost(randomArea, 1f); state = SoldierState.Approaching; }
private void StartMarching() { marching = true; navMeshAgent.isStopped = false; navMeshAgent.destination = destination.transform.position; navMeshAgent.SetAreaCost(randomArea, 1f); state = SoldierState.Marching; UpdateAnimatorWalkSpeed(); }
public void setAttackTarget(Soldier target){ if (attackTarget != null) attackTarget.SoldierDeath -= targetDied; intention = SoldierState.Attacking; target.SoldierDeath += targetDied; attackTarget = target; attackTargetTransform = target.transform; }
public IEnumerator StartCelebration() { soldierState = SoldierState.CELEBRATING; agent.enabled = false; yield return(new WaitForSeconds(Random.Range(0.1f, 0.5f))); transform.LookAt(new Vector3(Camera.main.transform.position.x, transform.position.y, Camera.main.transform.position.z)); GetComponent <Rigidbody> ().AddForce(Vector3.up * celeberateForce); }
public void LookupsTest() { var x = 50.0f; var r = PhysicsConsts.SoldierRadius * 2; var posA = new Vector2(x, 0); var posB = new Vector2(x, r); var posC = new Vector2(x, r * 2.0f); var unitA = new SoldierState { Side = Side.Player, Id = "0", LaneKey = "0", Position = posA }; var unitB = new SoldierState { Side = Side.Enemy, Id = "1", LaneKey = "0", Position = posB }; var unitC = new SoldierState { Side = Side.Enemy, Id = "2", LaneKey = "0", Position = posC }; var a = new GameState(Difficulty.Easy); a.Soldiers = new List <SoldierState>(new[] { unitA, unitB, unitC }); Game.LoadFromState(a); var lookups = Game.Queries; Func <BaseUnitState, bool> enemyFilter = v => v.Id != unitA.Id && v.Side != unitA.Side; Func <BaseUnitState, bool> anyFilter = v => true; var closestEnemyQuery = new Queries.NearestUnit { LaneKey = "0", MaxDistance = 200, PreferredId = null, SearchFrom = unitA.Position }; var preferredEnemyQuery = new Queries.NearestUnit { LaneKey = "0", MaxDistance = 200, PreferredId = "2", SearchFrom = unitA.Position }; var nonexistentEnemyQuery = new Queries.NearestUnit { LaneKey = "0", MaxDistance = 0, PreferredId = null, SearchFrom = unitA.Position }; var closesetEnemy = lookups.GetNearestUnit(closestEnemyQuery, enemyFilter); var preferredEnemy = lookups.GetNearestUnit(preferredEnemyQuery, enemyFilter); var nonexistentEnemy = lookups.GetNearestUnit(nonexistentEnemyQuery, enemyFilter); var self = lookups.GetNearestUnit(closestEnemyQuery, anyFilter); Assert.AreEqual(closesetEnemy.Id, "1"); Assert.AreEqual(preferredEnemy.Id, "2"); Assert.AreEqual(self.Id, "0"); Assert.AreEqual(nonexistentEnemy, null); }
void FixedUpdateFiring() { // Check to see if we have a target to shoot. if (m_nearestEnemy == null || m_nearestEnemy.State == SoldierState.Dead) { FindNearestEnemy(); // If there's *no* valid target to shoot, resume the march. if (m_nearestEnemy == null) { State = SoldierState.Marching; return; } else { // If the nearest target is too far to shoot, resume the march. float distance = (transform.position - m_nearestEnemy.transform.position).magnitude; if (distance > firingDistance) { State = SoldierState.Marching; return; } } } float enemydistance = (transform.position - m_nearestEnemy.transform.position).magnitude; if (enemydistance > firingDistance) { State = SoldierState.Marching; return; } Vector2 enemyDirection = (Vector2)(m_nearestEnemy.transform.position - transform.position); enemyDirection.Normalize(); enemyDirection.x += Random.Range(-accuracyDeviation, accuracyDeviation); enemyDirection.y += Random.Range(-accuracyDeviation, accuracyDeviation); enemyDirection.Normalize(); // Spawn bullet Bullet newBullet = Instantiate <Bullet>(bulletPrefab); newBullet.gameObject.name = "Bullet - (" + name + ")"; newBullet.shooter = gameObject; newBullet.transform.position = transform.position; newBullet.transform.position += (Vector3)(enemyDirection * 1.1f); // @TODO Fix this hack. Shifts the bullet out of the shooter's collider // Fire bullet. newBullet.Fire(enemyDirection); // Reload. State = SoldierState.Reloading; }
void Update() { Vector3 dir; /// Battle has not started, mantain idle state. if (state == SoldierState.Idle || state == SoldierState.Dead) { return; } /// Battle begun, walk towards starting point. else if (state == SoldierState.Move) { transform.Translate(Vector3.forward * Time.deltaTime * moveSpeed); } else if (state == SoldierState.Seeking) { if (isRedArmy) { dir = (myTarget.transform.position - transform.position).normalized; } else { dir = (transform.position - myTarget.transform.position).normalized; } transform.Translate(dir * Time.deltaTime * moveSpeed); if (Vector3.Distance(transform.position, myTarget.transform.position) < 5.0f) { state = SoldierState.Attack; anim.SetBool(moveParam, false); anim.SetBool(attackParam, true); } } else if (state == SoldierState.Attack) { if (Vector3.Distance(transform.position, myTarget.transform.position) > 5.0f) { if (isRedArmy) { dir = (myTarget.transform.position - transform.position).normalized; } else { dir = (transform.position - myTarget.transform.position).normalized; } transform.Translate(dir * Time.deltaTime * moveSpeed); } } }
public override void SoldierStateChanged(SoldierState state) { base.SoldierStateChanged(state); myText.text = state + " State"; //Change the Panel to Attack Panel if (state == SoldierState.ATTACK) { //Active Action btns //Debug.Log ("Attack !!"); if (MovePanel.gameObject.activeSelf && !ActionPanel.gameObject.activeSelf) { //Debug.Log("Change to Action Panel"); MovePanel.transform.DOMove(new Vector3(MovePanel.transform.position.x, MovePanel.transform.position.y + 50.0f), 1).SetEase(Ease.OutSine).OnComplete(() => MovePanel.gameObject.SetActive(false)); ActionPanel.transform.DOMove(new Vector3(MovePanel.transform.position.x, MovePanel.transform.position.y - 8.0f), 1).SetEase(Ease.OutSine).OnStart(() => ActionPanel.gameObject.SetActive(true)); //MovePanel.transform.DOLocalMoveY(1.0f, 1).SetEase(Ease.OutSine).OnComplete(() => MovePanel.gameObject.SetActive(false)); //ActionPanel.transform.DOLocalMoveY(-1.0f, 1).SetEase(Ease.OutSine).OnStart(() => ActionPanel.gameObject.SetActive(true)); } //ActionPanel.gameObject.SetActive(true); //MovePanel.gameObject.SetActive(false); } //Change the Panel to Move Panel if (state == SoldierState.MOVE) { //Active Move btns //Debug.Log ("Move !!"); if (!MovePanel.gameObject.activeSelf && ActionPanel.gameObject.activeSelf) { //Debug.Log("Change to Move Panel"); MovePanel.transform.DOMove(new Vector3(MovePanel.transform.position.x, MovePanel.transform.position.y - 50.0f), 1).SetEase(Ease.OutSine).OnStart(() => MovePanel.gameObject.SetActive(true)); ActionPanel.transform.DOMove(new Vector3(MovePanel.transform.position.x, MovePanel.transform.position.y + 8.0f), 1).SetEase(Ease.OutSine).OnComplete(() => ActionPanel.gameObject.SetActive(false)); //MovePanel.transform.DOLocalMoveY(-1.0f, 1).SetEase(Ease.OutSine).OnStart(() => MovePanel.gameObject.SetActive(true)); //ActionPanel.transform.DOLocalMoveY(1.0f, 1).SetEase(Ease.OutSine).OnComplete(() => ActionPanel.gameObject.SetActive(false)); } } if (state == SoldierState.PLAY) { MovePanel.gameObject.SetActive(false); ActionPanel.gameObject.SetActive(false); } }
void FixedUpdateMarching() { // Find the nearest enemy soldier to figure out if we should stop marching // This doesn't need to be recalculated every physics frame, but it's simpler to implement right now... FindNearestEnemy(); if (m_nearestEnemy != null) { float distance = (transform.position - m_nearestEnemy.transform.position).magnitude; if (distance <= firingDistance) { State = SoldierState.Firing; return; } } // March! rb.velocity = marchDirection * marchSpeed * Time.fixedDeltaTime; }
void Start() { if (mySpawner == null) { Debug.LogAssertion(string.Format("Soldier '{0}' has no spawner", name)); } myAnimator = GetComponentInChildren <Animator>(); State = SoldierState.Marching; Health = maxHealth; if (army == Army.BlueArmy) { GetComponentInChildren <SpriteRenderer>().color = new Color(0.3f, 0.3f, 1f); } else if (army == Army.RedArmy) { GetComponentInChildren <SpriteRenderer>().color = new Color(1f, 0.3f, 0.3f); } }
void SwitchState(SoldierState newState) { curWP = 0; if ((state == SoldierState.Patrol)) { animator.SetTrigger("Alerted"); agent.SetDestination(transform.position); } if (newState == SoldierState.Alerted) { alertTime = Time.time; } if (newState == SoldierState.Patrol) { agent.SetDestination(patrolRoute[curWP].position); animator.SetTrigger("Calmed"); } state = newState; }
private void AddState(SoldierState state) { if (state == null) { Debug.Log("将要添加的状态为空"); } if (mStates.Count == 0) { mStates.Add(state); mCurrentState = state; return; } if (mStates.Contains(state)) { Debug.Log("已经包含了该状态"); } else { mStates.Add(state); mCurrentState = state; } }
bool CheckCanHeal() { lowestHPSoldier = soldierManager.FindNearestInjuredSoldierWithinRange(this, currentWeapon.range); if (lowestHPSoldier) { lowestSoldierHealth = lowestHPSoldier.GetComponent<Health>(); if (lowestSoldierHealth.GetHealth < lowestSoldierHealth.maxHealth) { state = SoldierState.Healing; return true; } else { state = prevState; return false; } } else { state = prevState; return false; } }
bool CheckCanAttack() { if (enemiesInSight.Count > 0) { state = SoldierState.Attacking; return true; } else { state = prevState; return false; } }
void FixedUpdateFiring() { // Check to see if we have a target to shoot. if (m_nearestEnemy == null || m_nearestEnemy.State == SoldierState.Dead) { FindNearestEnemy(); // If there's *no* valid target to shoot, resume the march. if (m_nearestEnemy == null) { State = SoldierState.Marching; return; } else { // If the nearest target is too far to shoot, resume the march. float distance = (transform.position - m_nearestEnemy.transform.position).magnitude; if (distance > firingDistance) { State = SoldierState.Marching; return; } } } float enemydistance = (transform.position - m_nearestEnemy.transform.position).magnitude; if (enemydistance > firingDistance) { State = SoldierState.Marching; return; } Vector2 enemyDirection = (Vector2)(m_nearestEnemy.transform.position - transform.position); enemyDirection.Normalize(); enemyDirection.x += Random.Range(-accuracyDeviation, accuracyDeviation); enemyDirection.y += Random.Range(-accuracyDeviation, accuracyDeviation); enemyDirection.Normalize(); // Spawn bullet Bullet newBullet = Instantiate<Bullet>(bulletPrefab); newBullet.gameObject.name = "Bullet - (" + name + ")"; newBullet.shooter = gameObject; newBullet.transform.position = transform.position; newBullet.transform.position += (Vector3)(enemyDirection * 1.1f); // @TODO Fix this hack. Shifts the bullet out of the shooter's collider // Fire bullet. newBullet.Fire(enemyDirection); // Reload. State = SoldierState.Reloading; }
public void StartWalk() { soldierState = SoldierState.WALKING; agent.enabled = true; }
public override void Update(GameTime gameTime) { base.Update(gameTime); if (!isActive) { healthText.Text = ""; return; } healthText.Position = new Vector2(position.X - 8, position.Y - 8); healthText.Text = health.ToString(); if (soldierState == SoldierState.Attacking) { //If soldier is out of range, move them until they are in range if (Vector2.Distance(position, targetLocation) > soldierRange) { if (Vector2.Distance(position, curTarget) < slowRadius + 5 && targetPath.Count > 2) { if (!graph.IsNodeBlocked(targetPath.Peek())) { curTarget = targetPath.Pop(); if (!graph.IsNodeBlocked(targetPath.Peek())) { curTarget = (curTarget + targetPath.Pop()) / 2; } else { Attack(target); return; } } else { Attack(target); return; } curTarget = new Vector2(curTarget.X + sprite.Width / 2, curTarget.Y + sprite.Height / 2); } else if (Vector2.Distance(position, curTarget) < slowRadius + 5 && targetPath.Count > 0) { if (!graph.IsNodeBlocked(targetPath.Peek())) { curTarget = targetPath.Pop(); } else { Attack(target); return; } curTarget = new Vector2(curTarget.X + sprite.Width / 2, curTarget.Y + sprite.Height / 2); } else if (targetPath.Count == 0 && Vector2.Distance(position, curTarget) < stopRadius) { if (graph.IsNodeBlocked(position)) { Attack(target); return; } //graph.SetNodeBlocked(position); } //rotate based on orientation base.rotation = (float)Math.Atan2(orientation.X, -orientation.Y); acceleration = curTarget - this.Position; distance = Math.Abs(acceleration.Length()); if (distance < stopRadius) { speed = 0; } else if (distance < slowRadius) { speed = maxSpeed * distance / slowRadius; } else { speed = maxSpeed; } oldVelocity = velocity; acceleration = Vector2.Normalize(curTarget - this.Position) * maxAccel; velocity += velocity * gameTime.ElapsedGameTime.Milliseconds + .5f * acceleration * gameTime.ElapsedGameTime.Milliseconds * gameTime.ElapsedGameTime.Milliseconds; velocity = Vector2.Normalize(velocity) * speed; position += velocity; if (velocity != Vector2.Zero) { orientation = velocity; } } else// if (!graph.IsNodeBlocked(position)) { //graph.SetNodeBlocked(position); if (target.IsActive) { AttackTarget(gameTime); } else { soldierState = SoldierState.Idle; } } } else if (soldierState == SoldierState.Idle) { graph.SetNodeBlocked(position); } }
// Use this for initialization void Start() { rb = GetComponent <Rigidbody>(); ene2.SetBool("State", false); SS = SoldierState.Fire; }
public SoldierTypeInfo(SoldierState State, SoldierInfo Info) { m_State = State; m_Soldier = Info; }
private void Awake() { anim = GetComponent <Animator>(); state = SoldierState.IDLE; }
public JsonSoldier(int health, float posX, float posY, bool canAttack, SoldierState state) { this.hp = health; this.posX = (float)Math.Round(posX, 2); this.posY = (float)Math.Round(posY, 2); this.canAttack = canAttack; this.state = state.ToString(); }
void SwitchState(SoldierState newState) { curWP = 0; if ((state == SoldierState.Patrol )) { animator.SetTrigger("Alerted"); agent.SetDestination(transform.position); } if(newState == SoldierState.Alerted) { alertTime = Time.time; } if(newState == SoldierState.Patrol) { agent.SetDestination(patrolRoute[curWP].position); animator.SetTrigger("Calmed"); } state = newState; }
public virtual void SoldierStateChanged(SoldierState arg1) { }
// Use this for initialization void Start() { destination = transform.position; moveDirection = Vector3.zero; state = SoldierState.Guarding; prevState = state; selected = false; line.enabled = false; EquipWeapon("MP5"); sight.UpdateSight(currentWeapon.range); }
public void Start() { mSCurrentState = mSMoveState; }
void Update() { Weapon_HealingBeam healingWpn = null; if (currentWeapon is Weapon_HealingBeam) { healingWpn = (Weapon_HealingBeam)currentWeapon; } switch (state) { case SoldierState.Moving: if (healingWpn) { healingWpn.StopHealing(); healingWpn.StopFiring(); } if (Vector3.Distance(destination, transform.position) > .5f) { currentWeapon.StopFiring(); moveDirection = (destination - transform.position).normalized; transform.rotation = Quaternion.LookRotation(moveDirection); moveDirection = transform.forward * moveSpeed; controller.SimpleMove(moveDirection); DrawLine(destination, Color.cyan); animation.CrossFade("run"); } else { state = SoldierState.Guarding; } break; case SoldierState.Guarding: if (healingWpn) { if (CheckCanHeal()) { prevState = SoldierState.Guarding; break; } else if(CheckCanAttack()) { prevState = SoldierState.Guarding; break; } else { healingWpn.StopHealing(); healingWpn.StopFiring(); animation.CrossFade("idle"); line.enabled = false; } } else if (CheckCanAttack()) { prevState = SoldierState.Guarding; break; } else { currentWeapon.StopFiring(); animation.CrossFade("idle"); line.enabled = false; } break; case SoldierState.AttackMove: prevState = SoldierState.AttackMove; DrawLine(destination, Color.red); if(healingWpn) { if(CheckCanHeal()) { prevState = SoldierState.AttackMove; } else if(CheckCanAttack()) { prevState = SoldierState.AttackMove; } else { healingWpn.StopHealing(); healingWpn.StopFiring(); if (Vector3.Distance(destination, transform.position) > .5f) { moveDirection = (destination - transform.position).normalized; transform.rotation = Quaternion.LookRotation(moveDirection); moveDirection = transform.forward * moveSpeed; controller.SimpleMove(moveDirection); animation.CrossFade("run"); } else { state = SoldierState.Guarding; } } } else if (!CheckCanAttack()) { currentWeapon.StopFiring(); if (Vector3.Distance(destination, transform.position) > .5f) { moveDirection = (destination - transform.position).normalized; transform.rotation = Quaternion.LookRotation(moveDirection); moveDirection = transform.forward * moveSpeed; controller.SimpleMove(moveDirection); animation.CrossFade("run"); } else { state = SoldierState.Guarding; } } else { prevState = SoldierState.AttackMove; } break; case SoldierState.Attacking: if(healingWpn && CheckCanHeal()) { } else if (CheckCanAttack()) { if(healingWpn) { AttackHealingWpn(); } else { Attack(); } } break; case SoldierState.Healing: if (CheckCanHeal()) { Heal(); } break; case SoldierState.HealMove: break; default: currentWeapon.StopFiring(); break; } selectionBox.enabled = selected; healthBar.SetActive(selected); }
public void Start() { mSCurrentState = mSMoveState; //StartCoroutine(RemoveDestroyedObjectInRange()); }
public void SetAttackMove(Vector3 _dest) { destination = _dest; state = SoldierState.AttackMove; }
public void SetMove(Vector3 _dest) { destination = _dest; state = SoldierState.Moving; }
void FixedUpdateMarching() { // Find the nearest enemy soldier to figure out if we should stop marching // This doesn't need to be recalculated every physics frame, but it's simpler to implement right now... FindNearestEnemy(); if (m_nearestEnemy != null) { float distance = (transform.position - m_nearestEnemy.transform.position).magnitude; if (distance <= firingDistance) { State = SoldierState.Firing; return; } } // March! rb.velocity = marchDirection * marchSpeed; }
void Start () { if (mySpawner == null) { Debug.LogAssertion(string.Format("Soldier '{0}' has no spawner", name)); } myAnimator = GetComponentInChildren<Animator>(); State = SoldierState.Marching; Health = maxHealth; if (army == Army.BlueArmy) { GetComponentInChildren<SpriteRenderer>().color = new Color(0.3f, 0.3f, 1f); } else if (army == Army.RedArmy) { GetComponentInChildren<SpriteRenderer>().color = new Color(1f, 0.3f, 0.3f); } }