예제 #1
0
    /// <summary>
    /// 随机生成一个敌机
    /// </summary>
    private void RandomGenerateEnemy()
    {
        EnemyAircraft enemy        = null;
        var           config       = m_enemyRandom.Next();
        var           aircraftType = (AircraftType)config.Index;

        if (m_reusePool.ContainsKey(aircraftType) && m_reusePool[aircraftType].Count > 0)
        {
            enemy = m_reusePool[aircraftType].Dequeue();
            enemy.ActiveSelf(true);
        }
        else
        {
            enemy = (EnemyAircraft)AircraftFactory.CreateAircraft((AircraftType)config.Index);
            enemy.backToPoolAction = () =>
            {
                // 对象回收
                if (!m_reusePool.ContainsKey(aircraftType))
                {
                    m_reusePool[aircraftType] = new Queue <EnemyAircraft>();
                }
                m_reusePool[aircraftType].Enqueue(enemy);

                if (m_aliveEnemy.Contains(enemy))
                {
                    m_aliveEnemy.Remove(enemy);
                }
            };
        }
        enemy.blood     = config.Blood;
        enemy.moveSpeed = Random.Range(config.MinSpeed, config.MaxSpeed);
        enemy.ResetTimeToFire(1);
        enemy.RandomStartPos();
        if (!m_aliveEnemy.Contains(enemy))
        {
            m_aliveEnemy.Add(enemy);
        }
    }
    private void OnTriggerEnter(Collider collider)
    {
        if (collider.gameObject.tag == "enemyAircraft")
        {
            EnemyAircraft enemyTarget = collider.gameObject.GetComponentInParent <EnemyAircraft>();
            targetUI = collider.gameObject.GetComponentInChildren <UIFollowTarget>();
            targetUI.crosshair.color = Color.magenta;
            collider.gameObject.GetComponentInChildren <MeshRenderer>().material.color = Color.red;
            enemyTarget.fuel = enemyTarget.fuel - 10;
            objectAffected   = collider.gameObject;
            Invoke("RestoreColor", 0.1f);
        }

        if (collider.gameObject.tag == "enemyTurret")
        {
            Turret enemyTarget = collider.gameObject.GetComponent <Turret>();
            targetUI = collider.gameObject.GetComponentInChildren <UIFollowTarget>();
            targetUI.crosshair.color = Color.magenta;
            collider.gameObject.GetComponentInChildren <MeshRenderer>().material.color = Color.red;
            enemyTarget.fuel = enemyTarget.fuel - 10;
            objectAffected   = collider.gameObject;
            Invoke("RestoreColor", 0.1f);
        }
    }
 private void Start()
 {
     enemy = GetComponentInParent <EnemyAircraft>();
 }