Character wrapper - code python
OverdOzed
Inscrit:
19/03/2016 15:30
De Belgique
Post(s): 1653
Bonjour tout le monde,

Je souhaiterai utiliser le character wrapper du BGE, car je n'arrive pas à modifier la brique logique s'y correspondant.

Après une recherche internet, j'ai pus faire ceci:

direction = own.orientation*Vector((0, 0, 0))

wraper.walkDirection = direction



Ce bout de code fonctionne à condition que j'utilise la brique logique character pour la rotation, car on expliquait qu'il fallait utiliser les vecteurs afin d'avoir le déplacement local puisque, par défaut, c'est en global.


Sauf que moi, pour orienter le personnage, j'utilise un "track to" vers un empty qui se trouve juste devant mon personnage (un peu comme l'âne et la carotte). Du coup, comment faire dans ce cas pour avoir le déplacement local ???




Deuxième problème sans rapport avec le character wrapper:

J'ai ce message d'erreur:

AttributeError: one or more of the items in the sequence was not a float

le responsable:

scene.objects[var_player['monture']].worldPosition = var_player['position_monture']

la source:

pos = gl.getSceneList()[0].objects[var_player['monture']].worldPosition
var_player['position_monture'] = list(pos)

Contribution le : 09/08/2019 10:34
Créer un fichier PDF de la contribution Imprimer


Re: Character wrapper - code python
OverdOzed
Inscrit:
23/02/2006 18:10
De Alpes-Maritimes
Post(s): 2648
Salut RedStar,

J'avais vu ta question mais n'étant pas expert en BGE, je pensais que quelqu'un d'autre pourrait t'aider. Apparemment, ce n'est pas le cas.
Je sais pas si ça pourra te faire avancer, le problème semblant plus mathématique que dépendant du BGE a première vue.

Est-ce que tu pourrais mieux décrire l'arbre de scène, en particulier pour le personnage et l'objet tracké ? Sont-ils sous des noeuds transformés ?


Je ne comprends pas ce calcul :
direction = own.orientation*Vector((0, 0, 0))

wraper.walkDirection = direction


Ça doit te rendre un vecteur nul (0,0,0) si on parle bien d'un produit vectoriel. Or, je ne vois pas comment ça peut faire une direction et donc fonctionner.

Aucune idée pour ta dernière question...

Contribution le : 12/08/2019 05:31
_________________
Venez tester notre projet de Blender clan 2.0 + Tchat (en cours de développement) !
Pourquoi ? Retrouver un forum fonctionnel.
Créer un fichier PDF de la contribution Imprimer


Re: Character wrapper - code python
OverdOzed
Inscrit:
19/03/2016 15:30
De Belgique
Post(s): 1653
Salut Bibi,

Je t'envoies un blend plus tard.

Pour le second problème, j'ai une piste, je pense que c'est à cause du fait que la monture est rajoutée dynamiquement, car j'ai les même lignes de code pour mon personnage et je n'ai pas cette erreur, alors que mon personnage est déjà présent dans la scène avant de lancer le jeu.

Contribution le : 13/08/2019 10:06
Créer un fichier PDF de la contribution Imprimer


Re: Character wrapper - code python
OverdOzed
Inscrit:
19/03/2016 15:30
De Belgique
Post(s): 1653

Contribution le : 15/08/2019 10:13
Créer un fichier PDF de la contribution Imprimer


Re: Character wrapper - code python
OverdOzed
Inscrit:
23/02/2006 18:10
De Alpes-Maritimes
Post(s): 2648
Hello,

En l'état, le blend m'indique juste que le wrapper fonctionne bien. A moins que je sois passé à côté de la chose à voir ?

Dans le premier post, tu parles de tracking mais je ne vois rien de tout ça dans le blend ? Du coup ça ne répond pas à ma question de savoir la position de ton perso et du tracker dans l'arbre de scène.

Par exemple :


La raison pour laquelle je voudrais connaître ça, c'est tout simple. Si tes objets (perso et tracker) sont directement enfants de la racine (inaccessible dans le scene tree de Blender), alors :
orientation globale = orientation locale


Encore faudrait-il vérifier quelques trucs, comme l'accès à cette orientation et la valeur retournée pour en être sûr !

Contribution le : 15/08/2019 16:40
_________________
Venez tester notre projet de Blender clan 2.0 + Tchat (en cours de développement) !
Pourquoi ? Retrouver un forum fonctionnel.
Créer un fichier PDF de la contribution Imprimer


Re: Character wrapper - code python
OverdOzed
Inscrit:
23/02/2006 18:10
De Alpes-Maritimes
Post(s): 2648
D'ailleurs, c'est peut-être un petit détail mais pour la partie code, je trouverais plus clair de faire ainsi :

import bge
from mathutils import Vector

cont = bge.logic.getCurrentController()
own = cont.owner

wraper = bge.constraints.getCharacter(own)

direction = own.orientation * Vector((0, 1, 0))

if cont.sensors['Keyboard'].positive:
    speed = 0.1
    wraper.gravity = 9.80
else:
    speed = 0
    if wraper.onGround:
        wraper.gravity = 0
    else:
        wraper.gravity = 9.80
    
wraper.walkDirection = direction * speed


Pourquoi ?
Le calcul est strictement identique. Mais à la lecture du code, on sépare bien deux notions qui ne sont pas liées : la direction et la vitesse. Avec "Vector((0, 0.1, 0))", on mélange les deux valeurs à la fois et c'est pas hyper sexy.

Direction, c'est un vecteur qui nous indique dans quelle direction aller (en orientation locale). On parle uniquement de direction. Donc on extrait uniquement la composante Y du vecteur orientation
(techniquement, il faudrait normaliser le vecteur direction mais ici own.orientation fournit déjà un vecteur normalisé).

Ensuite, on voit que ça va un peu trop vite. On va donc régler la vitesse de déplacement avec une variable speed. On l'applique au vecteur direction. A noter que si cette variable est négative, on "recule", ce qui est plus intuitif qu'un "Vector((0, -0.1, 0))".

Donc on a à la fois la direction et la vitesse de déplacement, mais elles sont découplées pour les rendre claires et intuitives.

Contribution le : 15/08/2019 17:02
_________________
Venez tester notre projet de Blender clan 2.0 + Tchat (en cours de développement) !
Pourquoi ? Retrouver un forum fonctionnel.
Créer un fichier PDF de la contribution Imprimer


Re: Character wrapper - code python
OverdOzed
Inscrit:
19/03/2016 15:30
De Belgique
Post(s): 1653
En effet, cela me semble plus logique ainsi.

J'ai finalement trouvé pourquoi mon cube ne s'oriente pas comme voulu selon la direction de sa cible: Je me focalisais sur le "track to", alors que je devais actualiser le script "character wrapper", puisque, grâce au tracker, l'orientation à changé, mais pas les informations du script, puisqu'il est lancé une seule fois.

Et en ce qui concerne le positionnement d ela monture, là aussi, j'ai résolut le problème, mais je ne suis pas sûr de comprendre pourquoi:

Donc, avant d’enclencher le mode jeu, le joueur est présent mais pas la monture, puisqu'elle doit être générée selon un paramètre précis, à savoir si c'est un cheval à poil brun ou brun-clair.

Quand je charge une partie afin de repositionner mon personnage et générer la monture, la monture est générée, mais python ne semble pas comprendre ce qu'il dois faire avec la monture.

Du coup, j'ai déplacer les lignes de codes en question sur la monture, et là, je n'ai plus d'erreurs.

Ce qui m'étonne, c'est que python ne bronche pas pour le joueur, alors que ce sont exactement les même lignes de codes, bien que ce n'est pas le même objet.

Bref, je pense que c'est à cause du fait que la monture n'est pas présente avant d'enclencher le mode jeu ou une mauvaise compréhension de python.

Merci bibi

Contribution le : 17/08/2019 10:28
Créer un fichier PDF de la contribution Imprimer


Re: Character wrapper - code python
OverdOzed
Inscrit:
23/02/2006 18:10
De Alpes-Maritimes
Post(s): 2648
Content que ça soit résolu ! Mais je n'ai rien fait du coup.

Pour ton souci de monture, je n'ai pas vraiment d'idée mais des indices me laissent penser à une chose.

Éventuellement, le problème est que tu tentais d'accéder à ta monture avant qu'elle ne soit effectivement créée / accessible pour Python.

Dans ce cas, ça serait une valeur inexistante et Python ne saurait pas définir le type de donnée associée, d'où le fait qu'il gueulerait sur le typage non "float". Ton joueur est, quant à lui, accessible puisque déjà créé à l'initialisation du jeu.

Mais ça ne reste que spéculation au vu des informations que tu as fournies. Cette théorie est toutefois renforcée par le déplacement du code qui donne un bon fonctionnement. Peut-être que tu as mis le code à un endroit où ça tombe bien car la création des données de la monture s'est faite avant.

Ne connaissant pas le code ni la structure du programme, je ne peux pas aller plus loin dans le raisonnement.

Contribution le : 17/08/2019 22:31
_________________
Venez tester notre projet de Blender clan 2.0 + Tchat (en cours de développement) !
Pourquoi ? Retrouver un forum fonctionnel.
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
Compte*
Nom   Mot de passe   Authentification
Message:*



[Recherche avancée]



Sujets récemment répondus
Forums Sujets Réponses Lus Dernières contributions
[WIP] et travaux terminés [WIP] Scène de Pti dej à la Française - EVEE a donf - 2.9 Blender    [1][2] 13 129 Aujourd'hui 01:07:59
meltingman 
[WIP] et travaux terminés [terminé] Moderno 404    [1][2] 13 441 Hier 20:26:41
moonboots 
Questions & Réponses Lissage de face 4 53 Hier 19:43:53
Maxence34 
[WIP] et travaux terminés [terminé] Chaussures Très Réalistes (.bend disponible) 4 88 Hier 18:21:58
meltingman 
Questions & Réponses Modifier les attribue de plusieurs objet en même temps (lumière) 2 35 Hier 18:15:18
meltingman 
Mes premières images sous Blender (débutants) Première réalisation    [1][2] 15 8935 Hier 02:13:26
Talason 
The Blender Clan 'tchat Addon convertisseur d'images en courbes 2 52 22/10 20:29:31
Rimpotche 
The Blender Clan 'tchat Pour les arboriculteurs 3D 1 59 22/10 18:05:18
moonboots 
Hors Sujet !! Faire parler son personnage en 5 minutes - tutoriel Francais - Blender 2.9 4 100 22/10 13:03:28
meltingman 
GIMP Faire un drégradé selon la forme sous gimp 9 79 22/10 12:49:57
Thewada 
Questions & Réponses [résolu] Perte des Vertex lors d'un Separate 7 83 21/10 21:45:05
debutant 
[WIP] et travaux terminés [terminé] Pantin articulé    [1][2] 12 6726 21/10 18:53:51
meltingman 
Questions & Réponses hdri en mode ombrage 1 73 20/10 21:14:15
moonboots 
Hors Sujet !! Une citrouille en 13 clics - Tutoriel - Blender 2.9 2 151 19/10 23:40:15
meltingman 
Hors Sujet !! un banc de dauphin - tutoriel - workflow sculpte > bake - 2.9    [1][2] 12 436 19/10 23:36:41
meltingman 
Questions & Réponses [résolu] Particule réaliste pour un sprite    [1][2] 12 659 19/10 13:39:34
Redstar 
Questions & Réponses Eevee : chevauchements en profondeur 4 180 19/10 11:46:51
meltingman 
Questions & Réponses Dans Blender 2.9, rendre une animation avec seulement la réflexion    [1][2] 16 583 19/10 11:08:45
ludo66 
Questions & Réponses Besoin de vos retours ici sur les changements 2.9    [1][2][3] 20 620 18/10 16:02:23
meltingman 
The Blender Clan 'tchat Moniteur endommagé 2 362 18/10 11:59:42
Rimpotche 

Qui est en ligne
143 utilisateur(s) en ligne (dont 64 sur Forums)

Membre(s): 1
Invité(s): 142


GabrielleH, plus...
Nouveaux membres
RooseveltM 24/10/2020
KerriWinni 24/10/2020
ChristieMu 24/10/2020
LilyXtn70 24/10/2020
ScarlettSt 24/10/2020
ShermanHjr 24/10/2020
StephenAth 24/10/2020
GabrielleH 24/10/2020
DaniloSuff 24/10/2020
MarshaCaro 24/10/2020
Dernier Ajout
mirages-preview~0.jpg

Evènements à venir
Nov 18
Anniversaire de RichDeg
Dec 29
Anniversaire d'ebrain
Jan 9
BUG de Lyon
plus 264 plus d'élément(s)
 Par Mickaël Guédon [ebrain] © 2003-2020 The Blender Clan - hébergé par TuxFamily - Site déclaré à la CNIL sous le numéro 1155445