C# Indiquer une direction

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Bilu
Messages : 29
Inscription : 20 Nov 2019 09:24

C# Indiquer une direction

Message par Bilu » 26 Juil 2020 18:56

Bonjour,

Dans mon jeu, mon personnage peut bouger dans toutes les directions dans le plan xy. À certain moment, des objets apparaissent sur la map et j'aimerai avoir une indication de direction que doit prendre mon personnage pour atteindre cet objet.

J'aimerai donc que cet indicateur puisse tourner autour de mon personnage tout en restant en bordure d'écran (visible donc de la caméra principal). Je n'ai rien trouvé de fonctionnel sur internet pour m'aider à faire roter un objet (l'indicateur de direction) par rapport à la position d'un autre objet (joueur).

Pourriez-vous m'aider ?

Bien à vous,

Bilu

Avatar de l’utilisateur
Max
Newser
Newser
Messages : 7911
Inscription : 30 Juil 2011 13:57

Re: C# Indiquer une direction

Message par Max » 27 Juil 2020 12:03

Hello,
Bilu a écrit :
26 Juil 2020 18:56
J'aimerai donc que cet indicateur puisse tourner autour de mon personnage tout en restant en bordure d'écran (visible donc de la caméra principal).
Perso, je comprend pas trop le "puisse tourner autour de mon personnage tout en restant en bordure d'écran". Tu as un screen pour mieux comprendre ?
Si tu penses à un truc du genre réticule orientable à la base de ton player, regarde par exemple du coté des Projectors.


Bilu a écrit :
26 Juil 2020 18:56
Je n'ai rien trouvé de fonctionnel sur internet pour m'aider à faire roter un objet
une piste: 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

Bilu
Messages : 29
Inscription : 20 Nov 2019 09:24

Re: C# Indiquer une direction

Message par Bilu » 27 Juil 2020 18:51

Bonjour Max
Max a écrit :
27 Juil 2020 12:03
...
Bilu a écrit :
26 Juil 2020 18:56
Je n'ai rien trouvé de fonctionnel sur internet pour m'aider à faire roter un objet
une piste: Image
Hahaha :lol:

https://www.youtube.com/watch?v=CuKrEC0jusM

Sur cette vidéo à 8 secondes, il y a un missiles qui arrive par haut et un indicateur rouge montre au joueur par où arrivent ce missile. A partir de 6 secondes il y a un indicateur bleu qui signale au joueur qu'il y a quelque chose à récupérer.
Ces deux indicateurs restent en bordures d'écrans (donc toujours visible) pour aider le joueur. On dirait que ça pivote autour du joueur tout en restant en bordure d'écran.
Est-ce plus clair ?

Bien à toi,

Bilu

Bilu
Messages : 29
Inscription : 20 Nov 2019 09:24

Re: C# Indiquer une direction

Message par Bilu » 04 Août 2020 17:28

Bonjour,

Je reviens vers vous car j'ai toujours pas trouvé la solution à mon problème.

Donc voici une image pour illustrer mon soucis :
Image

Quand l'objet en jaune en haut à droite sort de la vision de la caméra (carré blanc autour du joueur en rose) je voudrai que le petit objet jaune sert d'indication pour donner la direction que doit prendre le joueur pour le retrouver.

Pour ça j'ai utilisé le code suivant :

Code : Tout sélectionner

	dir = money.position - player.position;
        dirDuplicate = dir;
        //dir.Normalize();

        float alpha = (float)Math.Atan2(dir.x, dir.y)  ;



        Vector3 pos = transform.position;      
        
       if (dir.x > camWidth/2 && dir.y < camHeight / 2)
        {
            dirDuplicate.x = camWidth/2 - camWidth/100*1;
            dirDuplicate.y = dirDuplicate.x * (float)Math.Tan(alpha);
        }

       if (dir.y > camHeight/2 && dir.x < camWidth / 2)
        {
            dirDuplicate.y = camHeight / 2 - camHeight / 100 * 1;
            dirDuplicate.x = dirDuplicate.y / (float)Math.Tan(alpha);
        }

        if (dir.x > camWidth / 2 && dir.y > camHeight / 2)
        {
            dirDuplicate.x = camWidth / 2 - camWidth / 100 * 1;
            dirDuplicate.y = dirDuplicate.x * (float)Math.Tan(alpha);
        }


        if (dirDuplicate.x < camWidth / 2 && dirDuplicate.y < camHeight / 2)
        {
            Die();

        }

        
        transform.position = player.position + dirDuplicate;
Mais ça ne marche pas.
Premièrement, quand je fait :
transform.position = player.position + dir;

L'indicateur se trouve pile poil sur l'objet jaune donc la direction est bonne. Mais l'indicateur n'est pas dans la vision de la caméra donc j'utilise les Atan2 alpha, Tan ... pour le forcer à rester dans la vision de la caméra mais comme vous pouvez le constater l'indicateur est tjs hors de la cam mais en plus si vous tracer une ligne entre le joueur et la money, l'indicateur n'est pas dessus donc la direction n'est plus bonne.

Est ce que vous pourriez m'aider s'il vous plaît ?

Bien à vous,

Bilu

Avatar de l’utilisateur
Max
Newser
Newser
Messages : 7911
Inscription : 30 Juil 2011 13:57

Re: C# Indiquer une direction

Message par Max » 04 Août 2020 19:01

Bonsoir,

perso, en terme d'approche, je partirais sur 4 colliders enfant du player, formant un rectangle lié à la dimension de l'écran.
Et pour le reste, super simple: tu fais un Physics2D.Raycast() entre ton player et l'eni, le point de contact avec le cadre collider représentant la position où doit se trouver ton indicateur.

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

Bilu
Messages : 29
Inscription : 20 Nov 2019 09:24

Re: C# Indiquer une direction

Message par Bilu » 04 Août 2020 21:26

Je vais regarder à ca merci :)

Répondre

Revenir vers « Scripting Javascript, C# et Boo »