Voilà mon problème, je veux créer un script BonnusCollide qui me permet, au contact de l'objet auquel est rattaché le script, d'augmenter la cadence de tir de mon arme. Seulement, la variable définissant la cadence de tir de l'arme (timeBetweenBullets) est définie sur le script PlayerShooting. J'aimerais donc pouvoir invoquer le script PlayerShooting et sa variable timeBetweenBullets dans le script BonnusCollide et pouvoir y modifier la valeur de timeBetweenBullets.
Seulement voila, je n'ai jamais codé (du moins sans tuto) de ma vie
J'ai bien cherché sur internet et j'ai compris qu'il me fallait utiliser GetComponent , seulement je ne sais pas comment l'utiliser ni où il faut le mettre et encore moins sa syntaxe.
Voilà quand même le script PlayerShooting d'où est issue timeBetweenBullets ainsi que quelques essais que j'ai pu faire avec le GetComponnent mais qui se sont conclus sur des erreurs
PlayerShooting
Code : Tout sélectionner
using UnityEngine;
public class PlayerShooting : MonoBehaviour
{
public int damagePerShot = 20;
public float timeBetweenBullets = 0.15f;
public float range = 100f;
float timer;
Ray shootRay;
RaycastHit shootHit;
int shootableMask;
ParticleSystem gunParticles;
LineRenderer gunLine;
AudioSource gunAudio;
Light gunLight;
float effectsDisplayTime = 0.2f;
void Awake ()
{
shootableMask = LayerMask.GetMask ("Shootable");
gunParticles = GetComponent<ParticleSystem> ();
gunLine = GetComponent <LineRenderer> ();
gunAudio = GetComponent<AudioSource> ();
gunLight = GetComponent<Light> ();
}
void Update ()
{
timer += Time.deltaTime;
if(Input.GetButton ("Fire1") && timer >= timeBetweenBullets && Time.timeScale != 0)
{
Shoot ();
}
if(timer >= timeBetweenBullets * effectsDisplayTime)
{
DisableEffects ();
}
}
public void DisableEffects ()
{
gunLine.enabled = false;
gunLight.enabled = false;
}
void Shoot ()
{
timer = 0f;
gunAudio.Play ();
gunLight.enabled = true;
gunParticles.Stop ();
gunParticles.Play ();
gunLine.enabled = true;
gunLine.SetPosition (0, transform.position);
shootRay.origin = transform.position;
shootRay.direction = transform.forward;
if(Physics.Raycast (shootRay, out shootHit, range, shootableMask))
{
EnemyHealth enemyHealth = shootHit.collider.GetComponent <EnemyHealth> ();
if(enemyHealth != null)
{
enemyHealth.TakeDamage (damagePerShot, shootHit.point);
}
gunLine.SetPosition (1, shootHit.point);
}
else
{
gunLine.SetPosition (1, shootRay.origin + shootRay.direction * range);
}
}
}
BonusCollide
Code : Tout sélectionner
using UnityEngine;
using System.Collections;
public class BonusCollide : MonoBehaviour {
PlayerShooting playerShooting;
void Awake (){
playerShooting = GetComponentInChildren<PlayerShooting>().timeBetweenBullets;
}
// Update is called once per frame
void Update () {
}
void OnCollisionEnter (Collision c){
playerShooting.timeBetweenBullets = 0.05f;
}
}
Assets/BonusCollide.cs(9,9): error CS0029: Cannot implicitly convert type `float' to `PlayerShooting'