Duda codigo c# en unity3d

Hola buenas, estoy creando un arkanoid en unity3d y ya me falta poco para acabar la primera fase. El problema lo estoy teniendo en añadir un sonido cada vez que la bola rebota.

Este es el código que tiene el script para la bola y estoy perdido en la función para activar el sonido cada vez que la bola golpea.

using UnityEngine;
using System.Collections;

public class Ball : MonoBehaviour {

    public float ballInitialVelocity = 600f;
   public AudioClip hitSound;

    private Rigidbody rb;
    private bool ballInPlay;


   // Use this for initialization
   void Awake () {

        rb = GetComponent<Rigidbody>();

   
   }

   void OnCollisionEnter(collision : Collision) {
      if (collision)
         audio.Play();
   }
         
         
      
   // Update is called once per frame
   void Update () {

        if (Input.GetButtonDown("Fire1") && ballInPlay == false)
        {
            transform.parent = null;
            ballInPlay = true;
            rb.isKinematic = false;
            rb.AddForce(new Vector3(ballInitialVelocity, ballInitialVelocity, 0));
        }
   
   }
}



Ademas me gustaría añadir un sonido cada vez que los bricks se destruyen. pero en todo eso estoy completamente perdido.

Decir que el lenguaje es C# y es la ultima version de unity3d. Alguna sugerencia?

Muchisimas gracias!
Mañana te lo miro, no recuerdo cómo era ahora, pero creo que lo tengo por ahí.

Para el sonido cuando los ladrillos se detruyen, lo puedes hacer de varias maneras, en el destroy del GameObject, por ejemplo. O también, del mismo modo que harás lo de las colisiones en la pelota, pero poniéndoselo al ladrillo.
Perfecto, muchisimas gracias.
Vale, a la bola métele un componente Audio Source, en clip metes el sonido que quieras que suene, y le desmarcas la casilla de Play on Awake.
Y en el script mete esto:

using UnityEngine;
using System.Collections;

public class SoundOnCollision : MonoBehaviour {

    void OnCollisionEnter(Collision collision)
    {
        AudioSource sound = GetComponent<AudioSource>();
        sound.Play();
    }
}


PD: Recuerda cambiar el nombre de la clase por la tuya
sexto escribió:Vale, a la bola métele un componente Audio Source, en clip metes el sonido que quieras que suene, y le desmarcas la casilla de Play on Awake.
Y en el script mete esto:

using UnityEngine;
using System.Collections;

public class SoundOnCollision : MonoBehaviour {

    void OnCollisionEnter(Collision collision)
    {
        AudioSource sound = GetComponent<AudioSource>();
        sound.Play();
    }
}


PD: Recuerda cambiar el nombre de la clase por la tuya



Mil gracias la bola ya tiene sonido, ahora me faltan los bricks.

Ese es el código que tengo, y he ido añadiendo brick a brick el clip de audio que quiero ponerle, pero no funciona.

using UnityEngine;
using System.Collections;

public class Bricks : MonoBehaviour {

    public GameObject brickParticle;

    void OnCollisionEnter (Collision other)
    {
        Instantiate(brickParticle, transform.position, Quaternion.identity);
        GM.instance.DestroyBrick();
        Destroy(gameObject);
   AudioSource sound = GetComponent<AudioSource>();
   sound.Play();
    }
}
Primero, eso no lo hagas, lo de poner el audio brick a brick.
Haz uno sólo, métele los compontentes y scripts que quieras y creas un prefab,y de ahí los sacas todos.

Y para el sonido de los briks, en el código de mi script, tienes la variable collision, que es del tipo Collision, de ahí, puedes sacar con qué objeto ha sido la colisión, un ladrillo, la pared, el suelo, etc, y según dónde haya chocado, puedes hacer que se reproduzca un sonido u otro.

Otra forma es añadir el mismo script que has añadido a la bola. Se lo metes el brick, pero le metes el clip correspondiente, pero si lo haces así te recomiendo que en la bola pongas un condicional para que sólo suene si colisiona con un objeto que no sea un ladrillo, ya que si no, sonarán los dos sonidos.

Para lo de las colisiones no recuerdo todas las variables, pero en la documentación de Unity está bastante bien explicado.
http://docs.unity3d.com/ScriptReference/Collision.html

Si no me equivoco, el objeto contra el que colisiona es collision.GameObject.

EDITO: Otra cosa, en el script que tienes, no lo sé, pero igual te funciona metiendo el sonido antes del destroy, el destroy siempre lo último.
5 respuestas