[DB-AL] script C# changement Arme d'un FPS

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Avatar de l’utilisateur
Paullux
Messages : 68
Inscription : 12 Nov 2015 17:11
Contact :

[DB-AL] script C# changement Arme d'un FPS

Message par Paullux » 28 Oct 2017 23:50

Bonjour,

En ce moment je suis entrain de faire un jeu FPS;

j'ai écrit un script en C# :

Code : Tout sélectionner

if (ChangementArme)
        {
            Debug.Log("Changement d'arme appuyer");
            bool Arme0 = (!Couteau.activeSelf && !Gun.activeSelf && !Shotgun.activeSelf);
            bool Arme1 = (Couteau.activeSelf && !Gun.activeSelf && !Shotgun.activeSelf);
            bool Arme2 = (!Couteau.activeSelf && Gun.activeSelf && !Shotgun.activeSelf);
            bool Arme3 = (!Couteau.activeSelf && !Gun.activeSelf && Shotgun.activeSelf);
            if (Arme0) Arme = 0;
            if (Arme1) Arme = 1;
            if (Arme2) Arme = 2;
            if (Arme3) Arme = 3;
            bool MunitGun1 = (Munit + DansChargeur > 0);
            bool MunitShotgun = bullet > 0;

            
            if (Arme == 0) Arme = 1;
            if (Arme == 1 && !MunitGun1 && !MunitShotgun) Arme = 0;
            if (Arme == 1 && MunitGun1) Arme = 2;
            if (Arme == 2 && !MunitShotgun) Arme = 0;
            if (Arme == 2 && MunitShotgun) Arme = 3;
            if (Arme == 3) Arme = 0;

            bool Intermediaire = (Arme != 3 || (Arme == 3 && !MunitShotgun));

            if (Arme != 2 && Intermediaire && GunReloaded)
            {
                Arme = 2;
                GunReloaded = false;
            }
            
            if (Arme != 3 && ShotgunReloaded)
            {
                Arme = 3;
                ShotgunReloaded = false;
            }
            
            
            switch (Arme)
            {
                case 0:
                    Couteau.SetActive(false);
                    SangLame.SetActive(false);
                    Gun.SetActive(false);
                    Shotgun.SetActive(false);
                    FeuGun.SetActive(false);
                    FeuShotgun.SetActive(false);
                    break;
                case 1:
                    Couteau.SetActive(true);
                    SangLame.SetActive(false);
                    Gun.SetActive(false);
                    Shotgun.SetActive(false);
                    FeuGun.SetActive(false);
                    FeuShotgun.SetActive(false);
                    break;
                case 2:
                    Couteau.SetActive(false);
                    SangLame.SetActive(false);
                    Gun.SetActive(true);
                    Shotgun.SetActive(false);
                    FeuGun.SetActive(false);
                    FeuShotgun.SetActive(false);
                    break;
                case 3:

                    Couteau.SetActive(false);
                    SangLame.SetActive(false);
                    Gun.SetActive(false);
                    Shotgun.SetActive(true);
                    FeuGun.SetActive(false);
                    FeuShotgun.SetActive(false);
                    break;
            }
        }
Et je ne comprends pas pourquoi il ne fonctionne pas, j'ai fait un petit dessin pour expliquer ce que je veux.
Qu'est-ce qui ne va pas ? Merci d'avance pour votre aide.

Image

Ce que j'ai c'est :
  • si je n'ai pas d'arme je ne peux pas charger autre chose.
  • si je lance la recharge du fusil en premier je peux passer au couteau et revenir sans arme, mais dès que je recharge le pistolet je repasse sans arme et je ne peux changer.
  • si je lance la recharge du pistolet en premier je ne peux pas avoir une arme, je suis sans arme tout le temps.
J'ai créé un ensemble de jeux :

Un HUB : https://bit.ly/2J6EZTO
Un jeu avec contrôle tactile à l'écran : https://bit.ly/2J3IkTw
Un jeu en VR : https://bit.ly/2h5jdzk
Un jeu en AR : https://bit.ly/2LgMvIo

Il s'agit de FPS pour Android.

Fasol0
Messages : 64
Inscription : 07 Avr 2015 11:43

Re: [DB-AL] script C# changement Arme d'un FPS

Message par Fasol0 » 12 Nov 2017 23:51

Bonjour, selon ton code ci-dessous

Code : Tout sélectionner

    if (Arme == 0) Arme = 1;
    if (Arme == 1 && !MunitGun1 && !MunitShotgun) Arme = 0;
    if (Arme == 1 && MunitGun1) Arme = 2;
    if (Arme == 2 && !MunitShotgun) Arme = 0;
    if (Arme == 2 && MunitShotgun) Arme = 3;
     if (Arme == 3) Arme = 0;
       
Si je n'ai rien en main (arme = 0) , des munitions de Gun mais pas de shotgun,
alors, en une seule exécution de ta fonction:
ligne 1: on passe au couteau (arme = 1)
ligne 2: on passe au gun vu que l'on a des munitions de Gun
ligne 3: on retourne sans rien (arme = 0) vu que l'on a pas de shotgun
donc dans ce cas de figure par exemple, on ne peut jamais changer d'arme.

Ton problème est que toutes tes conditions sont controlées à chaque fois,
Il te faut utiliser des conditions exclusives (else if) et bien séparer les cas de figure:

Code : Tout sélectionner

if(arme==0) arme =1;
else if(arme==1)
{
	if(MunitGun1) arme = 2;
	else if (MunitShotgun) arme = 3;
	else arme = 0;
}
else if(arme==2)
{
	if(MunitShotgun) arme =3;
	else arme = 0;
}
else if (arme==3) arme =0;

Répondre

Revenir vers « (C#) CSharp »