• 根据声音获取对象


    // Cast a sphere with the desired radius. Check each object's audio source to see if audio is playing. If audio is playing
        // and its audibility is greater than the audibility threshold then return the object heard
        /// <summary>
        /// Withins the hearing range.
        /// </summary>
        /// <returns>The hearing range.</returns>
        /// <param name="transform">玩家</param>
        /// <param name="linearAudibilityThreshold">Linear audibility threshold.</param>
        /// <param name="hearingRadius">可以听到的范围</param>
        /// <param name="objectLayerMask">对象层遮罩</param>
        public static Transform WithinHearingRange(Transform transform, float linearAudibilityThreshold, float hearingRadius, LayerMask objectLayerMask)
        {
            Transform objectHeard = null;
            var hitColliders = Physics.OverlapSphere(transform.position, hearingRadius, objectLayerMask);//获取范围内的对象
            if (hitColliders != null) {
                float maxAudibility = 0;
                AudioSource colliderAudioSource;
                for (int i = 0; i < hitColliders.Length; ++i) {
                    // Check to see if the hit agent has an audio source and that audio source is playing
                    if ((colliderAudioSource = hitColliders[i].GetComponent<AudioSource>()) != null && colliderAudioSource.isPlaying) {//对象发出声音
                        // The audio source is playing. Make sure the sound can be heard from the agent's current position
                        var audibility = colliderAudioSource.volume / Vector3.Distance(transform.position, hitColliders[i].transform.position);//声音衰减
                        if (audibility > linearAudibilityThreshold) {//声音大于衰减阀值
                            if (audibility > maxAudibility) {//获取声音最大的那个
                                maxAudibility = audibility;
                                objectHeard = hitColliders[i].transform;
                            }
                        }
                    }
                }
            }
            return objectHeard;
        }
  • 相关阅读:
    c++ namespace简单用法
    python2编码问题
    python dict()函数 /// logging模块///yield//生成器和迭代器
    python 对于一个字典,根据其value值获取其对应的keys值
    python 包/库/模块
    python __init()__
    python continue 和 break的区别
    python list去重
    linux命令,将一个文件夹中的内容copy到另外一个文件夹
    python 正则(re.compile()/re.findall())
  • 原文地址:https://www.cnblogs.com/88999660/p/3732313.html
Copyright © 2020-2023  润新知