示例#1
0
    void OnCollisionEnter(Collision collision)
    {
        float speed  = previous_velocities[0].magnitude;
        float impact = speed * weight_;
        //print("Item impact = " + impact);

        float play_volume;
        bool  sliding     = false;
        bool  should_play = true;

        if (Mathf.Abs(previous_velocities[0].y) < minimum_speed_to_make_sound && Mathf.Abs(previous_velocities[0].y) > 0.2f)
        {
            play_volume = 0;
            sliding     = true;
            should_play = false;
        }
        else if (impact <= quiet_vol_impact_threshold)
        {
            play_volume = quiet_vol;
            sliding     = true;
            should_play = true;
        }
        else if (impact <= middle_vol_impact_threshold)
        {
            play_volume = quiet_vol;
            sliding     = false;
            should_play = true;
        }
        else if (impact <= loud_vol_impact_threshold)
        {
            play_volume = middle_vol;
            sliding     = false;
            should_play = true;
        }
        else // impact > middle_vol_impact_threshold
        {
            play_volume = loud_vol;
            sliding     = false;
            should_play = true;
        }

        if (should_play)
        {
            audio_src_.volume = play_volume;
            if (sliding)
            {
                //print("item is sliding");
                //audio_src_.PlayOneShot(drag_sound_);
                AudioSource.PlayClipAtPoint(drag_sound_, transform.position, play_volume);
            }
            else
            {
                //audio_src_.PlayOneShot(crash_sound_);
                AudioSource.PlayClipAtPoint(crash_sound_, transform.position, play_volume);
            }
            //text_obj.SetActive(true);

            // check to see if any guards heard the object
            GameObject[] guards = GameObject.FindGameObjectsWithTag("Guard");
            for (int i = 0; i < guards.Length; i++)
            {
                float distance = Vector3.Distance(guards[i].transform.position, transform.position);
                if (vol_dist_scalar * play_volume / distance > 1)
                {
                    PatrolScript ps = guards[i].GetComponent <PatrolScript>();
                    ps.Investigate(transform);
                }
            }
        }
    }