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

Questions à propos de la partie audio, y compris les problèmes de script s'y rapportant.
damien-max
Messages : 54
Inscription : 19 Déc 2017 23:44

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

Message par damien-max » 20 Jan 2018 18:28

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 :)

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

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

Message par Max » 20 Jan 2018 19:07

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();
.....
}
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

damien-max
Messages : 54
Inscription : 19 Déc 2017 23:44

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

Message par damien-max » 21 Jan 2018 21:58

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 :/

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

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

Message par Max » 21 Jan 2018 22:03

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;
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

damien-max
Messages : 54
Inscription : 19 Déc 2017 23:44

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

Message par damien-max » 21 Jan 2018 22:13

D'accord je vais essayer, merci encore de votre patience :)

EDIT: Ca marche nikel! Merci beaucoup!

Répondre

Revenir vers « Audio, musique et sons »