Question by
Pedro Garcia-Huidobro · Mar 18, 2016 at 09:03 PM ·
triggersoundssource
Playing Audio Source on trigger not working
Im trying to make a song play when the player character passes a collider, but i can't manage to make it posible :c I have been using the ActivatreTrigger Standar Asset and ....
using System;
using UnityEngine;
using Object = UnityEngine.Object;
namespace UnityStandardAssets.Utility
{
public class ActivateTrigger : MonoBehaviour
{
// A multi-purpose script which causes an action to occur when
// a trigger collider is entered.
public enum Mode
{
Trigger = 0, // Just broadcast the action on to the target
Replace = 1, // replace target with source
Activate = 2, // Activate the target GameObject
Enable = 3, // Enable a component
Animate = 4, // Start animation on target
Deactivate = 5 // Decativate target GameObject
}
public Mode action = Mode.Activate; // The action to accomplish
public Object target; // The game object to affect. If none, the trigger work on this game object
public GameObject source;
public int triggerCount = 1;
public bool repeatTrigger = false;
private void DoActivateTrigger()
{
triggerCount--;
if (triggerCount == 0 || repeatTrigger)
{
Object currentTarget = target ?? gameObject;
Behaviour targetBehaviour = currentTarget as Behaviour;
GameObject targetGameObject = currentTarget as GameObject;
if (targetBehaviour != null)
{
targetGameObject = targetBehaviour.gameObject;
}
switch (action)
{
case Mode.Trigger:
if (targetGameObject != null)
{
targetGameObject.BroadcastMessage("DoActivateTrigger");
}
break;
case Mode.Replace:
if (source != null)
{
if (targetGameObject != null)
{
Instantiate(source, targetGameObject.transform.position,
targetGameObject.transform.rotation);
DestroyObject(targetGameObject);
}
}
break;
case Mode.Activate:
if (targetGameObject != null)
{
targetGameObject.SetActive(true);
}
break;
case Mode.Enable:
if (targetBehaviour != null)
{
targetBehaviour.enabled = true;
}
break;
case Mode.Animate:
if (targetGameObject != null)
{
targetGameObject.GetComponent<Animation>().Play();
}
break;
case Mode.Deactivate:
if (targetGameObject != null)
{
targetGameObject.SetActive(false);
}
break;
}
}
}
private void OnTriggerEnter(Collider other)
{
DoActivateTrigger();
}
}
}
a script I found online
using UnityEngine;
using System.Collections;
public class SoundTrigger : MonoBehaviour {
public AudioSource source;
public AudioClip clip;
private bool isPlayed;
void Start(){
source = GetComponent<AudioSource> ();
isPlayed = false;
}
void OntriggerEnter(Collider other){
if (!isPlayed) {
source.Play ();
isPlayed = true;
}
}
void OntriggerExit(Collider other){
if (source.isPlaying) {
source.Stop ();
}
}
}
Comment
Answer by MacroNerd · Mar 18, 2016 at 09:31 PM
Create a new plane (if it's 3D) and set the mesh collider to Convex and Is Trigger.
2.)Set the plane's tag to Trigger or whatever you can remember.
3.)Now this code may work, but you should test it and if it doesn't, then sorry. Made it off the top of my head..
void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag ("Trigger"))
{
Component.audio.enabled = true;
}
}
void OnTriggerExit(Collider other)
{
if (other.gameObject.CompareTag ("Trigger"))
{
Component.audio.enabled = true;
}
}