integration vrtk dans le tuto survival shooter

Section dédiée à la VR avec Unity
chachinoi
Messages : 5
Inscription : 27 Août 2019 14:59

integration vrtk dans le tuto survival shooter

Message par chachinoi » 11 Sep 2019 16:55

bonjour, voila je bosse sur cette integration avec l occulus quest:
https://youtu.be/escwjnHFce0
Je veux maintenant ne plus avoir un seul gun en auto grab mais le grabber, ce qui fonctionne aussi mais j ai un probleme que je n arrive pas a comprendre ni a resoudre!
Voilà quand je tire avec l index trigger, alors que le pistolet est posé cela tire quand meme et en plus avec les 2 controlleurs!
J ai essayé au niveau du script playershooting.cs mais rien a faire, meme au niveau de la config input.
Quelqu un aurait deja rencontré ce probleme? Merci d avance!

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5080
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: integration vrtk dans le tuto survival shooter

Message par boubouk50 » 12 Sep 2019 09:14

Est-ce qu'on peut avoir ton code qui concerne le tir?
Là, comme ça, si ça continue à tirer alors que tu n'as plus l'arme en main, c'est possible que ce soit l'information qui ne soit pas passée. Normalement, tu devrais avoir une variable (genre booléenne) qui te dit si tu peux tirer ou pas, elle est peut-être pas modifiée lors de la dépose d'une arme.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

chachinoi
Messages : 5
Inscription : 27 Août 2019 14:59

Re: integration vrtk dans le tuto survival shooter

Message par chachinoi » 12 Sep 2019 10:38

Salut, merci de me répondre ;)
ce qui a été ajouté pour vrtk, a partir de 14.35 sur la video.

Code : Tout sélectionner

using UnityEngine;
using UnitySampleAssets.CrossPlatformInput;

namespace CompleteProject
{
    public class PlayerShooting : MonoBehaviour
    {
        public int damagePerShot = 20;                  // The damage inflicted by each bullet.
        public float timeBetweenBullets = 0.15f;        // The time between each shot.
        public float range = 100f;                      // The distance the gun can fire.
      public VRTK.VRTK_ControllerEvents controllerEvents;

        float timer;                                    // A timer to determine when to fire.
        Ray shootRay = new Ray();                       // A ray from the gun end forwards.
        RaycastHit shootHit;                            // A raycast hit to get information about what was hit.
        int shootableMask;                              // A layer mask so the raycast only hits things on the shootable layer.
        ParticleSystem gunParticles;                    // Reference to the particle system.
        LineRenderer gunLine;                           // Reference to the line renderer.
        AudioSource gunAudio;                           // Reference to the audio source.
        Light gunLight;                                 // Reference to the light component.
		public Light faceLight;								// Duh
        float effectsDisplayTime = 0.2f;                // The proportion of the timeBetweenBullets that the effects will display for.


        void Awake ()
        {
            // Create a layer mask for the Shootable layer.
            shootableMask = LayerMask.GetMask ("Shootable");

            // Set up the references.
            gunParticles = GetComponent<ParticleSystem> ();
            gunLine = GetComponent <LineRenderer> ();
            gunAudio = GetComponent<AudioSource> ();
            gunLight = GetComponent<Light> ();
			//faceLight = GetComponentInChildren<Light> ();
        }


        void Update ()
        {
            // Add the time since Update was last called to the timer.
            timer += Time.deltaTime;

#if !MOBILE_INPUT
            // If the Fire1 button is being press and it's time to fire...
			if((Input.GetButton ("Fire1") || controllerEvents.triggerPressed) && timer >= timeBetweenBullets && Time.timeScale != 0)
            {
                // ... shoot the gun.
                Shoot ();
            }
#else
            // If there is input on the shoot direction stick and it's time to fire...
            if ((CrossPlatformInputManager.GetAxisRaw("Mouse X") != 0 || CrossPlatformInputManager.GetAxisRaw("Mouse Y") != 0) && timer >= timeBetweenBullets)
            {
                // ... shoot the gun
                Shoot();
            }
#endif
            // If the timer has exceeded the proportion of timeBetweenBullets that the effects should be displayed for...
            if(timer >= timeBetweenBullets * effectsDisplayTime)
            {
                // ... disable the effects.
                DisableEffects ();
            }
        }


        public void DisableEffects ()
        {
            // Disable the line renderer and the light.
            gunLine.enabled = false;
			faceLight.enabled = false;
            gunLight.enabled = false;
        }


        void Shoot ()
        {
            // Reset the timer.
            timer = 0f;

            // Play the gun shot audioclip.
            gunAudio.Play ();

            // Enable the lights.
            gunLight.enabled = true;
			faceLight.enabled = true;

            // Stop the particles from playing if they were, then start the particles.
            gunParticles.Stop ();
            gunParticles.Play ();

            // Enable the line renderer and set it's first position to be the end of the gun.
            gunLine.enabled = true;
            gunLine.SetPosition (0, transform.position);

            // Set the shootRay so that it starts at the end of the gun and points forward from the barrel.
            shootRay.origin = transform.position;
            shootRay.direction = transform.forward;

            // Perform the raycast against gameobjects on the shootable layer and if it hits something...
            if(Physics.Raycast (shootRay, out shootHit, range, shootableMask))
            {
                // Try and find an EnemyHealth script on the gameobject hit.
                EnemyHealth enemyHealth = shootHit.collider.GetComponent <EnemyHealth> ();

                // If the EnemyHealth component exist...
                if(enemyHealth != null)
                {
                    // ... the enemy should take damage.
                    enemyHealth.TakeDamage (damagePerShot, shootHit.point);
                }

                // Set the second position of the line renderer to the point the raycast hit.
                gunLine.SetPosition (1, shootHit.point);
            }
            // If the raycast didn't hit anything on the shootable layer...
            else
            {
                // ... set the second position of the line renderer to the fullest extent of the gun's range.
                gunLine.SetPosition (1, shootRay.origin + shootRay.direction * range);
            }
        }
    }
}

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5080
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: integration vrtk dans le tuto survival shooter

Message par boubouk50 » 12 Sep 2019 10:54

C'est donc bien ce que je supposais, dans ce code, il n'y a rien qui indique qu'une arme est associée ou non.
Le tir est directement associé à ta gâchette et ne se soucie pas de savoir si tu as une arme en main ou pas.
Il faut donc ajouter la notion d'arme en main, un simple booléen fera l'affaire. Tu ajoutes donc cette notion que tu intègres dans ta condition de tir.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

chachinoi
Messages : 5
Inscription : 27 Août 2019 14:59

Re: integration vrtk dans le tuto survival shooter

Message par chachinoi » 12 Sep 2019 11:46

Merci beaucoup, le code n'est pas encore mon fort mais je vais regarder de ce coté la et en profiter pour apprendre ;)

chachinoi
Messages : 5
Inscription : 27 Août 2019 14:59

Re: integration vrtk dans le tuto survival shooter

Message par chachinoi » 14 Sep 2019 13:06

Salut, bon finalement je n'y arrive pas j'ai trouvé quelque chose qui s'en rapproche mais ça ne veut pas fonctionner!
Un petit coup de main serait super sympa ;)
Merci!!!!

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5080
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: integration vrtk dans le tuto survival shooter

Message par boubouk50 » 16 Sep 2019 10:12

Dans ton code, il te faut définir une variable booléenne (isArmed) qui possède l'information de possession d'une arme (supposons toujours chargée).
Cette variable est affectée lorsque le joueur dépose son arme (false) ou bien prend une arme (true).
Ensuite, avant d'appeler la fonction Shoot (), tu dois vérifier si le joueur possède une arme. Ainsi, si le joueur n'est pas armé, (isArmed == false) il ne peut pas tirer.

Il faut donc deux choses:
- la condition isArmed pour savoir si tu as le droit de tirer.
- Une fonction d'affectation de la variable isArmed depuis l'action de prendre ou jeter une arme.

Est-ce plus clair?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

chachinoi
Messages : 5
Inscription : 27 Août 2019 14:59

Re: integration vrtk dans le tuto survival shooter

Message par chachinoi » 18 Sep 2019 13:37

Salut, désolé je n'ai pas eu le temps ces derniers jours de me concentrer dessus. Merci beaucoup oui je comprends mieux je vais essayer de mettre en oeuvre cela, je suis encore en apprentissage ;)

Répondre

Revenir vers « Unity et la VR »