[UNITY 3D] Problème scripting

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour, déja voilà le script que j’ai fais

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class openChest : MonoBehaviour {
    private Vector3 openCh;
    public Vector3 maxOpenCh;
    // Use this for initialization
    void Start () {
        openCh = transform.position;
        maxOpenCh = openCh;
    }

    // Update is called once per frame
    void Update () {
        openTheChest ();
        if (openCh > maxOpenCh) {          //Le prob
            openCh = maxOpenCh;            //Le prob
        }
    }

    void openTheChest (){
        if (Input.GetKeyDown ("b")) {
        openCh.y += 35f * Time.deltaTime;
        transform.position = openCh;
        }
    }

}

est un script qui quand j’appuis sur b, le haut d’un coffre monte, je voudrais faire en sorte qu’on puisse ouvrir le coffre une fois seulement une fois. J’ai essayé de faire comme en haut mettant une variable maxOpenCh ou je vais rentré les coordonnées maximales, mais:colere2: ça ne veux pas marcher.

Le code d’erreur:

Assets/openChest.cs(17,7): error CS0019: Operator >' cannot be applied to operands of typeUnityEngine.Vector3’ and `UnityEngine.Vector3’

-

Édité par PixarFilmz-

+0 -0

Eh bien je n’ai pas fait d’unity depuis un bout de temps, mais tu essayes de comparer des vecteurs, ce qui est impossible (opérateur non défini pour des vecteurs).

Tu voulais probablement comparé les composantes y des vecteurs. Donc tu devrais mettre .y (tu as fais pareil dans ton code plus bas)

Édité par Unknown

Vive la science

+0 -0
Auteur du sujet

En gros je voudrais qu’on puisse appuyer sur ’b’ seulement 1 fois, ne pas spammer la touche, il ne faut pas qu’il dépasse une certaine hauteur

Édité par PixarFilmz-

+0 -0
Auteur du sujet

J’ai fais ça

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class openChest : MonoBehaviour {
    private Vector3 openCh;
    public Vector3 maxOpenCh;
    public Vector3 minOpenCh;
    // Use this for initialization
    void Start () {
        openCh = transform.position;
        maxOpenCh = new Vector3 (0, 1.6f, 0);
        minOpenCh = new Vector3 (0, 1.6f, 0);

    }

    // Update is called once per frame
    void Update () {
        openTheChest ();
        if (openCh.y >= maxOpenCh.y) {
            openCh.y = maxOpenCh.y / minOpenCh.y;
        }

    }

    void openTheChest (){
        if (Input.GetKeyDown ("b")) {
        openCh.y += 35f * Time.deltaTime; 
        transform.position = openCh;
        }
    }

}

`

Sa marche moyen moyen

Édité par PixarFilmz-

+0 -0

La ligne 21 est inutile (tu dis que openChest.y = 1).

Sinon, je ne comprends pas comment tu veux ouvrir ton coffre. De quoi est composé le coffre (en tant que gameobject ?) Du couvercle et de la base ?

Tu devrais placer un objet (invisible) à la hauteur maximale du coffre dans la scène. Dans ton script tu récupères la position de cet objet à l’initialisation.

Ta fonction openChest est bien, mais tu pourrais passer le 35f en paramètre (une variable que tu peux changer si tu as différents types de coffres), pour ne pas avoir à ouvrir ton script pour changer cette valeur. Ensuite si tu veux bien que le couvercle monte, ta condition dans update est bien. La seule chose que tu dois faire, c’est en gros arrêter le script quand tu arrives au bon niveau.

Je repète: tu detectes l’action d’ouverture du coffre, tu ajoutes le script au couvercle du coffre pour l’ouvrir, quand tu as detecté que le coffre est ouvert, tu détruis le script.

1
2
3
4
if (openCh.y >= maxOpenCh.y) {
           openCh.y = maxOpenCh.y;
 Destroy(GetComponent<openChest>);
       }

Je ne comprends pas pourquoi tu veux bouger le coffre vers le haut, pour moi c’est plutôt une rotation qu’il faudrait faire, plus qu’une translation (un couvercle tourne autour d’un axe généralement). Mais bon, peut-être que c’est ce que tu cherches.

Si tu veux faire une translation, tu es sur la bonne piste.

Vive la science

+0 -0
Auteur du sujet

Putaing, j’ai réussi avec ce script, je sais pas comment je n’y est pas pensé(j’ai commencé unity sa fais peut-être 3 sem)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class opChest_cover : MonoBehaviour {

    private Vector3 initialPos;
    private bool antiSpam = true;

    // Use this for initialization
    void Start () {
        initialPos = transform.position;
    }

    // Update is called once per frame
    void Update () {
        if (antiSpam == true){
            openChestMovement ();
            antiSpam = false;
        }
    }

    void tes (){
        if (antiSpam == true){
            openChestMovement ();
            antiSpam = false;
        }
    }



    void openChestMovement (){
        initialPos.y += 1;
        transform.position = initialPos;
    }


}

Le haut du coffre montre de 1 et reste fixe :D Mais je n’ai toujours pas trouvé ou mettre le if (Input.GetKeyDown..), je voudrais qu’il monte "s’ouvre" seulement quand j’appuis sur b. J’ai ça comme point de référence si tu veux (marche pas)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class opChest_cover : MonoBehaviour {

    private Vector3 initialPos;
    private bool antiSpam = true;

    // Use this for initialization
    void Start () {
        initialPos = transform.position;

    }

    // Update is called once per frame
    void Update () {
        if (Input.GetKeyDown ("b")) {
            openChestMovement ();
            tes (); 
        }
    }

    void tes (){
        if (antiSpam == true){
            openChestMovement ();
            antiSpam = false;
        }
    }



    void openChestMovement (){
        initialPos.y += 1;
        transform.position = initialPos;
    }


}
+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte