예제 #1
0
    protected virtual void Awake()
    {
        _transform = transform;
        _animator  = GetComponent <Animator>();
        _navAgent  = GetComponent <NavMeshAgent>();
        _collider  = GetComponent <Collider>();

        _aiBodyPartLayer = LayerMask.NameToLayer("AI Body Part");

        if (GameSceneManager.instance != null)
        {
            if (_collider)
            {
                GameSceneManager.instance.RegisterAIStateMachine(_collider.GetInstanceID(), this);
            }
            if (_sensorTrigger)
            {
                GameSceneManager.instance.RegisterAIStateMachine(_sensorTrigger.GetInstanceID(), this);
            }
        }

        if (_rootBone != null)
        {
            Rigidbody[] bodies = _rootBone.GetComponentsInChildren <Rigidbody>();

            foreach (Rigidbody bodyPart in bodies)
            {
                if (bodyPart != null && bodyPart.gameObject.layer == _aiBodyPartLayer)
                {
                    _bodyPrats.Add(bodyPart);
                    GameSceneManager.instance.RegisterAIStateMachine(bodyPart.GetInstanceID(), this);
                }
            }
        }
    }
    void OnTriggerEnter(Collider other)
    {
        Debug.Log("Collision");
        if (other.tag == "Boundary" || other.tag == "Enemy" || other.tag == "EnemyA" || other.tag == "EnemyB" || other.tag == "Shield")
        {
            return;
        }

        var colliderId = GetComponent <Collider>().GetInstanceID();

        if (leftHit >= 2 && rightHit >= 2)
        {
            // TODO hide shield
            if (colliderId == coreCollider.GetInstanceID())
            {
                // hit core
                Destroy(other.gameObject);
                if (++hit >= 15)
                {
                    Destroy(gameObject);
                    if (explosion != null)
                    {
                        Instantiate(explosion, transform.position, transform.rotation);
                    }
                }
                else
                {
                    // show effect
                    Debug.Log("Core was hit: " + hit);
                }
            }
            else
            {
                Debug.Log("Only core should be hit!");
            }

            timer -= Time.deltaTime;
            if (timer <= 0)
            {
                leftHit  = 0;
                rightHit = 0;
                timer    = 5.0f;
            }
        }
        else
        {
            if (colliderId == leftCollider.GetInstanceID())
            {
                Destroy(other.gameObject);
                leftHit++;
                Debug.Log("Left was hit: " + leftHit);
            }
            else if (colliderId == rightCollider.GetInstanceID())
            {
                Destroy(other.gameObject);
                rightHit++;
                Debug.Log("Right was hit: " + rightHit);
            }
        }
    }
예제 #3
0
    // -----------------------------------------------------------------
    // Name	:	Awake
    // Desc	:	Cache Components
    // -----------------------------------------------------------------
    protected virtual void Awake()
    {
        // Cache all frequently accessed components
        _transform = transform;
        _animator  = GetComponent <Animator>();
        _navAgent  = GetComponent <NavMeshAgent>();
        _collider  = GetComponent <Collider>();

        // Cache Audio Source Reference for Layered AI Audio
        AudioSource audioSource = GetComponent <AudioSource>();

        // Get BodyPart Layer
        _aiBodyPartLayer = LayerMask.NameToLayer("AI Body Part");

        // Do we have a valid Game Scene Manager
        if (GameSceneManager.instance != null)
        {
            // Register State Machines with Scene Database
            if (_collider)
            {
                GameSceneManager.instance.RegisterAIStateMachine(_collider.GetInstanceID(), this);
            }
            if (_sensorTrigger)
            {
                GameSceneManager.instance.RegisterAIStateMachine(_sensorTrigger.GetInstanceID(), this);
            }
        }

        if (_rootBone != null)
        {
            Rigidbody[] bodies = _rootBone.GetComponentsInChildren <Rigidbody>();

            foreach (Rigidbody bodyPart in bodies)
            {
                if (bodyPart != null && bodyPart.gameObject.layer == _aiBodyPartLayer)
                {
                    _bodyParts.Add(bodyPart);
                    GameSceneManager.instance.RegisterAIStateMachine(bodyPart.GetInstanceID(), this);
                }
            }
        }

        // Register the Layered Audio Source
        if (_animator && audioSource && AudioManager.instance)
        {
            _layeredAudioSource = AudioManager.instance.RegisterLayeredAudioSource(audioSource, _animator.layerCount);
        }
    }
예제 #4
0
    protected virtual void Awake()
    {
        // Cache all frequently accessed components
        _transform = transform;
        _animator  = GetComponent <Animator>();
        _navAgent  = GetComponent <NavMeshAgent>();
        _collider  = GetComponent <Collider>();

        AudioSource audioSource = GetComponent <AudioSource>();

        // Register the instance IDs of all the agent's collider and sensor collider
        if (GameSceneManager.instance != null)
        {
            if (_collider)
            {
                GameSceneManager.instance.RegisterAIStateMachine(_collider.GetInstanceID(), this);
            }
            if (_sensorTrigger)
            {
                GameSceneManager.instance.RegisterAIStateMachine(_sensorTrigger.GetInstanceID(), this);
            }
        }

        // Get layers
        _aiBodyPartLayer = LayerMask.NameToLayer("AI Body Part");

        // Adding all our body parts to the our body parts list (To be able to change them to kinematic or non kinematic state
        if (_rootBone != null)
        {
            Rigidbody[] bodies = _rootBone.GetComponentsInChildren <Rigidbody>();
            foreach (Rigidbody bodyPart in bodies)
            {
                if (bodyPart != null && bodyPart.gameObject.layer == _aiBodyPartLayer)
                {
                    _bodyParts.Add(bodyPart);
                    GameSceneManager.instance.RegisterAIStateMachine(bodyPart.GetInstanceID(), this);
                }
            }
        }

        if (_animator && audioSource && AudioManager.instance)
        {
            _layeredAudioSource = AudioManager.instance.RegisterLayeredAudioSource(audioSource, _animator.layerCount);
        }
    }
예제 #5
0
    protected virtual void Awake()
    {
        _animator = GetComponent <Animator>();
        _navAgent = GetComponent <NavMeshAgent>();
        _collider = GetComponent <Collider>();

        if (GameSceneManager.instance != null)
        {
            // Register State Machines with Scene Database
            if (_collider)
            {
                GameSceneManager.instance.RegisterAIStateMachine(_collider.GetInstanceID(), this);
            }
            if (_sensorTrigger)
            {
                GameSceneManager.instance.RegisterAIStateMachine(_sensorTrigger.GetInstanceID(), this);
            }
        }
    }
예제 #6
0
    public virtual void Awake()
    {
        _transform = transform;
        _animator  = GetComponent <Animator>();
        _agent     = GetComponent <NavMeshAgent>();
        _collider  = GetComponent <Collider>();

        if (GameSceneManager.instance != null)
        {
            if (_collider)
            {
                GameSceneManager.instance.RegisterAIStateMachine(_collider.GetInstanceID(), this);
            }
            if (_sensorTrigger)
            {
                GameSceneManager.instance.RegisterAIStateMachine(_sensorTrigger.GetInstanceID(), this);
            }
        }
    }
예제 #7
0
    protected virtual void Awake()
    {
        // 缓存所有常用的 components
        _ani      = GetComponent <Animator>();
        _navAgent = GetComponent <NavMeshAgent>();
        _collider = GetComponent <Collider>();

        if (GameSceneManager.Instance != null)
        {
            if (_collider)
            {
                GameSceneManager.Instance.RegisterAIStateMachines(_collider.GetInstanceID(), this);
            }
            if (_sensorTrigger)
            {
                GameSceneManager.Instance.RegisterAIStateMachines(_sensorTrigger.GetInstanceID(), this);
            }
        }
    }
예제 #8
0
    protected virtual void Awake()
    {
        //为组件去赋值
        _anim     = GetComponent <Animator>();
        _agent    = GetComponent <NavMeshAgent>();
        _collider = GetComponent <Collider>();

        if (GameScenseManager.Instance != null)
        {
            //每一个物体的InstanceID在场景中是唯一的
            //注册到 [游戏场景管理]
            if (_targetColiiderTrigger)
            {
                GameScenseManager.Instance.RegisterAiStateMachine(_targetColiiderTrigger.GetInstanceID(), this);
            }
            if (_sensorColiiderTrigger)
            {
                GameScenseManager.Instance.RegisterAiStateMachine(_sensorColiiderTrigger.GetInstanceID(), this);
            }
        }
    }
예제 #9
0
    // -----------------------------------------------------------------
    // Name :   Awake
    // Desc :   Cache Components
    // -----------------------------------------------------------------
    protected virtual void Awake()
    {
        // Cache all frequently accessed components
        _transform = transform;
        _animator  = GetComponent <Animator>();
        _navAgent  = GetComponent <NavMeshAgent>();
        _collider  = GetComponent <Collider>();

        // Do we have a valid Game Scene Manager
        if (GameSceneManager.instance != null)
        {
            // Register State Machines with Scene Database
            if (_collider)
            {
                GameSceneManager.instance.RegisterAIStateMachine(_collider.GetInstanceID(), this);
            }
            if (_sensorTrigger)
            {
                GameSceneManager.instance.RegisterAIStateMachine(_sensorTrigger.GetInstanceID(), this);
            }
        }
    }