예제 #1
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);
        }
    }
예제 #2
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);
        }
    }
예제 #3
0
 // -------------------------------------------------------------------------------
 // Name	:	UnregisterLayeredAudioSource (Overload)
 // Desc	:
 // -------------------------------------------------------------------------------
 public void UnregisterLayeredAudioSource(ILayeredAudioSource source)
 {
     _layeredAudio.Remove((LayeredAudioSource)source);
 }