Page 1 sur 1

[RESOLU] Comment mettre un sons de coup de feu sur mon arme?

Publié : 20 Jan 2018 18:28
par damien-max
Bonjour, je souhaiterais vous faire part de mon probleme:
Je suis débutant en codage. Je travail sur un jeu 2d de type shooter et j'aimerais savoir comment jouer un sons sur la fréquence du tire de l'arme (FireRate). J'ai déja essayer de utiliser la commande AudioSource.play (enfin un truc comme ça) mais sans succes. Le sons est déja sur le GameObject.

voici le script:

Code : Tout sélectionner

using System.Collections;
using UnityEngine;

public class Weapon : MonoBehaviour {

	public float FireRate = 0;
	public float Damage = 10;
	public LayerMask whatToHit;

	public Transform BulletTrailPrefab;
	public Transform MuzzleFlashPrefab;
	float timeToSpawnEffet = 0;
	public float effectSpawnRate = 10;

	float timeToFire = 0;
	Transform firePoint;

	// Use this for initialization
	void Awake () {
		firePoint = transform.Find ("FirePoint");
		if (firePoint == null) {
			Debug.LogError ("Pas de firepoint? WHAT?!");
		}
	}
	
	// Update is called once per frame
	void Update () {
		if (FireRate == 0) {
			if (Input.GetKeyDown (KeyCode.Mouse0)) {
				Shoot ();
			}
		} 
		else {
			if (Input.GetKey (KeyCode.Mouse0) && Time.time > timeToFire)  {
				timeToFire = Time.time + 1/FireRate;
				Shoot();
			}
		}
	}

	void Shoot () {
		Vector2 mousePosition = new Vector2 (Camera.main.ScreenToWorldPoint (Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y) ;
		Vector2 firePointPosition = new Vector2 (firePoint.position.x, firePoint.position.y);
		RaycastHit2D hit = Physics2D.Raycast (firePointPosition, mousePosition - firePointPosition, 100, whatToHit);
		if (Time.time >= timeToSpawnEffet) {
			Effect ();
			timeToSpawnEffet = Time.time + 1 / effectSpawnRate;
		}
		Debug.DrawLine (firePointPosition, (mousePosition-firePointPosition)*100, Color.black);
		if (hit.collider != null) {
			Debug.DrawLine (firePointPosition, hit.point, Color.red);
			Debug.Log ("Tu a touché " + hit.collider.name + " et inffligé " + Damage + " dégats!");
		}
	}

	void Effect () {
		Instantiate (BulletTrailPrefab, firePoint.position, firePoint.rotation);
		Transform clone = Instantiate (MuzzleFlashPrefab, firePoint.position, firePoint.rotation) as Transform;
		clone.parent = firePoint;
		float size = Random.Range (3f, 3.9f);
		clone.localScale = new Vector3 (size, size, size);
		Destroy (clone.gameObject, 0.02f);
	}
}
A noter que dans le script le FireRate est sur 0 mais dans Unity il est sur 8. Merci d'avance :)

Re: Comment mettre un sons de coup de feu sur mon arme?

Publié : 20 Jan 2018 19:07
par Max
Hello,
damien-max a écrit :
20 Jan 2018 18:28
J'ai déja essayer de utiliser la commande AudioSource.play (enfin un truc comme ça) mais sans succes. Le sons est déja sur le GameObject.
Tu n'était pas très loin de la solution.
Tu dois récupérer le component AudioSource de ton GameObject (component qui doit donc avoir le bon son), et au moment du tir, dans ton script, tu joues le son avec Play. Résumé en code:

Code : Tout sélectionner

AudioSource audio;

// Use this for initialization
void Start () {
    audio = GetComponent<AudioSource>();
}
	
// 
void Shoot() {
.....
    audio.Play();
.....
}

Re: Comment mettre un sons de coup de feu sur mon arme?

Publié : 21 Jan 2018 21:58
par damien-max
J'ai essayé, mais il me met 2 erreurs:
error CS0619 'UnityEngine.Component.audio' is obsolete: `Property audio has been deprecated. Use GetComponent<AudioSource>() instead. (UnityUpgradable)'

error CS0200: Property or indexer `UnityEngine.Component.audio' cannot be assigned to (it is read-only)

Mon script étantle suivant (encore dsl):

Code : Tout sélectionner

using System.Collections;
using UnityEngine;

public class Weapon : MonoBehaviour {

	public float FireRate = 0;
	public float Damage = 10;
	public LayerMask whatToHit;

	public Transform BulletTrailPrefab;
	public Transform MuzzleFlashPrefab;
	float timeToSpawnEffet = 0;
	public float effectSpawnRate = 10;

	float timeToFire = 0;
	Transform firePoint;

	// Use this for initialization
	void Awake () {
		firePoint = transform.Find ("FirePoint");
		if (firePoint == null) {
			Debug.LogError ("Pas de firepoint? WHAT?!");
		}
	}

    void Start() {
		audio = GetComponent <AudioSource>();
    }
	
	// Update is called once per frame
	void Update () {
		if (FireRate == 0) {
			if (Input.GetKeyDown (KeyCode.Mouse0)) {
				Shoot ();
			}
		} 
		else {
			if (Input.GetKey (KeyCode.Mouse0) && Time.time > timeToFire)  {
				timeToFire = Time.time + 1/FireRate;
				audio.Play ();
				Shoot();
			}
		}
	}

	void Shoot () {
		Vector2 mousePosition = new Vector2 (Camera.main.ScreenToWorldPoint (Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y) ;
		Vector2 firePointPosition = new Vector2 (firePoint.position.x, firePoint.position.y);
		RaycastHit2D hit = Physics2D.Raycast (firePointPosition, mousePosition - firePointPosition, 100, whatToHit);
		if (Time.time >= timeToSpawnEffet) {
			Effect ();
			timeToSpawnEffet = Time.time + 1 / effectSpawnRate;
		}
		Debug.DrawLine (firePointPosition, (mousePosition-firePointPosition)*100, Color.black);
		if (hit.collider != null) {
			Debug.DrawLine (firePointPosition, hit.point, Color.red);
			Debug.Log ("Tu a touché " + hit.collider.name + " et inffligé " + Damage + " dégats!");
		}
	}

	void Effect () {
		Instantiate (BulletTrailPrefab, firePoint.position, firePoint.rotation);
		Transform clone = Instantiate (MuzzleFlashPrefab, firePoint.position, firePoint.rotation) as Transform;
		clone.parent = firePoint;
		float size = Random.Range (3f, 3.9f);
		clone.localScale = new Vector3 (size, size, size);
		Destroy (clone.gameObject, 0.02f);
	}
}
Je ne sais pas pourquoi ça ne marche pas :/

Re: Comment mettre un sons de coup de feu sur mon arme?

Publié : 21 Jan 2018 22:03
par Max
Bonsoir,

audio ne semble pas être définis, donc normal que tu ai des erreurs.
Dans le code que j'avais posté, il y avait un

Code : Tout sélectionner

AudioSource audio;

Re: Comment mettre un sons de coup de feu sur mon arme?

Publié : 21 Jan 2018 22:13
par damien-max
D'accord je vais essayer, merci encore de votre patience :)

EDIT: Ca marche nikel! Merci beaucoup!