Play sound when looking at an object for a certain amount of time
Im looking for a way of trigger an audio file when I look at the object (This case a steering wheel where I want to hear a horn) I already received a script from an awesome guy where I can move my main camera to the object if I look at that object for 2 seconds. In this case I want to trigger an audio file if I look at the steering wheel, I already looked for similar questions based on time instead of clicking. Im a noob in programming and some advice would be great! I have been looking into the event triggers and audio but I couldnt get anything to work the way I want to :(
using UnityEngine;
using System.Collections;
public class Lookable : MonoBehaviour
{
// The time that you have to look at a target to make the camera move towards that target
public float highlightingTime = 1.5f;
// hold a reference to the main cam for ray calculations
// we store our current target to perform time calculations and move to it, once we've reached highlightingTime
private Transform currentTarget = null;
private float lookAtDuration = 0f;
// Use this for initialization
void Start()
{
if (!mainCam)
mainCam = GetComponent<Camera>();
// define the target layer mask to only recognize objects with a "Target" layer
layerMask = 1 << LayerMask.NameToLayer ("Target");
}
// Update is called once per frame
RaycastHit hit;
// draw a line that matches the raycast
Debug.DrawRay (mainCam.transform.position, mainCam.transform.forward * rayLength, Color.blue);
if (Physics.Raycast(mainCam.transform.position, mainCam.transform.forward, out hit, rayLength, layerMask))
// we have a hit!
Transform target = hit.collider.transform;
// is this a target that we are looking sine the last update loop?
{
lookAtDuration += Time.deltaTime;
if (lookAtDuration >= highlightingTime)
{
// we now have looked at our target for a period of time
// next step is to move at its transform
mainCam.transform.parent.position = target.position;
}
target.gameObject.GetComponent<MeshRenderer>().material.SetColor("_Color", Color.red);
} else {
// if this is a new target that we are looking at, store it in our currentTarget
lookAtDuration = 0f;
}
if (currentTarget)
currentTarget.gameObject.GetComponent<MeshRenderer>().material.SetColor("_Color", Color.white);
currentTarget = null;
}
}
}
Comment
Your answer
Follow this Question
Related Questions
Stop AudioSource on Trigger!!! 1 Answer
Creating a Game Over after a Trigger/Event 1 Answer
Any way to fix an tag change problem? 1 Answer