x


how to PlayOneShot from a OnCollisionEnter wiith a RaycastHit /Collider>Raycast

hello i have this script

var snd : AudioClip;
var touch : Vector3;
var hit : RaycastHit;
var coll : Collision;

function Update ()
{
    touch[0] = 320/2;
    touch[1] = iPhoneInput.GetTouch(0).position.y;
    touch[2] = 100;

    var ray = Camera.main.ScreenPointToRay (touch);


    if (collider.Raycast (ray, hit, 100)) 
    {
            ??????????coll??????????;
    }

}

function OnCollisionEnter (coll : Collision)
{

    audio.PlayOneShot(snd);

}

that i am using to trigger sound from a touch i just dont know what to write in the boolean condition of the ray for the system to understand to start the OnColliderEnter function

i am doing it because if i playoneshot inside my ray condition it will trigger as long as i have my finger over the mesh

i want to be able to trig on enter , like this i touch and it will play , but it will also play if i drag my finger over the other mesh on the screen

thks

more ▼

asked Jul 07 '10 at 12:39 PM

Line gravatar image

Line
1 1 1 1

(comments are locked)
10|3000 characters needed characters left

1 answer: sort oldest

OnCollisionEnter is for rigidbodies or colliders entering the trigger, not for raycasts.

If you want your sound to only play once, you just need some simple logic to check to see what's going on.

Something like this:

var canPlaySound = false;


function Update()
{
    if( // collider function )
    {
        if( canPlaySound )
        {   
            // play sound
            canPlaySound = false;
        }
    }
    else
    {
        canPlaySound = true;
    }
}
more ▼

answered Jul 07 '10 at 03:05 PM

Tetrad gravatar image

Tetrad
7.2k 27 37 89

thanks for the quick answer i understand the code i tried it , it is working , but still the sound is looping , so i changed from audio clip to audio source (because i will try to work on the pitch later) i added a !snd.isPlaying condition in the loop then my problem is that the program wait for almost 3 or 4 seconds before it is possible to start the sound again because i have samples with a long reverb on . so i am back to the beginning , i know i cant use the isPlaying boolean funtion i need something like a onEnter collision usable with raycast system , and i have no idea how to do

Jul 07 '10 at 10:29 PM Line

because the update fonction is a loop , the condition is going into a loop on everyframe once it plays , once it can t , ...

i have tryed the iPhoneTouchPhase.Began but then i can t drag my finger like i would play strings of a guitar software.

Jul 07 '10 at 10:38 PM Line
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x2482
x1682
x1525
x227
x28

asked: Jul 07 '10 at 12:39 PM

Seen: 2103 times

Last Updated: Jul 07 '10 at 03:02 PM